构建倒排索引的几个主要步骤:
1 收集待建索引的文档
2 对这些文档中的文本进行词条化
3 对步骤2中的词条进行语言学预处理,得到此项
4 根据词项对所有文档建立索引
重要概念
词条和词条
词条化是将给定的字符序列拆分成一系列子序列的过程,其中每个子序列称为一个词条,例如:
输入:Friends, Romans, Countryman, lend me your ears
输出:friend/Romans/Countryman/lend/me/your/ears
词条化的主要任务就是确定哪些才是正确的词条。
去除听用词
停用词:某些情况下,一些常见词在文档和用户需求进行匹配时价值并不大,需要彻底从词汇表中去除,这些词称为停用词(stop word)。
常见的生成停用词表的方法:
1、将词项按照文档频率(每个词项在文档集合中的出现频率)从高到低排序
2、手工选择语义内容与文档主题关系不大的高频词作为停用词
词项归一化
词条归一化就是将看起来不完全一致的多个词条归纳成一个等价类,以便在他们之间进行匹配。例如:在文档和查询中,都把词条anti-discriminatory和antidiscriminatory映射成词项antidiscriminatory,这样对两个词中的人一个进行检索,都会返回包含其中任一词的文档。
词干还原和词形归并
词干还原和词形归并的目的是为了减少词的屈折变化形式,并且有时会将派生词转换为基本形式,例如:
am, are, is ==> be
car, cars, car's, cars' ==> car
词干还原通常指的是一个很粗略的去除单词两端词缀的启发式过程,并且希望大部分时间都能达到正确目的。例如:词条saw, 词干还原可能仅返回s。词干还原算法有Porter算法,Lovins算法等。
词形归并通常指的是利用词汇表和词形分析来去除屈折词缀,从而返回词的圆形或者词典中的词的过程。返回的结果叫做词元。例如:词条saw,词形归并返回see或者saw。
二元词索引
处理短语查询的一个办法就是将文档中的每个接续词对看成一个短语,例如:Friends,Romans,Countryman会产生如下的二元接续词对:
friends romans
romans countryman
按照该方法,查询standford university palo alto 将分成如下的布尔查询:
“standford university” AND “university palo” AND “palo alto”。 建立二元词索引的方法:
1、对文本进行词条化
2、对词条进行词性标注
3、将每个词标注为 名词(N), 虚词(X)
4、将形式为NX*N非词项序列看成一个扩展的二元词
位置信息索引
二元词索引并非短语查询的标准方案,实际中用的更多的是位置信息索引,例如:
to, 993427
<1,6:(7, 18, 33, 72, 86, 231)
2,5:(1, 17, 74, 222, 255),
4,5:(8, 16, 190, 429, 433),
5,2:(363, 367),
7,3:(13, 23, 191)>
be, 178239
<1,2:(17, 25)
4,5:(17, 191, 291, 430, 434),
5,3:(14, 19, 101)>
注:单词to的文档频率是993427, 在文档1中出现了6次,位置分别是:7, 18, 33, 72, 86, 231
为处理短语查询, 仍然需要访问各个词项的倒排记录表。这里不是简单地判断两个词项是否出现在同一个文档中,而且还要检查他们的出现位置关系与查询当中的位置关系是否一致。
短语查询请求中的应答处理:假定to和be的倒排记录表已知,某个查询为to be or not to be,需要访问如下词的倒排记录表:to、be、or和not。考虑to 和be的倒排记录表合并:
1、查找同时包含这两个词项的文档
2、检查文档中的位置看是否存在讴歌be的前面的一个词条位置商正好出现to
3、可能返回的一个匹配为:
to: <...; 4: <..., 429433>;...>
be: <...; 4: <..., 430434>;...>
缺点:
1、会大大增加倒排记录表达额存储空间
2、提高倒排记录表合并操作的渐进复杂度