Forum Webscript.Ru

Программирование => Perl => Тема начата: glebushka от 10 Июля 2002, 18:30:11

Название: поиск с созданием индекса
Отправлено: glebushka от 10 Июля 2002, 18:30:11
Мне нужно написать поисковый скрипт, осуществляющий поиск по хтмл файлам, с созданием индекса, искать необходимо по частоте встречи этого слова в тексте, по месту (заголовок, title, description, комментарии и т.д.), по времени появления этого файла, желательно иметь возможность искать словосочетания. Готовые скрипты не предлагать, разве что для разбора (т.е. код не должен быть уж слишком путанным), мне интересен сам принцип работы, просто к стыду своему:-) даже не знаю с чего начать. Также не плохобы организовать поиск по базе (текстовой, ну и MySql тоже, я думаю разницы в поиске особой нет). База имеет следующие поля:
title
description
время
автор
название
текст
комментарии
Также поиск по названиям картинок. В общем хотелось бы получить эдакий сам-себе Яндекс для домашнего портальчика. Причём нужен именно индекс!
Помогите плиzZZZ. Ссылками, советами, примерами, комментариями, в общем чем можете.
Да, если это важно, скрипт пишется на Перл.
Название: поиск с созданием индекса
Отправлено: ESE от 11 Июля 2002, 03:12:54
Цитировать
даже не знаю с чего начать
Начни со сбора сведений о местанахождении всех индексируемых файлов.Каталоги, подкаталоги......
Название: поиск с созданием индекса
Отправлено: glebushka от 11 Июля 2002, 03:45:55
ESE, ну это то как раз понятно, без проблем, т.к. поиск только по моему сайту, на этапе разработки я даже голову этим себе забивать не буду, оставлю просто массив в который надо указывать пути, по которым искать...
А дальше то что делать? Как этот индекс выглядит? Какова должна быть структура этого файла/базы?
Название: поиск с созданием индекса
Отправлено: AliMamed от 11 Июля 2002, 09:56:20
http://spectator.ru/issues/278
http://spectator.ru/issues/279
Название: поиск с созданием индекса
Отправлено: Maniac от 11 Июля 2002, 10:37:48
Сходи по ссылкам ниже и почитай (читать придется много):
http://www.stocona.ru/technology/informationRetrieval/
http://kes.narod.ru/projects/InterSearch/diplom0.html
Название: поиск с созданием индекса
Отправлено: glebushka от 11 Июля 2002, 14:47:46
AliMamed, спасибо за ссылки, не совсем то, что надо (я хочу более сложный поиск сделать), но прочитать было полезно и интересно.
Maniac, первая ссылка не катит, вторая то что надо, вот только не знаю кто выкладывал этот диплом, но "Конструкторская часть" зажал, а это как раз самое интересное:-). К моему глубочайшему удивлению в "использованная литература", есть действительно неплохие ссылки, СПАСИБО!
Если у кого чего есть ещё по этому поводу, кидайте, плиZZZZZ.
А я пока поразмышляю вслух, может кому интересно будет:-), большая просьба поправлять и дополнять.
Ну значит так. С тем, где ищем, будем считать определились.
I. Создаём индекс. (я решил создавать текстовой файл, но потом без проблем можно будет переделать и в MySQL и т.д.).
а) необходимо создать следующие файлы:
1. title.txt
2. description.txt
3. keywords.txt
4. time.txt
5. name.txt
6. text.txt
7. all.txt (здесь будут собираться записи со всех мест, дабы организовать поиск по ревалентности вне зависимости от места в документе)
Создаём цикл, в нём будем обрабатываться инфа из каждого индексируемого файла.
Регулярными выраженниями вытаскиваем следующее:
1) заголовок(теги естественно отбрасываем), обработка функциеей ochistka() о ней чуть позже, получаем на выходе массив @title.
2) , &ochistka(); получаем хеш %description (слово => ранг, ...)
3)  , &ochistka(); получаем на выходе массив @keywords.
4) получаем время, когда был создан файл, &ochistka(); и записываем в $timefile
5) находим все заголовки, &ochistka(); получаем хеш %name (слово => ранг, ...) (о ранге чуть позже)
6) &ochistka(); получаем на выходе %text (слово => ранг, ...)
конец цикла, запись значений в соответствующие файлы следующим образом:
Например файл title.txt: Файл выглядит следующим образом
слово1
урло1@@@урло2@@@...
слово2
......
Дальше всё понятно, не забываем только учитывать, что данное слово уже может быть в индексе, тогда прсто добавим новый урл.
там где хеши файлы выглядят по другому:
слово1
урло1@@@ранг@@@...
слово2
......
И т.д., а теперь главное: функция ochistka()
в функцию, в качестве параметров будет передаваться следующая инфа:
тип данных (заголовок, текст и т.д.)
сосбственно содержание на обработку.
В зависимости от этого и будет обрабатываться, ну рассматривать уже регулярные выражения не буду, предположим всё у нас ок, теги удалили, дальше удаляем, комментарии, всё что находиться до тега , удаляем знаки препинания, частицы и вообще слова короче трёх букв, убираем все циферки, записываем каждое слово в массив, проверяем нет ли в нём суффикса "-СЯ", "-СЬ", или приставок "НЕ-", "НИ-", если есть отсекаем нафиг, больше я ничего не придумал, чтобы можно было отсечь, проверяем если нужно на повторения, и подсчитываем количество повторений, делим на общее количество слов, получаем ранг, записываем всё в соответствующий хеш или обычный массив, и финита ла комедия:-)
ЗЫ. Конечно это получиться не совсем Яндекс:-))) Морфологическим и синтетическим анализом тут и не пахнет...
ЗЫЗЫ. Если у кого есть идеи, замечания, пинайте на здоровье, только аргументированно...
Название: поиск с созданием индекса
Отправлено: от 11 Июля 2002, 18:54:06
>проверяем нет ли в нём суффикса "-СЯ", "-СЬ", или приставок "НЕ-", "НИ-", если есть отсекаем нафиг

В слове "лось" тоже отсекаем? Если хочется сделать дешево и сердито, тогда в гугле ищем "porter snowball". Там есть алгоритм стемминга для русского языка. Конечно это не морфология, но все же лучше, чем слепое отсечение. Правда нет перловой реализации этого алгоритма, но это наверное не слишком трудно сделать (правда я не стал на этом зацикливаться, а написал собственный простой морфологический модуль).
Название: поиск с созданием индекса
Отправлено: glebushka от 11 Июля 2002, 22:20:13
КшЫуфксрук, спасибо, нашёл, разбираюсь... Уж не знаю выйдет толк из этого или нет, но надо поробовать...
Цитировать
написал собственный простой морфологический модуль

Как я понял морфологический модуль - это прежде всего словарь в десятки, сотни тысяч слов. А что значит простой? Сколько тысяч слов и словоформ? Поясни.
Название: поиск с созданием индекса
Отправлено: от 12 Июля 2002, 11:24:56
Словарь Лебедева - http://scon155.phys.msu.su/~swan/orthography.html

Он правда обрезанный, у Лебедева есть более полный словарь, но уже не бесплатно. А в этой версии не все слова имеют правила преобразований. И морфологической информации в нем нет - то есть я могу узнать, что слово "читал" это одна из форм слова "читать", но не знаю, какая именно (хотя для поисковика это и не надо).

Еще в инете можно найти словарь Зализняка. Может потом перепишу модуль под этот словарь.
Название: поиск с созданием индекса
Отправлено: glebushka от 12 Июля 2002, 22:25:07
Цитировать
словарь Зализняка

попробую поискать.
Цитировать
перепишу модуль под этот словарь.

а под какой словарь у тебя есть модуль?
Цитировать
Словарь Лебедева

завтра скачаю, посмотрю что там...
спасибо за ссылку.
Название: поиск с созданием индекса
Отправлено: от 13 Июля 2002, 04:12:10
Сейчас я использую словарь Лебедева, как и все самопальные морфологии.