Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Prolog > поиск по базе знаний, работа со строками


Автор: toshkaexe 29.4.2007, 22:43
Не могу понять с чего подступиться к такой задаче.
Есть база, где с фактами
Код
firma($MOSENERGO$).
firma($GUM$).
firma($tsum$).
firma($Zolotoi petuschok$).
firma($Moscow state university$).

нужно написать правило,согласно которому определяется есть данный факт в базе или нет.
Банальное сравнение я реализовал.
Теперь нужно реализовать следующее, если фирма, которую я ввожу для сравнения есть в базе, но регистр у букв в названии фирмы не совпадает, то все равно считать, что такая фирма есть в базе.
Так же нужно учеть возможность перестановок, то есть $Moscow state university$ и $ state MOScow university$ это одно и тоже.
Подскажите, плиз. К подступиться к этой задаче. Может быть строить какой-нить лексический анализатор?



Автор: LuMee 30.4.2007, 10:57
Первое, что приходит на ум, чтобы реализовать такое сравнение: преобразовать базу знаний, чтобы вместо строк хранились списки строк в верхнем регистре, скажем, вот так:
Код

firma([$MOSENERGO$]).
firma([$GUM$]).
firma([$TSUM$]).
firma([$ZOLOTOI$, $PETUSHOK$]).
firma([$MOSCOW$, $STATE$, $UNIVERSITY$]).

Для поиска фактов входную строку точно также приводить к верхнему регистру, делать из нее список слов, а потом уже искать такой же список в базе знаний. 

Автор: toshkaexe 30.4.2007, 11:47
Цитата(LuMee @ 30.4.2007,  10:57)
Первое, что приходит на ум, чтобы реализовать такое сравнение: преобразовать базу знаний, чтобы вместо строк хранились списки строк в верхнем регистре, скажем, вот так:
Код

firma([$MOSENERGO$]).
firma([$GUM$]).
firma([$TSUM$]).
firma([$ZOLOTOI$, $PETUSHOK$]).
firma([$MOSCOW$, $STATE$, $UNIVERSITY$]).

Для поиска фактов входную строку точно также приводить к верхнему регистру, делать из нее список слов, а потом уже искать такой же список в базе знаний.

не могу понять, существует ли встроенная функция в SWI-пролог, котоая преобразует из нижнего регистра буквы в верхний?

Автор: LuMee 30.4.2007, 12:55
Я лично не нашел. Возможно, придется писать его руками.

Автор: Artemios 1.5.2007, 01:38
Цитата(toshkaexe @  30.4.2007,  12:47 Найти цитируемый пост)
не могу понять, существует ли встроенная функция в SWI-пролог, котоая преобразует из нижнего регистра буквы в верхний? 

существует:
Цитата

Artemios@ax:~> pl
Welcome to SWI-Prolog (Multi-threaded, Version 5.6.22)
Copyright © 1990-2006 University of Amsterdam.
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.

For help, use ?- help(Topic). or ?- apropos(Word).

?- upcase_atom('abc',X).

X = 'ABC'

Yes
?-

Автор: toshkaexe 1.5.2007, 22:10
О, мегаспасибо!!!! smile  smile  smile  smile  smile  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)