Intereting Posts
Не удается подключиться к MySQL на Mac – отсутствует файл mysql.sock PHP не может найти модули SNMP под Windows 7 Импорт классов и пространств имен в PHP: Какая разница делает лидирующую обратную косую черту? декодирование массива из json в PHP и невозможность доступа к элементам массива с использованием ключей Проблема с конфигурацией с контактной формой PHP Сохранение обрезанного изображения в различной ширине и высоте call_user_func (массив ($ this, $ method), $ par) из конструктора родителя? Преобразование объекта в массив дает странный результат PHP: Как идентифицировать И ИЗМЕНИТЬ повторяющиеся значения в массиве? URL Rewrite -.htaccess Будет ли PHP sha1 () и MySQL SHA () получить тот же результат? Как вызвать URL-адрес JSON в php, который включает пробелы в запросе Список файлов в каталоге и результат печати в формате JSON Импортирование MS ACCESS DB в mySql? Передавать значение в массиве опций в встроенную форму

Как я могу разделить предложение на слова и знаки препинания?

Например, я хочу разбить это предложение:

I am a sentence. 

В массив с 5 частями; I , am , a , sentence и . ,

В настоящее время я использую preg_split после попытки explode , но я не могу найти что-то подходящее.

Это то, что я пробовал:

 $sentence = explode(" ", $sentence); /* returns array(4) { [0]=> string(1) "I" [1]=> string(2) "am" [2]=> string(1) "a" [3]=> string(8) "sentence." } */ 

А также это:

 $sentence = preg_split("/[.?!\s]/", $sentence); /* returns array(5) { [0]=> string(1) "I" [1]=> string(2) "am" [2]=> string(1) "a" [3]=> string(8) "sentence" [4]=> string(0) "" } */ 

Как это может быть сделано?

Вы можете разделить границы слов:

 $sentence = preg_split("/(?<=\w)\b\s*/", 'I am a sentence.'); 

В основном регулярное выражение проверяет, пока не будет найден символ слова, а затем после него регулярное выражение должно зафиксировать границу слова и некоторое дополнительное пространство.

Выход :

 array(5) { [0]=> string(1) "I" [1]=> string(2) "am" [2]=> string(1) "a" [3]=> string(8) "sentence" [4]=> string(1) "." } 

Я искал одно и то же решение и приземлился здесь. Принятое решение не работает с символами без слов, такими как апострофы и знаки акцента и так далее. Ниже найдите решение, которое сработало для меня.

Вот мое тестовое предложение:

Любимая соната Клэр для фортепиано – Sonata No. 15 до мажор.

Принятый ответ дал мне следующие результаты:

 Array ( [0] => Claire [1] => 's [2] => favorite [3] => sonata [4] => for [5] => piano [6] => is [7] => Mozart [8] => 's [9] => Sonata [10] => no [11] => . 15 [12] => in [13] => C [14] => Major [15] => . ) 

Решение, которое я придумал, следующее:

 $parts = preg_split("/\s+|\b(?=[!\?\.])(?!\.\s+)/", $sentence); 

Он дает следующие результаты:

 Array ( [0] => Claire's [1] => favorite [2] => sonata [3] => for [4] => piano [5] => is [6] => Mozart's [7] => Sonata [8] => no. [9] => 15 [10] => in [11] => C [12] => Major [13] => . )