Комп'ютерний
морфологічний розбір слів російської мови h2>
Застосування
даної статті важливо для тих, хто хоче зробити інтерфейс до своєї програми на
природною мовою або зробити інтелектуальний пошук інформації. Для цього
потрібно в першу чергу зробити морфологічний аналіз слів тексту. Тоді не
потрібно буде мати великий словник слів у різних словоформах. Досить
запам'ятати основне слово в словнику, а вхідний потік слів піддавати
морфологічному аналізу, з тим щоб усі слова перетворити до початковим
словоформа. 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),:
e.L ((e.End) e.Qst) e.R = e.1 e.Qst; p>
/* інакше, слово
незмінне */ p>
(e.1) = e.1; p>
); p>
Програма на
РЕФАЛЕ складається з трьох пропозицій! P>
Цікаво,
скільки б пропозицій програми довелося б написати для вирішення такого завдання
на алгоритмічній мові? Наприклад З ++? p>
Список
літератури h2>
Д. С. Єрмолаєв.
Комп'ютерний морфологічний розбір слів російської мови p>