Мне нужно регулярное выражение, которое будет извлекать предложения из текстового файла. пример текста:
Рассмотрим, например, азиатскую катастрофу цунами, которая произошла в конце 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.
как его решить? Спасибо 🙂
Вы не можете сделать это с помощью регулярных выражений
Английский как язык не вписывается в правильные правила форматирования. Таким образом, регулярные выражения не подходят для достижения цели, которую вы ищете. То, что вы действительно ищете, – это что-то вроде процессора естественного языка.
Если это не критично для вашей программы, я предлагаю вам вместо этого определить следующие вещи:
Моя рекомендация – использовать пробную версию и ошибку, чтобы максимально снизить уровень ошибок. Запустите программу на большом наборе текста и продолжайте добавлять исключения, пока не получите приемлемую частоту ошибок. Если, однако, вам нужно больше пары десятков правил или около того, вы, вероятно, просто захотите переосмыслить проблему.
Короче говоря, PHP и регулярные выражения не предназначены для этого, потому что английский фанк. Поэтому либо живите с добавлением исключений, чтобы получить небольшую (er) частоту ошибок, либо переосмыслить точку в целом.