Лучший способ разобрать текстовый документ - PullRequest
7 голосов
/ 13 апреля 2011

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

Пример текста:

"Hello, how are you (today)"

Это то, что я сейчас делаю:

$document_array  = explode(' ', $document_text);
json_encode($document_array);

Результирующий JSON:

[["Hello,"],["how"],["are"],["you"],["(today)"]]

Как мне обеспечить, чтобы пробелы оставались на месте и чтобы символы не включались вместе со словами ...

[["Hello"],[", "],["how"],[" "],["are"],[" "],["you"],["  ("],["today"],[")"]]

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

Ответы [ 2 ]

4 голосов
/ 13 апреля 2011

На самом деле это действительно сложная проблема, которая требует значительных научных исследований.Это звучит так просто (просто разбить на пробел! С несколькими правилами пунктуации ...), но вы быстро столкнетесь с проблемами."Не" одно слово или два?Как насчет переносимых слов?Некоторые могут быть одним словом, некоторые могут быть двумя.Как насчет нескольких последовательных знаков пунктуации?Имеет против цитаты?и т. д. и т. д. Даже определение конца предложения нетривиально.(Это просто полная остановка, верно?!)

Эта проблема относится к токенизации и является темой, которую поисковые системы воспринимают очень серьезно.Честно говоря, вам стоит обратить внимание на поиск токенизатора на выбранном вами языке.

2 голосов
/ 13 апреля 2011

Может быть, это:?

array_filter(preg_split('/\b/', $document_text))

'array_filter', удаляет пустые значения в первом и / или последнем индексе результирующего массива, который появится, если ваша строка начинается или заканчивается границей слова (\ b см .: http://php.net/manual/en/regexp.reference.escape.php)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...