Разбиение больших строк на слова в php - PullRequest
0 голосов
/ 01 февраля 2012

У меня есть длинная строка в php, состоящая из разных параграфов, каждый из которых имеет разные предложения (это в значительной степени небольшой документ).Я хочу разбить все это на слова, удалив любые символы / символы, которые не имеют отношения.Например, удалите запятые, пробелы, новые строки, точки остановки, восклицательные знаки и все, что может оказаться неуместным, чтобы в итоге были только слова.

Существует ли простой способ сделать это, например, за один раз?используя регулярное выражение и функцию preg_split, или я должен использовать функцию explode несколько раз: например, сначала получить все предложения (удалив «.», «!» и т. д.).Затем получите слова, удалив ',', пробелы и т. Д. И т. Д.

Я не хотел бы использовать функцию explode для всех возможных символов, которые не имеют значения, поскольку это отнимает много времени, и я могу случайно пропустить некоторые извсе эти возможные символы.

Я хотел бы найти более автоматический способ.Я думаю, что хорошо определенное регулярное выражение может сделать эту работу, но опять же мне нужно будет указать все возможные символы, а также я не знаю, как писать регулярные выражения в php.

Так что вы можете мне предложить?

Ответы [ 4 ]

3 голосов
/ 01 февраля 2012

Хотите удалить знаки препинания и т. Д., А затем разбить слова на массивы?Или просто раздеть его, чтобы были только буквы и пробелы?Не совсем уверен, что вы пытаетесь достичь, но может помочь следующее:

<?php

$string = "This is a sentence! It has *lots* of #$@king random non-word characters. Wouldn't you like to strip them?";

$words = preg_replace("/[^\w\ _]+/", '', $string); // strip all punctuation characters, news lines, etc.
$words = preg_split("/\s+/", $words); // split by left over spaces

var_dump($words);

В любом случае, это дает вам общее представление об использовании регулярных выражений для манипулирования текстом по мере необходимости.Мой пример состоит из двух частей, поэтому слова типа «не будет» не разбиваются на два слова, как предлагали другие ответы.

1 голос
/ 02 февраля 2012

Чтобы быть совместимым с Юникодом, вы должны использовать это:

preg_split('/\PL+/u', $string, -1, PREG_SPLIT_NO_EMPTY);

, который разбивается на символы, которые не являются буквами.

Взгляните на здесь , чтобы увидеть свойства символов юникода.

0 голосов
/ 01 февраля 2012

Ваш ответ находится в области регулярных выражений, и, вероятно, его будет очень сложно понять правильно. Вы могли бы получить что-то, что хорошо работает почти во всех случаях, но были бы исключения.

Это может помочь:

http://www.regular -expressions.info / wordboundaries.html

0 голосов
/ 01 февраля 2012

Просто используйте preg_replace () и задайте регулярное выражение для сопоставления с различными символами, которые вы хотите заменить, и укажите заменяющий символ для их замены.

http://php.net/manual/en/function.preg-replace.php

Для символов, которые вы хотите найти, вы можете определить символы в массиве PHP, как показано в руководстве по PHP.

...