Козиев Илья (kelijah) wrote,
Козиев Илья
kelijah

Category:

Bottomup парсер на чистом питоне

Раз в два-три года я пробую делать какой-то новый парсер для русского языка. Последний раз это была неудачная попытка прикрутить reinforcement learning для shift-reduce парсера, обучаемого на корпусе эталонных разборов.

В этот раз за полтора месяца сделан прототип восходящего вероятностного парсера на чистом питоне.

Морфология - внешняя сменяемая, сейчас это pymorphy2. К ней у меня масса претензий, так что видимо буду менять на свою оптимизированную ruword2tags. Чтобы было веселее, токенизация тоже вероятностная, поэтому парсер может попутно убирать лишние разрывы слов или слившиеся слова, работая еще и как spellchecker. Впрочем, для эффективной обработки длинных предложений в чатботе надо будет перед парсером делать частеречную разметку и снимать все морфологические неоднозначности.

Правила разбора задаются в текстовом файле, например так:

# ЗЛАЯ СОБАКА ЛАЕТ
# ^^^^^^^^^^^
NP('прил + сущ') ~1.2 ->
  a=AP[case] # так как сущ. может быть в локативе или партитиве, то наружу вытолкнем падеж прилагательного
 + n=NP[number, gender, 3per, gen_slot]
 agr: adj_n(a, n)
; 


По задумке веса правил будут автоматически подбираться по эталонному tree bank'у с помощью какой-то реализации expectation-maximization алгоритма.

Результаты выглядят так (спасибо питоновской обертке для Graphviz за чудеса автоматической отрисовки графов).
Иерархия составляющих:

Дерево зависимостей:



Tags: bottomup parser, dependency parser, glr, восходящий разбор, парсер, синтаксис, синтаксический анализатор, синтаксический разбор
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

  • 2 comments