Как стать автором
Обновить

Комментарии 18

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

Эту задачу решать не пробовал, но поиском нашел пару вариантов. Также можно глянуть ответы на stackoverflow.

А если предложение все же заканчивается на 'ул.' например: '… Пушкинская ул.' я так понимаю отработает не корректно и в конфиг не поможет?

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

А зачем для подобной задачи целый парсер, который даже не имеет встроенной библиотеки исключений?
Разбивка по ". " [точка-пробел] дала бы такой же результат. Остальное — в исключение.

Там есть исключения и правила, которые определяют — когда исключения работают, а когда нет. Несколько примеров как работают исключения я описал.

Вот ссылка. Сам пользуюсь решением от Солярикс и доволен.

Хочу просто упомянуть не совсем тривиальные элементы токенизации:

«у.е.»
«по моему»
«Васисуалий Пупкин»
«В.И. Ленин»

Это всё единичные токены. Без словаря вы такое не сделаете.

Попробовал разбить — все корректно:


$ echo "Уважаемый В.И. Ленин, сколько в у.е. это стоит? По моему 5 у.е., не больше - сказал Васисуалий Пупкин и ушел." | ./tomita-linux64 config.proto
[11:01:17 13:49:36] - Start.  (Processing files.)
Уважаемый В. И. Ленин , сколько в у.е . это стоит ? 
По моему 5 у.е . , не больше - сказал Васисуалий Пупкин и ушел . 
[11:01:17 13:49:36] - End.  (Processing files.)
НЛО прилетело и опубликовало эту надпись здесь
Речь идёт про парсинг реальных текстов, не все из которых написаны профессиональными лингвистами.
Там ещё и не такие ошибки встречаются, и такие тексты тоже нужно правильно парсить.
НЛО прилетело и опубликовало эту надпись здесь
Напомню: этот пост совершенно про другую задачу — разбиение текста на предложения.
> в спорных случаях парсер должен работать исключительно по правилам русского языка, иначе будет полный бардак.
Ваши слова означают, что вы не знаете, как решать задачу исправления ошибок для произвольных текстов, и умеете делать парсинг только для грамматичных текстов.
Задача исправления ошибок комплексная, обычно решается на разных уровнях, потому что ошибки бывают совершенно разные.
Конкретно, исправление для «по моему» чаще всего делается на уровне вероятностного морфологического парсера, который должен учитывать возможность отсутствия дефиса в словах. Также возможна корректировка принятого морфологическом парсером решения на уровне синтактико-семантического анализа.
Было упомянуто исправление ошибок. А как быть, если была пропущена именно «точка»? Или какой-нибудь другой знак препинания, завершающий предложение.

С этим сложнее. Я так понял что Томита-парсер опирается именно на знаки препинания и правила там организованы вокруг знаков препинания и токенов.


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

По идее «правильный» парсер должен дополнительно опираться на синтаксические конструкции и семантику (тут сложнее). А пока по ощущениям: предложение есть то, что начинается с заглавной буквы и заканчивается на ". или! или? или ...", а в gzt файл как раз добавляются места спотыканий (то же «ул.»).

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

Вряд ли

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации