24. Нормализация слов путем морфологического анализа
Флективные классы слов - наборы окончаний в различных падежах. Например слова: ГРУППА, ВОДА, ... имеют одни и те же окончания в различных падежных формах: ГРУПП/Ы, ВОД/Ы, ... В русском языке около 40 флективных классов существительных. Знание корня слова и его флективного класса достаточно для его анализа – распознавания или восстановления.
Лингвистические знания (в БЗ) - это знания о корнях слов и их флективных классах:
{= ROOT(<нормализ.слово>,<корень>,<флект.класс>,<род>) =}род>флект.класс>корень>нормализ.слово>
ROOT(ГР,ГРУПП,FL_1)
ROOT(ВОДА,ВОД,FL_1)
...
{= FL(<флект.класс>,<окончание>,<падеж>,<число>) =}число>падеж>окончание>флект.класс>
FL(FL_1,А,КТО,ЕД_Ч)
FL(FL_1,Ы,КОГО,ЕД_Ч)
FL(FL_1,Е,КОМУ,ЕД_Ч)
...
Пусть в БЗ введены вспомогательные фрагменты NUM(1) NUM(2) ... NUM(20), представляющие позиции в словах. Тогда продукция, осуществляющая разбор слов, будет иметь вид:
NORM():IF @@(X1/X12) NUM(X45) {= X1 - слово ,X45 - позиция 1, 2, ...=}
B:DISCON2(X1,X45,X2,X3) {= разбивает слово X1 на части - X2 и оконч. X3 =}
ROOT(X10,X2,X20,_) {= если X2 корень, то выделяет его флект.класс X20 =}
FL(X20,X3,_,_) {= проверяет, что оконч. X3 входит в флект.класс X20 =}
THEN
B:SET(X12,1,X10); {= подставляет в @@(...) нормализованное слово X10 =}
Не трудно сделать так, чтоб эта продукция выдавала род, число, падеж введенного слова.
Обратный лингвистический процессор: выдает словоформы слова в указанных падежах.
Пример. Выдать словоформу "Студент группы..."
Это делается продукцией SAY(...):
... THEN T1:SAY(СТУД,КТО) T1:SAY(ГР,КОГО) ...;
SAY(X10,X4):IF
ROOT(X10,X2,X20,_) {= X2 - корень, X20 – фл.класс =}
FL(X20,X3,X4,_) {= X3 – окончание, X4 - падеж =}
B:CONCAT(X2,X3,X30) THEN
B:A(" ",X30); {= X30 – cловоформа =}
Домашнее задание 6.
В выбранной области приложения усовершенствовать программу в направлении ответа на запросы в более свободной форме.
Предыдущий раздел|Следующий раздел