Комп'ютерний морфологічний розбір слів російської
мови. h2>
Єрмолаєв Д.С., Москва p>
Застосування
даної статті важливо для тих, хто хоче зробити інтерфейс до своєї програми на
природною мовою або зробити інтелектуальний пошук інформації. Для цього
потрібно в першу чергу зробити морфологічний аналіз слів тексту. Тоді не
потрібно буде мати великий словник слів у різних словоформах. Досить
запам'ятати основне слово в словнику, а вхідний потік слів піддавати
морфологічному аналізу, з тим, щоб всі слова перетворити до початковим
словоформа. p>
Приклад.
користувач ввів у базу знань свою інформацію "фірма РВК. наша фірма
продає тару картонну ". Модуль морфологічного розбору перетворює цю
інформацію до наступного увазі: "фірма. Рик. мій фірма продати тара
картонний ". З точки зору сенсу вийшла нісенітниця. Але для
комп'ютера - самий раз, це буде видно далі. Тепер, інший користувач
вводить для пошукової системи запит "продає тару картонну". Цей
запит буде так само перетворений в "продати тара картонний". І тепер
виконавши простий пошук за збігом, система пошуку видасть раніше запомненную
інформацію: "фірма Рік. продати ...". Однак тут було б краще
запам'ятати первинну інформацію клієнта з правильними словоформа і видати
тільки її. p>
Морфологія
слів російської мови визначається за афікси - закінчення та суфікс слова.
Назвемо це правило правилом морфологічного розбору. Однак є слова,
які мають закінчення, що підходить для певної форми слова, але є
зовсім іншою формою. Наприклад, "-ать" говорить що слово є
дієслово (стрибати, бігти). Але є слово "ліжко", яке є
іменник. Значить, з правила морфологічного розбору є винятки.
Так само є слова, які не змінюють свою форму. Наприклад, прийменники,
"не", прислівники, "так" і т.д. Значить, є доповнення до
правилом морфологічного розбору. Ці доповнення можна представити як
виключення з правила. Таким чином ми прийшли до певного логічного
опису морфологічного розбору слів. Для створення комп'ютерної програми
тут найкраще підійде логічна мова програмування. Розглянь два з
них. p>
Приклад
програми морфологічного розбору слів на логічному мовою програмування
ПРОЛОГ. p>
------------------------------------ p>
/*
програма з розпізнавання морфології слів російської мови */ p>
/*
по закінченню слова */ p>
/*
мова програмування ПРОЛОГ */ p>
domains p>
Слово
= String p>
predicates p>
морфологія (Слово, Слово
Основа) p>
nondeterm
виняток (Слово, Слово Основа) p>
nondeterm
правило (Слово Афікс, Слово АффіксОснови) p>
nondeterm
афікс (Слово Корінь, Слово, Слово Афікс) p>
clauses p>
/*
база знань */ p>
/*
виключення з правила розбору слова для "неправильних" слов */ p>
виключення ( "річок", "ріка "). p>
виключення ( "сіл", "сісти "). p>
/*
правила розбору для правильних слів */ p>
/*
для дієслів */ p>
правило ( "нулі", "ать "). p>
правило ( "глянув", "ать "). p>
правило ( "еть", "ать "). p>
правило ( "ает", "ать "). p>
правило ( "ал", "ать "). p>
правило ( "вул", "ать "). p>
правило ( "ули", "ать "). p>
/*
для прикметників */ p>
правило ( "ша", "вий "). p>
правило ( "ші", "вий "). p>
правило ( "а", "Ой "). p>
правило ( "ие", "Ой "). p>
правило ( "ту", "Ой "). p>
/*
предикат здійснює перебір всіх варіантів */ p>
/*
афіксів для цього слова */ p>
афікс ( "", Афікс, Афікс). p>
афікс (Корінь, Слово, Афікс ):- p>
frontchar (Слово, Буква, Слово1), p>
афікс (Корень1, Слово1, Афікс), p>
frontchar (Корінь, Буква, Корень1). p>
/*
спочатку переглянь всі виключення */ p>
морфологія (Слово, Осн ):- p>
виключення (Слово, Осн ),!. p>
/*
якщо не вдало, то переберемося все афікси слова */ p>
морфологія (Слово, Осн ):- p>
афікс (Корінь, Слово, Афікс), p>
правило (Афікс, АффіксіОсн), p>
concat (Корінь, АффіксіОсн, Осн ),!. p>
/*
якщо невдало, то значить слово несклоняемо */ p>
морфологія (Слово, Слово ):-!. p>
/*
виклик процедури морфологічного розбору */ p>
Goal
морфологія ( "зелену", Слово). p>
Відповідь
Пролог: Слово = "зелений" p>
Як
видно, у програмі всього 13 рядків, а інше база знань. Тепер подивимося
як впорається з цим завданням РЕФА. p>
Приклад
на логічному мовою програмування РЕФА - 5: p>
----------------------- p>
/*
програма з розпізнавання морфології слів руссского мови */ p>
/*
по закінченню і приставці слова */ p>
/*
мова програмування РЕФА 5 */ p>
/*
від Єрмолаєв Д.С. [email protected] */ p>
/*
введення одного слова з консолі */ p>
$ ENTRY Go (= )>>;); p>
/*
таблиця1. слова, які мають неправильне закінчення */ p>
WordsMissTable
(= P>
(
( 'сіл') 'сісти') p>
(
( 'річок') 'чого') p>
)
; p>
/*
таблиця2. закінчення, за якими можна визначити основу */ p>
CompletionTable
(= P>
/*
для дієслів */ p>
(
( 'нулі') 'ать') p>
(
( 'глянув') 'ать') p>
(
( 'ает') 'ать') p>
(
( 'еть') 'ать') p>
(
( 'ЕЧ') 'ать') p>
(
( 'ал') 'ать') p>
(
( 'їв') 'ать') p>
/*
для прикметників */ p>
(
( 'ші') 'вий') p>
(
( 'ша') 'вий') p>
(
( 'а') 'ї') p>
(
( 'ие') 'ї') p>
(
( 'ую') 'ї') p>
); p>
/*
сама програма розпізнавання морфологічної форми слова */ p>
Question
( P>
/*
беремо слово і шукаємо відповідне за шаблоном у таблице1 */ p>
(e.Word), :
e.L ((e.Word) e.Qst) e.R = e.Qst; p>
/*
інакше, бере закінчення слова і шукаємо по шаблону в табліце2 */ p>
(e.1 e.End),
: eL ((e.End) e.Qst) eR = e.1 e.Qst; p>
/*
інакше, слово незмінне */ p>
(e.1)
= E.1; p>
); p>
Програма
на РЕФАЛЕ складається з трьох пропозицій! p>
Цікаво,
скільки б пропозицій програми довелося б написати для вирішення такого завдання
на алгоритмічній мові? Наприклад С + +? p>
Список літератури h2>
Для
підготовки даної роботи були використані матеріали з сайту http://www.citforum.ru/
p>