Поиск:

Ответ в темуСоздание новой темы Создание опроса
> поиск по базе знаний, работа со строками 
V
    Опции темы
toshkaexe
Дата 29.4.2007, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 57
Регистрация: 16.2.2007

Репутация: нет
Всего: 1



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

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



PM MAIL   Вверх
LuMee
Дата 30.4.2007, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 30.3.2007

Репутация: нет
Всего: 1



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

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

Для поиска фактов входную строку точно также приводить к верхнему регистру, делать из нее список слов, а потом уже искать такой же список в базе знаний. 
PM MAIL   Вверх
toshkaexe
Дата 30.4.2007, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 57
Регистрация: 16.2.2007

Репутация: нет
Всего: 1



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

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

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

не могу понять, существует ли встроенная функция в SWI-пролог, котоая преобразует из нижнего регистра буквы в верхний?
PM MAIL   Вверх
LuMee
Дата 30.4.2007, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 30.3.2007

Репутация: нет
Всего: 1



Я лично не нашел. Возможно, придется писать его руками.
PM MAIL   Вверх
Artemios
Дата 1.5.2007, 01:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: 6
Всего: 50



Цитата(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
?-



--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
toshkaexe
Дата 1.5.2007, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 57
Регистрация: 16.2.2007

Репутация: нет
Всего: 1



О, мегаспасибо!!!! smile  smile  smile  smile  smile  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума Prolog
Void
  • Пожалуйста, создавайте темы с содержательными названиями.
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Prolog | Следующая тема »


 




[ Время генерации скрипта: 0.0456 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.