Привет,
Увы, определение синтаксиса фразы без учета вероятности тех или иных
слов и их сочетаний недостаточно качественно работает.
Такие подходы сейчас уже считаются каменным веком.
Первый попавшийся пример из головы:
он шёл с трудом vs он шёл с другом vs он шёл со шпалой
Разборы принципиально разные, хотя и выглядят похоже.
Томита-парсер, будучи LR-парсером, позволяет обходить это с помощью
трудоёмкого задания классов слов:
с+<болезнь/абстр> vs с+<одуш> vs c+<предмет>
1) Если нужный класс не определён, хороших результатов не будет,
например: "он шёл с воплями", а мы забыли определить, что слово
"вопли" принадлежит к классу абстракций, а не предметов.
Для разных сочетаний слов состав классов разный (например, допустимо
говорить "смотрел с болью", "сидел с болью" или "смирился с
трусостью", но недопустимо говорить "дружил с болью", "смотрел с
ангиной" или "видел с трусостью"), поэтому подобных классов слов
необходимо определить более миллиона (по моим оценкам, порядка 10-20
миллионов). Вручную это сделать практически невозможно.
2) В том случае, когда возможные классы пересекаются, Томита всё равно
не сможет выбрать правильный вариант разбора.
Например, "он шёл с тяжестью" или "а он что?".
Или, например, слово "и" может быть союзом или частицей и
присоединяться практически к любому слову слева: "ну ты и друг" —
неснимаемая на уровне синтаксиса неоднозначность.
В более сложных предложениях таких разветвлений гораздо больше, и на
первое место выходит задача поиска наилучшего разбора, а он задаётся
вероятностью. Например, "он шёл с костью на суп" — о чём речь: кость
идёт на суп, его добавят в суп, или его пригласили есть суп?
Аналогично, "он шёл к кинотеатру с Машей" — шёл к кинотеатру и Маше
или они с Машей шли к кинотеатру?
Ещё есть такая неоднозначность: первая буква предложения заглавная,
независимо от того, начинается ли слово с заглавной буквы. Наиболее
популярные такие слова в pymorphy: Того, Из, Иза.
Например, "Того не нашли" — Того-государство vs того-местоимение.
Многие подобные слова в базу pymorphy просто не добавлены, но при их
добавлении количество неоднозначностей существенно увеличится.
3) на каждое служебное слово: "ровно", "зачем", "рядом", "и", "но",
"так как", "всё же", итп., нужно писать свои собственные правила
разбора. Аналогично для тире, запятых, кавычек и других знаков
препинания. Например: Кинотеатр "Аврора". То, чего не может быть. "он
шёл рядом с поездом"
Я поэтому прошёл этап всяких Томита-парсеров, потом вручную написанных
вероятностых парсеров, сделал большой перерыв, и сейчас готовлюсь
серьёзно заняться deep learning для автоматического построения
подобной вероятностной базы правил разбора. И тебе того советую.
Вообще, я всегда в поиске единомышленников. Присоединяйся!
> --
> Вы получили это сообщение, поскольку подписаны на группу "pymorphy".
> Чтобы отменить подписку на эту группу и больше не получать от нее сообщения,
> отправьте письмо на электронный адрес
pymorphy+u...@googlegroups.com.
> Чтобы настроить другие параметры, перейдите по ссылке
>
https://groups.google.com/d/optout.
--
Best regards, Yuri V. Baburov, Skype: yuri.baburov