Главная Новые темы Список тем Задать вопрос Поиск  

Форум "Искусственный интеллект" (архив)


Искусственный интеллект и все что с ним связано


 #0 deep © 16.04.03 19:00:30 - 19.09.05 12:17:38

REFAL и  "компьютерный морфологический разбор слов русского языка"



порыскав по сети с целью накопать материала по "компьютерному морфологическому разбору слов русского языка" - все мои более-менее стоящие находки указывали на использование языков программирования ПРОЛОГ и РЕФАЛ.

Наглядно это демонстрирует вот эта статья:
---------------------------------------­-

Применение данной статьи важно для тех, кто хочет сделать интерфейс к своей программе на естественном языке или сделать интеллектуальный поиск информации. Для этого нужно в первую очередь сделать морфологический анализ слов текста. Тогда не нужно будет иметь обширный словарь слов в разных словоформах. Достаточно запомнить основное слово в словаре, а входной поток слов подвергать морфологическому анализу, с тем, чтобы все слова преобразовать к начальным словоформам. Пример. пользователь ввел в базу знаний свою информацию "фирма РиК. наша фирма продает тару картонную". Модуль морфологического разбора преобразует эту информацию к следующему виду: "фирма. РиК. мой фирма продать тара картонный". С точки зрения смысла получилась бессмыслица. Но для компьютера - самый раз, это будет видно дальше. Теперь, другой пользователь вводит для поисковой системы запрос "продаём тару картонную". Этот запрос будет так же преобразован в "продать тара картонный". И теперь исполнив простой поиск по совпадению, система поиска выдаст ранее запомненную информацию: "фирма Рик. продать...". Однако здесь было бы лучше запомнить первоначальную информацию клиента с правильными словоформами и выдать только её.

Морфология слов русского языка определяется по аффиксу - окончанию и суффиксу слова. Назовем это правило правилом морфологического разбора. Однако есть слова, которые имеют окончание, подходящее для некоторой формы слова, но являются совершенно другой формой. Например, "-ать" говорит что слово есть глагол (прыгать, бежать). Но есть слово "кровать", которое есть существительное. Значит, из правила морфологического разбора есть исключения. Так же есть слова, которые не изменяют свою форму. Например, предлоги, "не", наречия, "столь" и т.д. Значит, есть дополнения к правилу морфологического разбора. Эти дополнения можно представить как исключения из правила. Таким образом, мы пришли к определенному логическому описанию морфологического разбора слов. Программ для компьютера должна выполнять всего два правила: а)поиск слова как "неправильного", иначе, б) поиск аффикса слова в базе аффиксов. Здесь я привожу два примера реализации морфологического разбора на логических языках. Для создания компьютерной программы лучше всего подойдут логические языки ПРОЛОГ и РЕФАЛ.

Пример программы морфологического разбора слов на логическом языке программирования ПРОЛОГ.

/* программа по распознаванию морфологии слов русского языка */
/* по окончанию слова */
/* язык программирования ПРОЛОГ */

domains
Слово = string

predicates
морфология(Слово,Слово Основа)
nondeterm исключение(Слово,Слово Основа)
nondeterm правило(Слово Аффикс, Слово АффиксОсновы)
nondeterm аффикс(Слово Корень, Слово, Слово Аффикс)

clauses
/* отрывок и базы знаний по исключениям */
/* исключения из правила разбора слова для "неправильных" слов */
исключение("рек","река&q­uot;). исключение("сел","сесть&­quot;).
исключение("кровать","кр­овать").
/* отрывок из базы правил разбора для правильных слов */
/* для глаголов */
правило("нули","ать"­;). правило("нул","ать"­).
правило("еть","ать"­). правило("ает","ать"­).
правило("ал","ать")­. правило("ул","ать")­.
правило("ули","ать"­).
/* для прилагательных */
правило("вая","вый"­). правило("вые","вый"­).
правило("ая","ой"). правило("ие","ой").
правило("ую","ой").­

/* предикат осуществляющий перебор всех вариантов */
/* аффиксов для этого слова */
аффикс("",Аффикс,Аффикс).
аффикс(Корень,Слово,Аффикс):-
    frontchar(Слово,Буква,Слово1),
    аффикс(Корень1,Слово1,Аффикс),
    frontchar(Корень,Буква,Корень1).
/* сначала просмотри все исключения */
морфология(Слово,Осн):-
    исключение(Слово,Осн),!.
/* если не удачно, то переберем все аффиксы слова */
морфология(Слово,Осн):-
    аффикс(Корень,Слово,Аффикс),
    правило(Аффикс,АффиксиОсн),
    concat(Корень,АффиксиОсн,Осн),!.
/* если неудачно, то значит слово несклоняемо */
морфология(Слово,Слово):-!.
/* вызов предиката морфологического разбора */
Goal морфология("зеленую",Слово).<­/code>

Ответ ПРОЛОГА: Слово = "зеленый"



Цитата

 #1 deep © 16.04.03 19:14:28

Как видно, в программе всего 13 строчек, а остальные строки это база знаний. Теперь посмотрим как справится с этой задачей РЕФАЛ.

Пример на логическом языке программирования РЕФАЛ - 5:

/* программа по распознаванию морфологии слов руссского языка */
/* по окончанию и приставке слова */
/* язык программирования РЕФАЛ 5 */
/* автор Ермолаев Д.С. www.icreator.ru */
/* ввод одного слова с консоли */
$ENTRY Go { =    <Prout <Question (<Card>) >>; };
/* таблица1. слова, которые имеют неправильное окончание */
WordsMissTable { =
    ( (''сел'') ''сесть'' )
    ( (''рек'') ''река'' )
    ( (''кровать'') ''кровать'' )
    ( (''скоро'') ''скоро'' )
} ;
/* таблица2. окончания, по которым можно определить основу */
CompletionTable { =
        /* для глаголов */
    ( (''нули'') ''ать'')
    ( (''нул'') ''ать'')
    ( (''ает'') ''ать'')
    ( (''еть'') ''ать'')
    ( (''еч'') ''ать'')
    ( (''ал'') ''ать'')
    ( (''ел'') ''ать'')
        /* для прилагательных */
    ( (''вые'') ''вый'')
    ( (''вая'') ''вый'')
    ( (''ая'') ''ой'')
    ( (''ие'') ''ой'')
    ( (''ую'') ''ой'')
};
/* сама программа распознавания морфологической формы слова */
Question {
/* берем слово и ищем подходящее по шаблону в таблице1 */
    (e.Word), <WordsMissTable>: e.L((e.Word)e.Qst)e.R = e.Qst;
/* иначе, берём окончание слова и ищем по шаблону в таблице2 */
    (e.1 e.End), <CompletionTable>: e.L((e.End)e.Qst)e.R = e.1 e.Qst ;
/* иначе, слово неизменяемо */
    (e.1) = e.1;
};


Программа на РЕФАЛЕ состоит из трех предложений! Отсюда наглядно видно, что если Вам не нужна максимальная скорость обработки и минимальный размер кода программы, а нужна скорость написания программы и простота ее отладки, то лучший вариант для задач обработки текста будет язык РЕФАЛ. Интересно, сколько бы предложений программы пришлось бы написать для решения такой задачи на алгоритмическом языке? Например на С++?

Теперь немного о самих базах знаний. Описывать все слова-исключения не представляется возможным - это будет уже не статья, а настоящая база данных в несколько сот или тысяч записей. База знаний же по аффиксам так же здесь не описывается полностью по той причине, что любой русский человек без труда сможет ее составить сам.



Итак, Refal = REcursive Functions Algorithmic Language.



писали ли вы что нибудь на этом языке? Хотелось бы услышать ваши отзывы и рекомендации.


 #2  ZeroDivide © 29.07.03 13:50:25

А как это будет выглядеть на Delphi?
Вообще тема достаточно занятная и статья хорошая.
Я много для себя подчерпнул.
 #3 deep © 29.07.03 15:56:35

> ZeroDivide © 29.07.2003 14:50:00
> А как это будет выглядеть на Delphi?

ну... на Делфи? На Делфи, точно столько же кода будет. ЕСЛИ РЕАЛИЗОВАТЬ ВСЕ ВОЗМОЖНОСТИ ПРОЛОГА/РЕФАЛА В ВИДЕ МОДУЛЕЙ/БИБЛИОТЕК.

мда... жалко, что Рефал на сях писан, а на паскаль переводить его влом.

P.S.   ИМХО,  Рефал - это заточеный лингвистический SQL. Просто там не только запросы, а еще имного чего есть....
 #4  Immitator © 29.07.03 17:07:11

а вот бы в действии увидеть
 #5 заипали 10.05.05 17:15:01

НА ФФСЮ Сеть ОДИН И ТОДЖЕ матерьял!!!!!!!!!! Далоой плагиатов!!!!!!!!!!!!!!!!!!
 #6 Knight © 10.05.05 17:44:56

Ерунда это всё... ИИ должен сам думать, как ему разбирать, а если не могёт, то какой он после этого ИИ...  
 #7 Mystic © 10.05.05 18:12:04

Ну... можно привести примеры, когда один человек не понимает друго человека, хотя вроде на одном языке говорят Из-за отсутсвия интеллекта?
 #8 Mystic © 10.05.05 18:46:17

Вот, например "на полке в бане", "полке" от словоформа от какого слова???
 #9 Knight © 10.05.05 18:55:19

>#7 Mystic © 10.05.05 17:12:04  
> Из-за отсутсвия интеллекта?

Ага... два умных человека всегда поймут друг-друга  
 #10 deep © 10.05.05 18:57:37

>#6 Knight ©
> Ерунда это всё... ИИ должен сам думать, как ему разбирать

ага, и как ему узнать что береза это дерево, что на руке 5 пальцев, что Вася может быть и человеком и котом и т.п.    Что разобрать предложение, нужно знать где существительное, где глагол, где числительное и т.п. Определить взаимосвязи между сущностями в разрезе их характеоистик, возможностей и т.п. Всему этому ИИ нужно научить!
Создать мощный ассоциативный движок! И только после это ИИ может попытаться что-то "думать" и "говорить".
 #11 Knight © 10.05.05 19:01:19

>#10 deep © 10.05.05 17:57:37  
> Что разобрать предложение, нужно знать где существительное,
> где глагол, где числительное и т.п.

Спроси это у какого-нибудь деда в глухой деревне... он те и существительное укажет и глаголом пошлёт...      
 #12 Knight © 10.05.05 19:05:08

Разбирать и понимать, это две разные вещи... вот когда чат-бот начнёт понимать чё бОтает, сам строя асоциативный ряд, и проводя аналогии... вот тут и рОдиться ИИ
 #13 deep © 10.05.05 19:19:27

>#11 Knight ©
> Спроси это у какого-нибудь деда в глухой деревне...

спроси у трехлетнего ребенка. Он говорить умеет, но слов всех не знает, а тем более об всех их взаимосвязях.    

>#12 Knight ©
тот же ребенок, чтоб разбирать правильно несколько лет в школе штаны протирает. Да и что хорошо научится  -- не факт.
   
 #14 Knight © 10.05.05 19:24:37

>  #10 deep © 10.05.05 17:57:37
> и т.п. Всему этому ИИ нужно научить!

Правильно выделено... именно научить, а не дать уже готовый механизм... конечно, объяснить что такое 2+2 и чему оно равно, сложнее, чем дать готовый набор математических функций
 #15 Knight © 10.05.05 19:29:24

>  #13 deep © 10.05.05 18:19:27
Лучше бы они думать учили, а не разбирать...
 #16 Mystic © 11.05.05 09:52:51

Вообще, задача понимания естественных языков состоит из двух этапов. Первый, чисто технический, это построить дерево предложения (слово в основной словоформе + связь). Задача чисто техническая, для английского языка я видел даже готовые решения, да и для русского не так уж все сложно... ИИ тут и не пахнет Вторая задача по полученому дереву определить смысл Вот тут и начинаются сложности...
 #17 Knight © 11.05.05 09:59:31

>#16 Mystic © 11.05.05 08:52:51
Пока первый этап - это результат мысли программера... второй этап невыполним
 #18 deep © 11.05.05 16:56:57

>#17 Knight ©
>второй этап невыполним

ага, как же. Не забывай добавлять "для меня"  или хотя бы "на данном этапе"  
 #19 Mystic © 11.05.05 17:27:17

Не забывай добавлять "для меня"  или хотя бы "на данном этапе"

Задача может быть алгоритмически неразрешима
 #20 deep © 11.05.05 18:29:41

>#19 Mystic ©
ты хочешь скзать, что мозг человека нельзя алгоритмизировать?   Почему?
 #21 deep © 12.05.05 08:41:28

ИМХО, просто человек еще мало копал в сторону ассоциативного мышления.  
 #22  Witch © 12.05.05 23:10:23

Совершенно согласна. Но будет копать дальше. И я думаю, до чего-то докопается :
#16 Mystic ©  11.05.05 09:52:51

Вообще, задача понимания естественных языков состоит из двух этапов. Первый, чисто технический, это построить дерево предложения (слово в основной словоформе + связь).
Для того, чтобы построить дерево, надо еще и предварительный морфанализ провести. Если ты не о простой последовательности слов говоришь, конечно, а о реальной синтагматике. :)

 Задача чисто техническая, для английского языка я видел даже готовые решения, да и для русского не так уж все сложно...
Было бы совсем несложно, если б в русском не было практически произвольного поря
дка слов.

 ИИ тут и не пахнет
Вот с этим согласна :)

Вторая задача по полученому дереву определить смысл Вот тут и начинаются сложности...
Ага, это еще никому не удавалось толком решить. Но я думаю, это дело времени.

Только для этого машине тоже необязательно думать. А вот научат ли компьютеры когда-нибудь именно мышлению, кто знает.... Свое собственное, имхо, еще не до конца изучили :)
 #23 Mystic © 19.09.05 12:17:38

Недавно:

Наша секретарша пишет кексу письмо на английском. надо написать:

гостиница Савой закрыта на ремонт

она запускает в переводчик, он выдает:

The hotel is closed by Sava on repair



Было бы совсем несложно, если б в русском не было практически произвольного поря
дка слов.


Нивелируется падежами.




  • Тема находится в архиве

    Написать ответ

    Имя: Регистрация HTML?
    smiles смайлики
    Потом перейти в:    
    паутина



      ©  webest.net, 2002-2007  

    top.mail.ru
    » Бесплатный счетчик посещений
    » Рейтинг сайтов