Ћекции.ќрг


ѕоиск:




 атегории:

јстрономи€
Ѕиологи€
√еографи€
ƒругие €зыки
»нтернет
»нформатика
»стори€
 ультура
Ћитература
Ћогика
ћатематика
ћедицина
ћеханика
ќхрана труда
ѕедагогика
ѕолитика
ѕраво
ѕсихологи€
–елиги€
–иторика
—оциологи€
—порт
—троительство
“ехнологи€
“ранспорт
‘изика
‘илософи€
‘инансы
’ими€
Ёкологи€
Ёкономика
Ёлектроника

 

 

 

 


‘ормирование и анализ атомов




„асто желательно иметь возможность представл€ть в программе в виде атомов информацию, считанную как последовательность символов. ƒл€ этой цели может примен€тьс€ встроенный предикат name, который позвол€ет св€зать между собой атомы и вход€щие в состав их имени символы в коде ASCII. ѕоэтому предикат

name [ A, L)

принимает истинное значение, если L Ч список кодов символов ASCII в имени атома

ј. Ќапример, предикат

name(zx232, [122,120,50,51, 50]]

принимает истинное значение. Ќиже описаны две типичные области применени€ предиката name.

1. ≈сли дано им€ атома, разбить его на отдельные символы.

2. ≈сли дан список символов, объединить его в им€ атома.

ѕримером приложени€ первого вида может служить программа, котора€ касаетс€ заказов, такси и водителей. ѕредположим, что эти пон€ти€ представлены в про≠грамме с помощью примерно таких атомов: orderl, order 2, driver l, driver 2, taxial, taxilux

ѕредикат taxi! X! провер€ет, представл€ет ли атом X информацию о такси:

taxi{ X):-

name (х, xlist},

name! taxi, Tlist),

cone! Tlist, _, Xlist!. % явл€етс€ ли слово 'taxi' префиксом X7

ѕредикаты order и driver можно определить аналогичным образом. —ледующий пример демонстрирует использование способа объединени€ символов в атомы. ќпределим предикат

getsenter.ee (Mordlist)

который считывает текст на естественном €зыке в произвольной форме и конкрети≠зирует список Wordlist значени€ми некоторого внутреннего представлени€ этого текста. Ќаиболее приемлемым вариантом внутреннего представлени€, позвол€ющим обеспечить дальнейшую обработку текста, €вл€етс€ следующий: каждое слово во входном тексте представл€етс€ как атом Prolog, а весь текст преобразуетс€ в список атомов. Ќапример, если текущий входной поток имеет вид Mary was pleased to see the robot fail.

то цель getsentence [Sentence) вызовет такую конкретизацию: Sentence = [ 'Mary1, was, pleased, to, see, the, robot, fail]

ƒл€ простоты предположим, что текст всегда завершаетс€ точкой и в нем отсут≠ствуют знаки препинани€.

—оответствующа€ программа приведена в листинге 6.1. ѕроцедура getsentence вначале считывает текущий входной символ Char, а затем передает этот символ в процедуру getrest дл€ завершени€ работы. ѕроцедура getrest должна выполн€ть свои действи€ с учетом описанных ниже трех случаев.

144 „асть I. язык Prolog


1. —имвол Cher представл€ет собой точку. ¬ этом случае чтение текста закончено. ■ 2. —имвол Char €вл€етс€ пробелом. »гнорировать его и перейти к выполнению процедуры get sentence на остальной части ввода.

3. —имвол Char представл€ет собой букву. ¬начале прочитать слово Word, кото≠рое начинаетс€ с символа Char, затем использовать процедуру getsentence дл€ чтени€ остальной части текста и формировани€ списка Wordlist. —ум≠марным результатом €вл€етс€ список [Word | Wordlist].

Ћистинг 6.1. ѕроцедура преобразовани€ текста в список атомов

I*

ѕроцедура getsentence считывает предложение и преобразовывает слова в список атомов. Ќапример,

getsentence (Wordlist)

создает список

Wordlist = [ -магу', was, pleased, to, see, the, robot, fail]

при получении на входе предложени€

Mary was pleased to see the robot fail.

V

getsentence! Wordlist):-getOt Char], getrestt Char, Wordlist).

getrestf 46, []):-!. %  онец предложени€; 46 - код ASCII дл€ '.'

getrest! 32, Wordlist);-!, % 32 - код ASCII дл€ пробела
getsentence; Wordlist). % ѕропустить пробел

getrestf Letter, (Word | wordlist)):-getletterst Letter, Letters, Nextchar), % ѕрочитать буквы текущего слова

getletterst 46, [], 46):-!. %  онец слова; 46 - код точки

getletterst 32, [], 32):-!. %  онец слова; 32 - пробел

getletterst Let, [Let | Letters], Nextchar):-getO (Char), getletterst Char, Letters, Nextchar).

ѕроцедурой, котора€ считывает символы одного слова, €вл€етс€ следующа€: getletters! Letter, Letters, Haxtchar)

“ри параметра этой процедуры описаны ниже.

1. Letter - это текуща€ буква (уже считанна€) считываемого слова.

2. Letters - это список букв (начина€ с Letter) вплоть до конца слова.

3. Next char Ч это входной символ, который непосредственно следует за считан≠ным словом. Next char должен быть небуквенным символом.

ƒополним этот пример комментарием, касающимс€ возможного применени€ про≠цедуры getsentence. ќна может использоватьс€ в программе дл€ обработки текста на естественном €зыке. “ексты, представленные в виде списков слов, наход€тс€ в форме, подход€щей дл€ дальнейшей обработки на €зыке Prolog. ќдним из простых


√лава 6. ¬вод и вывод



 


примеров €вл€етс€ поиск определенных ключевых слов во входном тексте. √ораздо более сложной задачей может €витьс€ понимание этого текста, иными словами, из≠влечение из него смысла, представленного в виде некоторой заранее выбранной фор≠мальной структуры. Ёто важное направление исследований в области искусственного интеллекта представлено в главе 2\.

”пражнени€

6.4. ќпределите отношение

starts — Atom, Character)

чтобы проверить, начинаетс€ ли им€ атома Atom с символа Character.

6.5. ќпределите процедуру plural, котора€ преобразует форму существительных в
единственном числе в форму во множественном числе, например, следующим
образом:

7- plural(table, X) X - tables

е.6. Ќапишите процедуру

search — Keyword, Sentence)

котора€ при каждом ее вызове находит в текущем входном файле предложе≠ние, содержащее указанное входное слово Keyword. ѕредложение Sentence должно находитьс€ в его первоначальной форме, т.е. должно быть представле≠но как последовательность символов или как один атом (дл€ этого можно ис≠пользовать процедуру getsentence из этого раздела, откорректированную со≠ответствующим образом).





ѕоделитьс€ с друзь€ми:


ƒата добавлени€: 2015-10-01; ћы поможем в написании ваших работ!; просмотров: 403 | Ќарушение авторских прав


ѕоиск на сайте:

Ћучшие изречени€:

Ћюди избавились бы от половины своих непри€тностей, если бы договорились о значении слов. © –ене ƒекарт
==> читать все изречени€...

1571 - | 1378 -


© 2015-2024 lektsii.org -  онтакты - ѕоследнее добавление

√ен: 0.013 с.