简短的回答:
简单地避免词干以适应您不考虑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).
让我尝试消除您对倒排列表的一些困惑。它是存储在每个术语的过帐中的文档(而不是术语本身)。
这些词通常存储在内存字典中(使用哈希表或 trie 实现),其中包含指向从辅助存储中动态存储和加载的帖子(包含该特定术语的文档列表)的指针。
一个简单的例子(不显示文档权重):
(information) --> [D1, D5, D9,...]
(informative) --> [D9, D10, D20,...]
(retrieval) --> [D1, D9, D17,...]
..
因此,如果您不想应用词干提取,那很好......事实上,上面的示例显示了一个未提取词干的索引,其中单词information
和informative
出现在它们的非合并形式中。在合并的术语索引(使用词干分析器或词形还原器)中,您可以用等效的表示形式(例如inform
)替换不同的形式。在这种情况下,索引将是:
(inform) --> [D1, D5, D9, D10, D20...]. --- union of the different forms
(retrieval) --> [D1, D9, D17,...]
..
因此,这种混合表示匹配单词的所有可能形式information
,例如informative
,informational
等等。
更长的答案
现在假设您想要实现两全其美,即允许这种合并以用户控制的方式完成的表示,例如wrapping a word around quotes to denote requiring an exact match (
“slow” vs.
slow in the query), or some indicator to include synonyms for a query term for semantic search (e.g.
syn(slow)` 包含单词slow 的同义词)。
为此,您需要为未合并的单词维护单独的帖子,并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...
。根据查询语法,可以在检索时促进精确搜索或轻松搜索(基于变形/同义词等)