Может ли инвертированный индекс иметь несколько слов в одной записи? - PullRequest
1 голос
/ 07 апреля 2020

При извлечении информации в инвертированном индексе есть записи, являющиеся словами корпуса, а каждое слово имеет список публикаций, представляющий собой список документов, в которых он появляется.

Если применяется основание, запись в индексе быть основанием, поэтому несколько слов могут, наконец, отображаться в одну и ту же запись, если они имеют один и тот же основа. Например:

Без учета:

(slowing) --> [D1, D5, D9,...]

(slower) --> [D9, D10, D20,...]

(slow) --> [D2,...]

С учетом:

(slow) --> [D1, D2, D5, D9, , D10, D20...]

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

(slow, slows, slowing, slowed, slower, slowest) --> [D1, D2, D5, D9, , D10, D20...]

Это возможно и возможно или нет?

Заранее спасибо

1 Ответ

0 голосов
/ 08 апреля 2020

Краткий ответ: Просто избегайте стемминга в соответствии с вашими потребностями, не считая slow и slows совпадением.

Длинный ответ:

Вопрос: I want to avoid stemming, and instead would like to make each entry in my inverted index as a bag of words (inflections) such as (slow, slows, slowing, slowed, slower, slowest).

Позвольте мне попытаться прояснить некоторую путаницу, которую вы испытываете по поводу инвертированных списков. Это документы , которые хранятся в проводках для каждого термина (не сами термины).

Слова обычно хранятся в словаре в памяти (реализованном с помощью таблицы ha sh или tr ie), содержащей указатели на сохраненные сообщения (список документов, содержащих этот конкретный термин) и загружается на лету из вторичного хранилища.

Простой пример (без указания веса документа):

(information) --> [D1, D5, D9,...] (informative) --> [D9, D10, D20,...] (retrieval) --> [D1, D9, D17,...] ..

Итак, если вы не хотите применять stemming, это нормально ... На самом деле, в приведенном выше примере показан индекс unstemmed , где слова information и informative появляются в их несвязанных формах. В совмещенном индексе терминов (со стеммером или лемматизатором) вы должны заменить различные формы эквивалентным представлением (скажем, inform). В этом случае индекс будет:

(inform) --> [D1, D5, D9, D10, D20...]. --- union of the different forms (retrieval) --> [D1, D9, D17,...] ..

Таким образом, это объединенное представление соответствует всем возможным формам слова information, например, informative, informational et c.

Более длинный ответ

Теперь давайте предположим, что вы хотите достичь лучшего из обоих миров, то есть представления, которое позволяет выполнять эту связь в управляемом пользователем например, wrapping a word around quotes to denote requiring an exact match ( "медленный" vs. медленный in the query), or some indicator to include synonyms for a query term for semantic search (e.g. syn (медленный) `для включения синонимов слова медленный).

Для этого вам нужно вести отдельные сообщения для несвязанных слова и поддерживать дополнительные equivalence indicating pointers между набором equivalent (stem relation/synonym relation/ semantic relation etc.) терминов.

Возвращаясь к нашему примеру, вы получите что-то вроде:

(E1)-->(information) --> [D1, D5, D9,...]
 |---->(informative) --> [D9, D10, D20,...]
 |---->(data) --> [D20, D23, D25,...]


(E2)-->(retrieval) --> [D1, D9, D17,...]
 |---->(search) --> [D20, D30, D31,...]

..

Здесь я показал два примера классов эквивалентности (концептуальных представлений) двух наборов терминов information, data... и retrieval, search.... В зависимости от синтаксиса запроса тогда будет возможно во время поиска упростить точный поиск или упрощенный поиск (на основе перегибов / синонимов и т. Д. c.)

...