Эффективный контекстно-свободный синтаксический анализатор грамматики, предпочтительно совместимый с Python

Мне нужно разобрать небольшой набор английского языка для одного из моих проектов, описывается как контекстно-свободная грамматика с (одноуровневыми) структурами функций ( пример ), и мне нужно делать это эффективно.

Сейчас я использую NLTK синтаксический анализатор, который производит правильный вывод, но работает очень медленно. Для моей грамматики из ~ 450 довольно неоднозначных правил, не связанных с лексикой, и полумиллиона лексических статей анализ простых предложений может занять от 2 до 30 секунд, в зависимости от количества полученных деревьев. Лексические записи практически не влияют на производительность.

Другая проблема заключается в том, что загрузка (25 МБ) грамматики + лексики в начале может занять до минуты.

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

Итак, теперь я ищу парсер CFG для замены NLTK. Я рассматривал PLY , но не могу сказать, поддерживает ли он структуры функций в CFG, которые требуются в моем случае, а примеры, которые я видел, похоже, скорее выполняют процедурный синтаксический анализ. чем просто указать грамматику. Может ли кто-нибудь показать мне пример PLY как поддерживающих структур функций, так и использования декларативной грамматики?

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

18
задан Max Shawabkeh 28 December 2010 в 01:06
поделиться