Xpoint
   [напомнить пароль]

Оптимальный поиск или поиск с учётом словоформ

Метки: [без меток]
2007-10-02 06:13:57 [обр] Top manager(0/2)[досье]

Народ! ХАчу написать свой морфоанализатор, а точнее его подобие :)

Я тута думал-думал и надумал три способа:

  1. Зачем вообще писать сложную систему, если можно просто сделать БД с корнями слов (по-максимуму) и перед поиском ключевых слов, переделать их в корни ключевых слов и искать.

Таким образом всё сводиться к табличке/справочнику с корнями ключевых слов.

+ - Скорость и на 95% - то что надо. Остальные 5% теряются из-за того, что не возможно будет учесть к примеру пару слов, которые, по-сути, есть одно и тоже, просто в разном склонении имеют разные корни
- - Нужно следить за полнотой словоря, но это дело второе.

  1. Анализатор совпадения/идентичности в процентном соотношении двух слов.

К примеру, есть пара слов А и Б, если, к примеру, два эти слова похожи по набору букв на 75%, на это то что надо.
+ - Вообще не нужен ни какой словарь.
- - Работает просто безумно долго, т.к. придётся проверять каждое слово в массиве. Что делает это не приемлимым способом.

  1. Объединяет оба способа выше. Суть его заключается в том, что способ 2 лишён недостатков способа 1. А значит они могут помочь друг другу. Можно просто использовать способ 2 при выборке корней слов из справочника. А значит у нас будут все варианты слов, в разных склонениях, если даже пара слов одинаковые, тока в разных склонениях и имеют разные корни.

Как Вам мои мысли?

спустя 2 минуты [обр] Top manager(0/2)[досье]
в в этой статье http://www.delphisources.ru/pages/faq/base/root_of_word.html предлагается даже алгоритм по определению корня слова
спустя 2 часа 20 минут [обр] Top manager(0/2)[досье]

Есть ещё один интернет проект http://www.oomnik.ru/products/ занимается похожими вещами

Пообщавшись, я пришёл к мнению, что хорошее соотношение цена/качество только у одного варианта: справочник корней (и слов привязанных к ним)

Так по крайней мере наверняка реализовано у http://www.rco.ru/product.asp?ob_no=12.
Как верно подметил Алексей Рюмин aka Dwarf[досье] их система делает морфологический анализ. Я же замечу, что думаю, что она вообще его не делает, а просто ищет соответствия в своём справочнике. Ибо как сказано у них в доке: в их справочнике очень много слов.

спустя 2 часа [обр] Николай Бубело(0/113)[досье]

Top manager[досье], зачам изобретать велосипед?
Используйте ispell или стеммер Портера. Вот на выбор три возможных алгоритма:

  1. Построение на основе ispell полного русского словаря (всех словоформ), и поиск по нему всех нормальных словоформ. Объем словаря будет очень большим, т.к. нужно будет хранить все словоформы, полученные из ispell.
  1. Поиск основной формы слова (также по ispell) на основе алгоритма, описанного здесь:

Работа с русской морфологией при помощи словаря ispell
В базе потребуется хранить только исходный ispell-овский словарь.

  1. Вовсе без словаря — использовать стеммер Портера (это, насколько мне известно, единственный более-менее приемлемый стеммер для русского языка). Я, кстати предпочитаю именно этот вариант. Оригинальное описание здесь: http://snowball.tartarus.org/algorithms/russian/stemmer.html

У Котерова есть неплохая реализация: http://forum.dklab.ru/php/advi......ionOfARootFromRussianWord.html
Могу поделиться и своей, но у Дмитрия сделано проще и изящнее.

спустя 23 минуты [обр] Top manager(0/2)[досье]
Николай Бубело[досье] прикольно. То что я искал, тока ещё не разобрался что к чему :), ща гляну
спустя 1 час 4 минуты [обр] Top manager(0/2)[досье]
хАчу Стеммер Портера на c#. Кто поделиться?!...
Powered by POEM™ Engine Copyright © 2002-2005