Comments 2
Скажите, а чем Ваш подход лучше, чем известный томита-парсер?
0
Нельзя сказать, что этот подход прямо-таки сильно лучше, чем томита-парсер. Я думаю, что для своих целей томита-парсер вполне подходит. Однако есть несколько отличий, которые могут сделать предлагаемый подход предпочтительнее в некоторых прикладных задачах:
- Порождающая и разбирающая грамматики описываются общими средствами. В частности, для числительных обе грамматики записываются в единственном экземпляре. Это упрощает разработку и поддержку, т.к. надо писать вдвое меньше грамматических правил. Например, для модульного тестировани можно проводить преобразование вначале в одну сторону, а затем в другую и сравнивать результаты.
- Встроенность в язык программирования: (1) использование родных структур данных языка, (2) проверка типов на этапе компиляции, (3) доступность средств языка для любых целей, например, (а) можно написать свой конвертер в любой точке, (б) можно алгоритмически порождать грамматические выражения, (в) можно использовать средства модуляризации, встроенные в язык — trait'ы, (г) можно использовать удобный DSL для представления словарей.
- Из исходной грамматики можно получить грамматику для произвольного парсера, обладающего требуемыми свойствами. (По-видимому, можно сгенерировать грамматику и для томита-парсера.)
- Концепция уровня абстракции, лежащая в основе грамматических выражений. Преобразование между уровнями абстракции производится алгоритмически, что позволяет при разборе получать полное значение всей фразы в виде программных объектов, готовых к дальнейшей обработке, а при синтезе начинать генерацию непосредственно от семантических объектов, используемых в программе.
- Разделение правил формальной грамматики и правил выбора формы слова. Правила двух видов имеют несколько различную природу, поэтому и представлять в программе их удобно разными способами.
+1
Only those users with full accounts are able to leave comments. Log in, please.
Строго типизированные комбинаторы для построения парсера и синтезатора естественного языка