Forum Webscript.Ru

Программирование => Теория, алгоритмы и стандарты => Тема начата: Tronyx от 12 Сентября 2002, 20:14:01

Название: Словоформы для поиска
Отправлено: Tronyx от 12 Сентября 2002, 20:14:01
Кто подскажет как лучше и эффективней сделать образование словоформ при поиске?
Название: Словоформы для поиска
Отправлено: КшЫуфксрук от 13 Сентября 2002, 00:54:11
Взять словарь от ispell, затем либо посмотреть как сделано в mnogosearch, либо придумать свой формат хранения словаря и свой алгоритм его обработки.

Также, если очень хорошо поискать, в сети можно найти словарь Зализняка.

Компактный и быстрый модуль требует некоторых усилий. Я свой неделю вылизывал, пока не получил более менее приличную скорость работы (писалось все не Перле).
Название: Словоформы для поиска
Отправлено: rembo от 13 Сентября 2002, 03:26:06
Цитировать
посмотреть как сделано в mnogosearch

Вот именно! Это целый раздел информатики и лингвистики этим занимаются вот уже несколько десятков лет не последние умы человечества. Так что, возьми что-то готовое, а если это тебя не устраивает - начни с того чтоб поступить в какой-нить филологический факультет одного из отечественных университетов :)
Название: Словоформы для поиска
Отправлено: КшЫуфксрук от 13 Сентября 2002, 09:35:24
> поступить в какой- нить филологический факультет

В корне не согласен. Для написания профессионального морфологического анализатора неплохо иметь под рукой профессионального лингвиста. Но в вебприложениях данная задача обычно возникает при написании поисковых систем, а там требования к морфологии упрощены: нужно уметь определять нормальную форму для любой словоформы и выдавать все словоформы для нормальной формы. Есть морфологические словари (Зализняка и Тихонова), где уже есть вся информация о словоформах различных слов (вот для составления этих словарей нужен лингвист). Кроме того, есть бесплатный словарь от ispell, который не совсем морфологический, но для поисковика его хватает. Дальше нужно только вычленить из словарей нужную информацию в нужном формате, придумать структуру данных для ее хранения (хэш-таблицу или конечный автомат), запрограммировать все это дело. Тут уже никакой лингвист не нужен.
Название: Словоформы для поиска
Отправлено: rembo от 13 Сентября 2002, 10:07:25
Цитировать
Так что, возьми что-то готовое
Это то что я имел ввиду, а на счет поступления в университет - это как бы "образно говоря".
Цитировать
морфологического анализатора... ...нормальную форму для любой словоформы и выдавать все словоформы для нормальной формы...

Во всяком случае и твои знания не из бульварной газетки взяты. :)
Название: Словоформы для поиска
Отправлено: глебушка от 13 Сентября 2002, 21:05:34
КшЫуфксрук, а ну-ка колись:-). как ты организовал словарь
Цитировать
ispell
, просто рассортировал по алфавиту в отдельные файлы? Или ещё чего похитрее. А то я тоже написал поиск, да толлько когда я запускаю индексирование на своём П166, страшно становиться, дико тормозит:-).
Цитировать
можно найти словарь Зализняка

если кто найдёт, плиз киньте ссылку! (я не нашёл:-)
Название: Словоформы для поиска
Отправлено: КшЫуфксрук от 15 Сентября 2002, 23:02:01
> Во всяком случае и твои знания не из бульварной газетки взяты.

Несколько часов вместе с Яндексом и чтение различных сайтов. Это все же ближе к бульварной газетке. Хотя, те кто занимается этим серьезно и знания получает в другом месте.

> а ну-ка колись:-). как ты организовал словарь

На моем сайте есть обрезанная демо-версия. При желании можно понять, как все это работает. Правда, это самая первая версия, очень медленная - порядка 100-200 слов в секунду. Последняя в режиме нормализации дает 3000-4000 слов в секунду. Но даже с такой скоростью это все еще самое узкое место при индексации.

Формат словаря может быть самым разным. У меня сделано на основе ternary-tree. У Коваленко (рекомендую полистать описание его алгоритма) особое дерево. Сегалович делал на основе разряженной хэш-таблицы (perfect minimal hashing), на сайте Комтека была статья с описанием. Используют также конечные автоматы.