Разбить текст на предложения — довольно распространенная задача. (Часто возникает схожая задача — выделить одно-два первых предложения.)
На спане есть несколько модулей, которые частично решают задачу. К сожалению, некоторые модули просят установить локаль (в наш век юникода), однако на поверку вполне уверенно работают и с русскими текстами безо всяких локалей.
Мне хочется, чтобы на входе был UTF-8, и не разрывались части предложения типа А. С. Пушкин, а еще лучше — зал им. А. Пушкина.
Модуль входит в состав комплекта HTML::Summary. Без установки локали в русских текстах лихо пропускает половину точек (да, я нагло тестировал юникод).
use Text::Sentence qw(split_sentences);
my @s = split_sentences($text); # возвращается список
use Lingua::EN::Sentence qw(get_sentences);
my $s = get_sentences($text); # возвращается ссылка на список
Несмотря на название, модуль уверенно выделяет русские предложения, и не разбивает инициалы. Не прошел тест на немецкую дату 30. Dezember (разбил на точке), но на это есть другой модуль. Зал им. А. С. Пушкина поделил на части после им.
use Lingua::DE::Sentence;
my $s = get_sentences($text); # ссылка на список
Работа и результаты похожи на английский аналог, но с немецким форматом дат все в порядке.
Свежачок: модуль, добавленный на спан позавчера.
use Text::ToSentences qw(convert);
my $s = convert($text);
Функция convert возвращает ссылку на список предложений.
Здесь все хорошо с юникодом, но из зала им. А. С. Пушкина получислоь четыре предложения.
У этого модуля есть особенность — он выделяет из предложений части, заключенные в скобки, и помещает их в итоговый список как самостоятельное предложения (удаляя из охватывающего).
P. S. Это была история о том, почему рождаются велосипеды :-)
С залом имени Пушкина ситуация сложная и неоднозначная, потому что «им» может быть и вполне самостоятельным словом:
Здесь в примере — два предложения.P. S. Не работает авторизация через ЖЖ :-(
Хорошее наблюдение.
А нет ли у вас списка того же самого, только на python? Я как то с перлом не очень
Нет :-)