Обработка естественного языка. POS-теги и синтаксический анализ

В настоящее время я усердно работаю над созданием собственной библиотеки для обработки английского языка. Настоящая задача состоит в том, чтобы пройти через все изобилие теоретического материала и получить представление о том, как поставить все это на рельсы производства.

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

Для большей ясности просмотрите следующий пример моего CFGrammar:

Production[] ppTerminals = { new Production(new Word[] { new Terminal("Preposition"), new NonTerminal("NP") })};
AddProduction(ppTerminal, "PP"); // Add production
...
DictionaryBuilder(Prepositions.SingleWord, "Preposition"); //Where
Prepositions.SingleWord is a hard-coded list of possible prepositions.

В результате, если парсер Earley обнаружит, скажем, неизвестный PP с двумя словами, например, "до", он не сможет его распознать и построить диаграмму.

Поэтому я думаю, что до синтаксического синтаксического анализатора мне нужно что-то еще, что будет обрабатывать мои предложения и затем пересылать соответствующие данные в синтаксический анализатор. Основная идея заключается в том, что словарь создавался динамически на этапе POS-тегов, тогда парсер Earley может распознать слово.

Я реализовал токенизатор и лексер. В качестве вывода я получил дерево S-Expression, например:

(sentence
  (word BOND)
  (word TRADING)
  (word REVENUES)
  (word AT)
  (word GOLDMAN)
  (word SACHS)
  (word SLID)
  (value 40%)
  ...
  (word AND)
  (word CURRENCIES)
  (word WAS)
  (currency $1.16BN)
  ...
 )

Но я знаком с моделью Скрытого Маркова и такими алгоритмами, как алгоритм Витерби для нахождения наиболее вероятной последовательности состояний и алгоритм Баума-Уэлча для оценки параметров.

Не могли бы вы дать мне просто совет, как связать парсер Earley и POS-теги на основе HMM. Или, вероятно, я иду в неправильном направлении, поэтому, пожалуйста, укажите, где я бегу неправильно. Теперь я немного растерялся. Спасибо!

0 ответов

Другие вопросы по тегам