Что такое поисковая машина

Первый шаг при создании поисковой машины – разработать методику сбора документов. Иногда для этого применяется ползание (начинаем с небольшого набора документов и переходим по имеющимся в них ссылкам), а иногда отправной точкой служит фиксированный набор документов, быть может, хранящихся в корпоративной сети интранет. Далее собранные документы необходимо проиндексировать. Обычно для этого строится большая таблица, содержащая список документов и вхождений различных слов. В зависимости от конкретного приложения сами документы могут и не храниться в базе данных; в индексе находится лишь ссылка (путь в файловой системе или URL) на их местонахождение

Ну и последний шаг – это, конечно, возврат ранжированного списка документов в ответ на запрос. Имея индекс, найти документы, содержащие заданные слова, сравнительно несложно; хитрость заключается в том, как отсортировать результаты. Можно придумать огромное количество метрик, и недостатка в способах их настройки для изменения порядка документов тоже нет. Стоит лишь ознакомиться с разными метриками, как возникает желание, чтобы большие поисковики предоставляли средства для более точного контроля («Ну почему я не могу сказать Google, что мои слова должны находиться в документе рядом?»).

Наконец необходимо построить нейронную сеть для ранжирования запросов. Такая сеть обучается ассоциировать запросы с результатами в зависимости от того, по каким ссылкам щелкает пользователь, получив список результатов. Эта информация позволяет изменить сортировку результатов с учетом того, как человек переходил по найденным ссылкам в прошлом.

В примерах мы будем пользоваться базой данных SQLite, но алгоритмы можно легко адаптировать для работы с более традиционными клиент-серверными СУБД.

Для начала создайте новый файл searchengine.py и добавьте в него класс crawler и заглушки для методов:

class crawler:

# Инициализировать паука, передав ему имя базы данных def __init__(self,dbname): pass

def __del__(self): pass

def dbcommit(self): pass

#     Вспомогательная функция для получения идентификатора и

#     добавления записи, если такой еще нет

def getentryid(self,table,field,value,createnew=True): return None

#     Индексирование одной страницы def addtoindex(self,url,soup):

print ‘Индексируется %s’ % url

#     Извлечение текста из HTML-страницы (без тегов) def gettextonly(self,soup):

return None

#     Разбиение текста на слова def separatewords(self,text):

return None

#     Возвращает true, если данный URL уже проиндексирован def isindexed(self,url):

return False

#     Добавление ссылки с одной страницы на другую def addlinkref(self,urlFrom,urlTo,linkText):

pass

#     Начиная с заданного списка страниц, выполняет поиск в ширину

#     до заданной глубины, индексируя все встречающиеся по пути

#     страницы

def crawl(self,pages,depth=2): pass

#     Создание таблиц в базе данных def createindextables(self):

pass

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100