Автор Тема: поиск с созданием индекса  (Прочитано 6737 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
поиск с созданием индекса
« : 10 Июля 2002, 18:30:11 »
Мне нужно написать поисковый скрипт, осуществляющий поиск по хтмл файлам, с созданием индекса, искать необходимо по частоте встречи этого слова в тексте, по месту (заголовок, title, description, комментарии и т.д.), по времени появления этого файла, желательно иметь возможность искать словосочетания. Готовые скрипты не предлагать, разве что для разбора (т.е. код не должен быть уж слишком путанным), мне интересен сам принцип работы, просто к стыду своему:-) даже не знаю с чего начать. Также не плохобы организовать поиск по базе (текстовой, ну и MySql тоже, я думаю разницы в поиске особой нет). База имеет следующие поля:
title
description
время
автор
название
текст
комментарии
Также поиск по названиям картинок. В общем хотелось бы получить эдакий сам-себе Яндекс для домашнего портальчика. Причём нужен именно индекс!
Помогите плиzZZZ. Ссылками, советами, примерами, комментариями, в общем чем можете.
Да, если это важно, скрипт пишется на Перл.
Ну к чему все это, лучше бы водки выпили...

Оффлайн ESE

  • Фанат
  • Постоялец
  • ***
  • Сообщений: 172
  • +0/-0
  • 2
    • Просмотр профиля
    • http://comp.hobi.ru
поиск с созданием индекса
« Ответ #1 : 11 Июля 2002, 03:12:54 »
Цитировать
даже не знаю с чего начать
Начни со сбора сведений о местанахождении всех индексируемых файлов.Каталоги, подкаталоги......
У програмиста две руки: левая и !левая
welcome

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
поиск с созданием индекса
« Ответ #2 : 11 Июля 2002, 03:45:55 »
ESE, ну это то как раз понятно, без проблем, т.к. поиск только по моему сайту, на этапе разработки я даже голову этим себе забивать не буду, оставлю просто массив в который надо указывать пути, по которым искать...
А дальше то что делать? Как этот индекс выглядит? Какова должна быть структура этого файла/базы?
Ну к чему все это, лучше бы водки выпили...

Оффлайн AliMamed

  • \\o/ ali akbar \\o/
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2409
  • +2/-0
  • 2
    • Просмотр профиля
    • http://alimamed.pp.ru
ну, будем исповедоваться?

Оффлайн Maniac

  • Ума нет - считай коллега
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 844
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
поиск с созданием индекса
« Ответ #4 : 11 Июля 2002, 10:37:48 »
Сходи по ссылкам ниже и почитай (читать придется много):
http://www.stocona.ru/technology/informationRetrieval/
http://kes.narod.ru/projects/InterSearch/diplom0.html
TANSTAAFL

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
поиск с созданием индекса
« Ответ #5 : 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()
в функцию, в качестве параметров будет передаваться следующая инфа:
тип данных (заголовок, текст и т.д.)
сосбственно содержание на обработку.
В зависимости от этого и будет обрабатываться, ну рассматривать уже регулярные выражения не буду, предположим всё у нас ок, теги удалили, дальше удаляем, комментарии, всё что находиться до тега , удаляем знаки препинания, частицы и вообще слова короче трёх букв, убираем все циферки, записываем каждое слово в массив, проверяем нет ли в нём суффикса "-СЯ", "-СЬ", или приставок "НЕ-", "НИ-", если есть отсекаем нафиг, больше я ничего не придумал, чтобы можно было отсечь, проверяем если нужно на повторения, и подсчитываем количество повторений, делим на общее количество слов, получаем ранг, записываем всё в соответствующий хеш или обычный массив, и финита ла комедия:-)
ЗЫ. Конечно это получиться не совсем Яндекс:-))) Морфологическим и синтетическим анализом тут и не пахнет...
ЗЫЗЫ. Если у кого есть идеи, замечания, пинайте на здоровье, только аргументированно...
Ну к чему все это, лучше бы водки выпили...

  • Гость
поиск с созданием индекса
« Ответ #6 : 11 Июля 2002, 18:54:06 »
>проверяем нет ли в нём суффикса "-СЯ", "-СЬ", или приставок "НЕ-", "НИ-", если есть отсекаем нафиг

В слове "лось" тоже отсекаем? Если хочется сделать дешево и сердито, тогда в гугле ищем "porter snowball". Там есть алгоритм стемминга для русского языка. Конечно это не морфология, но все же лучше, чем слепое отсечение. Правда нет перловой реализации этого алгоритма, но это наверное не слишком трудно сделать (правда я не стал на этом зацикливаться, а написал собственный простой морфологический модуль).

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
поиск с созданием индекса
« Ответ #7 : 11 Июля 2002, 22:20:13 »
КшЫуфксрук, спасибо, нашёл, разбираюсь... Уж не знаю выйдет толк из этого или нет, но надо поробовать...
Цитировать
написал собственный простой морфологический модуль

Как я понял морфологический модуль - это прежде всего словарь в десятки, сотни тысяч слов. А что значит простой? Сколько тысяч слов и словоформ? Поясни.
Ну к чему все это, лучше бы водки выпили...

  • Гость
поиск с созданием индекса
« Ответ #8 : 12 Июля 2002, 11:24:56 »
Словарь Лебедева - http://scon155.phys.msu.su/~swan/orthography.html

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

Еще в инете можно найти словарь Зализняка. Может потом перепишу модуль под этот словарь.

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
поиск с созданием индекса
« Ответ #9 : 12 Июля 2002, 22:25:07 »
Цитировать
словарь Зализняка

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

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

завтра скачаю, посмотрю что там...
спасибо за ссылку.
Ну к чему все это, лучше бы водки выпили...

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

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28