Обработка естественного языка. 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. Или, вероятно, я иду в неправильном направлении, поэтому, пожалуйста, укажите, где я бегу неправильно. Теперь я немного растерялся. Спасибо!