第2章 词项词汇和倒排记录表
回顾建立倒排索引的主要步骤:
1.收集要索引的文档。
2.词条化文本。
3.对词条进行语言预处理,生成标准化词条。
4.建立倒排索引,索引每个词项出现的文档。
2.1文档描述和字符序列解码
1.在文档中获取字符序列
文档处理第一步:将文档中的字节序列转换成字符的线性序列
(1)确定编码方案(可看作机器学习分类的问题,但通常通过启发式方法、用户选择或使用提供的文档元数据处理)
(2)确定文档格式(通常通过授权一个处理解码文档格式和字符编码的软件库解决)
*文本本质上是线性结构,字符的概念上的线性顺序并不一定是在页面上看到的顺序,使用现代的Unicode表示概念,文件中的字符顺序与概念顺序相匹配,而显示字符的反转是由呈现系统处理。
2.选择文档单位
索引粒度:假设文档是用于索引的固定单位,有时可能想要将文件所包含的每个文件作为单独的文档进行处理(Unix中),有时可能想要将多个文件合并到单个文档中(Web中),由此引出索引粒度问题。
精度/返回的权衡:如果单位太小,很可能会错过重要的段落,因为词项是在几个小文档上分布的;如果单位太大,倾向于得到虚假的匹配,相关信息很难被发现
*大型文档单位的问题可以通过使用显式或隐式近距离搜索来缓解。
2.2决定词项的词汇
1.词条化
·词条化:给定一个字符序列和一个已定义的文档单位,词条化是将其分割成子序列的过程,这些子序列称为词条,可能同时会丢弃某些字符,比如标点符号。
·词条:是某些特定文档中一系列字符的一个实例,这些字符被分组以作为一个有用的语义单元进行处理。
·类型:是包含相同字符序列的所有词条词项的类。
·词项:是一个(可能是规范化的)类型,它包含在IR系统的字典中。
简单的策略是在所有非字母数字字符上进行分割,而实际的词条化处理时复杂的:
(1)词条化的问题是特定于语言的,大多数语言都有独特的标记模式,如编程语言c++和c#等。
(2)连字符(hyphenation),如co-education和hold-him-back-and-drag-him-away,自动处理连字符可能是复杂的,既可以作为分类问题处理,也可以通过一些启发式规则处理。
(3)空白区域上的分割,如York University 的搜索会返回包含New York Universty的文档,即在空格上分割词条化导致糟糕的检索结果。
(4)不同种语言问题