Intereting Posts
Как автоматическое обновление данных в базе данных в PHP Функция, чтобы проверить, соответствует ли значение db текущей опции выбора Как удалить атрибуты с помощью PHP DOMDocument? PHP: DOMDocument – атрибуты с двоеточием в нем? Почему функция addslashes () не работает в моем массиве в php? PHP $ string {0} vs. $ string ; Как заставить приложение Facebook автоматически запрашивать требуемые разрешения после установки Допустимый размер памяти 33554432 байт исчерпан (пытался выделить 43148176 байт) в php Как настроить cookie HttpOnly на PHP? Как написать getter / setter для доступа к многоуровневому массиву по ключевым словам? Curl в разных версиях PHP: один работает, другой – нет Интерактивная обработка файлов с использованием PHP, jQuery и Ajax как передать пользовательские поля в $ _POST или $ _GET в окне CKEdtior Upload? Laravel: метод BadMethodCallException не существует Почему я не могу создать проект PHP с помощью Eclipse Juno?

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

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

Рассмотрим, например, азиатскую катастрофу цунами, которая произошла в конце 2004 года. Запрос на новости Google (http://news.google.com) возвратил более 80 000 онлайн-новостей об этом событии в течение одного месяца (январь 17 до 17 февраля 2005 г.). информация по mr. Кахане.

вот мой код:

$re = '/(?<=[.!?]|[.!?][\'"])\s+/'; $sentences = preg_split($re, $text, -1, PREG_SPLIT_NO_EMPTY); 

но последнее предложение по-прежнему разделяло information by mr. и Kahana. как его решить? Спасибо 🙂

Вы не можете сделать это с помощью регулярных выражений

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

Если это не критично для вашей программы, я предлагаю вам вместо этого определить следующие вещи:

  • Каков приемлемый уровень ошибок? Ничто из того, что вы делаете, будет совершенным. Но если он работает 80%, это нормально? 90%? 99%? Насколько это важно для вас / вашего клиента?
  • Откуда идет текст? Например, учебник, скорее всего, будет написан иначе, чем в твиттер-каналах людей. Вы можете делать исследования и делать исключения на основе того, что вы видите в фактическом тексте, который используете.
  • Что я делаю с текстом? Если вы просто индексируете такие вещи, как ключевые слова, то это не имеет значения (столько же), если вы правильно распределите предложения. Речь идет о настройке программы для получения соответствующего результата для этой конкретной цели.

Моя рекомендация – использовать пробную версию и ошибку, чтобы максимально снизить уровень ошибок. Запустите программу на большом наборе текста и продолжайте добавлять исключения, пока не получите приемлемую частоту ошибок. Если, однако, вам нужно больше пары десятков правил или около того, вы, вероятно, просто захотите переосмыслить проблему.

Короче говоря, PHP и регулярные выражения не предназначены для этого, потому что английский фанк. Поэтому либо живите с добавлением исключений, чтобы получить небольшую (er) частоту ошибок, либо переосмыслить точку в целом.