LINUX.ORG.RU

Объясните на пальцах как работает всякий морфологический поиск на уровне структур данных?

 


0

1

Хочу находить слово «баранами» по слову «бараны», например.

Я себе так представляю:

  1. В некой струтуре данных (hashtable, b+-tree и т.п.) лежит и занимает место много ключеый [«баран»,«баранов»,«баранам»,«баранами»,«баранах»], каждый из которых показывает на всё это множество.

  2. Что происходит: юзер вводит «баранами», мы достаём всё множество этих слов N.

  3. С каждым из N слов отдельно идём в индекс документов и достаём для каждого кучку документов.

  4. Как-то мёржим всю кучу документов в одну кучу (тут уже 100000 вариаций мёржинга: расстояние слово от искомого, релевантность, свежесть и т.п. и т.д.)

Или там на первом этапе никакая куча отдельных ключей не лежит, а какой-то хитрый алгоритм динамически меняет русские слова в рантайме, не храня нифига никакие склонения?

Да-да, я знаю что есть автор Sphinx со своими парадами остроумия.

В целом, вопрос носит максимально низкоуровневый характер: как бы «достаточно хороший» русский поиск сделали вы, если бы у вас были любые словари и только голая сишечка. Кроме «хороший поиск» есть критерий: «за пол-миллиекунды».



Последнее исправление: igloev (всего исправлений: 1)

«баран»,«баранов»

шерсть, трава

pyallnik
()
Ответ на: комментарий от CatsCantFly

Я прошу варианты решений, а не ссылку на место, где говорят «Задача нахождения основы слова представляет собой давнюю проблему в области компьютерных наук». Это и так было известно, что «давнюю проблему».

igloev
() автор топика

Разных подходов довольно много.

Судя по постановке задачи, тебе должны подойти (посимвольные) н-граммы или что-то вроде https://en.wikipedia.org/wiki/Levenshtein_automaton

Deleted
()

морфология на Си?

anonymous
()
Ответ на: комментарий от igloev

Дальше третьего предложения читать не пробовал?

fluorite ★★★★★
()

Почти, только ключ всегда один - чистая стема, потом по стемам ищешь.

anonymous
()
Ответ на: комментарий от anonymous

оно совсем другое, минусы нет сорцов (только бинари) и относительно медленный.

vtVitus ★★★★★
()

В некой струтуре данных (hashtable, b+-tree и т.п.) лежит и занимает место много ключеый [«баран»,«баранов»,«баранам»,

Имхо с самого начала неправильно.
Слышал такое слово как индексация?

Так вот, первым делом индексируемые тексты сводятся с помощью нехитрого алгоритма к корням и атрибутам корней(падёж, склонение, род и пр.).

Далее для каждого текста делается словарь получаемый сортировкой этих корней с подсчётом количества дубликатов с их последующим удалением.

И вот уже по этим словарям делается индекс, то есть общий словарь корней в котором для каждого корня указывается список текствов в которых он употреблён.

В принципе такой индекс можно попробовать на bash состряпать.

torvn77 ★★★★★
()
Последнее исправление: torvn77 (всего исправлений: 1)

Читай документацию про внутреннее устройство pymorphy2. Там используется DAWG.

gorky ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.