Toggle navigation
?
users online
Logout
Open hangout
Open chat for current file
% Обработка лингвистической информации с помощью грамматических правил % Трасляция повествовательной фразы на ограниченном русском языке в логическое выражение на % языке логики предикатов % Напимер, % "ани восхищает каждый мужчина, который рисует". % Лог_выражение = для_всех(X,мужчина(X)&&рисует(X)=>восхищает(ани,X)) % Для понимания материала необходимо изучить гл.21 кн. И.Братко % "Алгоритмы искусственного интеллекта на языке PROLOG" % % ЗАДАНИЕ % 1.Придумаль сложносочиненное предложение. % 2.Разобрать его на токены. % 3.Транслировать в логическое выражение. % 4. Решить обратные задачи (задачи синтеза предложений по заданному шаблону) % 5. Построить дерево синтаксического разбора % 6. Усложнить транслятор с целью использования прилагательных и наречий. % 7. При необходимости расширить словарь. % 8. Объяснить принцип DGL-правил. % 9. Как DGL-правила можно совмещать с правилами Пролога. :- use_rendering(svgtree, [list(false)]). % Графическое представление терма в виде дерева (кроме списка) :- dynamic глагол/1. % динамически создаваемый предикат с помощью метапредиката assert/1 % Логические операторы, соответственно, конъюнкции, дизъюнкции и импликации :- op( 100, xfy, &&). :- op( 100, xfy, @@). :- op( 150, xfy, =>). % Лог_выражение - выражение, синтезируемое из входного списка слов текста в логику. условное_предл(Лог_выражение1 => Лог_выражение2 ) --> если(_), сложно_соч_предл(Лог_выражение1), то(_), сложно_соч_предл(Лог_выражение2). если('Если') --> ['Если']. если('если') --> ['если']. то('то') --> ['то']. сложно_соч_предл(Лог_выражение ) --> предложение(Лог_выражение). % либо сложно_соч_предл(Лог_выражение1 && Лог_выражение2) --> предложение(Лог_выражение1), союз_и(_), сложно_соч_предл(Лог_выражение2 ). % либо сложно_соч_предл(Лог_выражение1 @@ Лог_выражение2) --> предложение(Лог_выражение1), союз_или(_), сложно_соч_предл(Лог_выражение2 ). союз_и('и') --> ['и']. союз_и(',') --> [',']. союз_и('а') --> ['а']. союз_или('или') --> ['или']. союз_или('либо') --> ['либо']. союз_или(';') --> [';']. предложение(Субъект, Лог_выражение) --> группа_сущ(Субъект,Предикат, Лог_выражение), группа_глагола(Субъект,Предикат). группа_сущ(S, P, P) --> имя_собств(S). группа_сущ(S, P, P) --> местоимение(S). группа_сущ( S, P, Y) --> определитель( S, P2, P, Y), сущ( S, P1), подч_предл( S, P1, P2). группа_глагола( S, P) --> неперех_гл( S, P). группа_глагола( S, P) --> перех_гл( S, Y, P1),группа_сущ(Y, P1, P). группа_глагола( S, P) --> перех_гл( S, Y, P), инфинитив( Y),!. группа_глагола( _, восклицание) --> ['!']. группа_глагола( _, вопрос) --> ['?'];['не правда ли?']. %определитель( S, P1, P, для_всех( S, P1 => P)) --> [этот];[тот]. определитель( S, P1, P, для_всех( S, P1 => P)) --> [каждый];[всякий];[для_всех]. определитель( S, P1, P, существует( S, P1 && P)) --> [существует];[некоторый];[какой_то]. определитель( _, P1, P, P1 && P) --> []. сущ(X, F) --> класс(Y),{F=..[Y,X]}. % F = Y(X) сущ(X, P&&F) --> прилаг(X,P), класс(Y),{F=..[Y,X]}. % F = Y(X) подч_предл( X, P1, P1 && P2) --> [который], группа_глагола( X, P2). подч_предл( _, P1, P1) --> []. прилаг(X,F) --> прилагательное(Y), {F=..[Y,X]}. прилаг(X,F&&Fs) --> прилагательное(Y), {F=..[Y,X]}, % F = Y(X) прилаг(X,Fs). прилаг(X,F&&Fs) --> прилагательное(Y), {F=..[Y,X]}, % F = Y(X) ([и];[',']), прилаг(X,Fs). инфинитив(X) --> глагол(X). перех_гл( X, Y, F) --> перех_глагол(Z), {F=..[Z,X,Y]}. % F = Z(X,Y) неперех_гл(X, F) --> неперех_глагол(Y), {F=..[Y,X]}. % F = Y(X) перех_глагол(нравится) --> [нравится]. перех_глагол(любит) --> [любит]. перех_глагол(восхищает) --> [восхищает]. перех_глагол(восхищается) --> [восхищается]. перех_глагол(рисует) --> [рисует]. перех_глагол(пошел) --> [пошел]. неперех_глагол(рисует) --> [рисует]. неперех_глагол(стоит) --> [стоит]. неперех_глагол(лежит) --> [лежит]. неперех_глагол(сидит) --> [сидит]. класс(мужчина) --> [мужчина]. класс(женщина) --> [женщина]. класс(дом) --> [дом]. глагол(рисовать) --> [рисовать]. глагол(курить) --> [курить]. глагол(гулять) --> [гулять]. имя_собств(иван) --> [иван]. имя_собств(ани) --> [ани]. имя_собств(монэ) --> [монэ]. имя_собств(павел) --> [павел]. местоимение(я) --> [я]. местоимение(мы) --> [мы]. местоимение(он) --> [он]. местоимение(она) --> [она]. местоимение(оно) --> [оно]. местоимение(они) --> [они]. прилагательное(интересный)--> [интересный]. прилагательное(красивый)--> [красивый]. прилагательное(элегантный)--> [элегантный]. % Для преобразования строки в список токенов можно использовать следующий предикат % tokenize_atom('мой дядя самых честных правил, когда не в шутку занемог', TokenList ) /** <examples> ?- предложение(X, Лог_выражение, [иван,рисует],[]). ?- предложение(X, Лог_выражение, [некоторый,мужчина,рисует],[]). ?- предложение(X, Лог_выражение, [каждый, мужчина, рисует],[]). ?- предложение(X, Лог_выражение, [каждый,мужчина,который,рисует,восхищается,монэ],[]). ?- предложение(X, Лог_выражение, [ани,восхищает,каждый,мужчина,который,рисует],[]). ?- предложение(X, Лог_выражение, [ани,восхищает,каждый,Кто_то,который,Делает_что_то],[]). */