2.2生成索引
Lemur Toolkit建立对XML文档建立索引的过程,和其它检索系统很相似,主要分为文档的解析,去除stopword和取词根,统计tf,存入硬盘。过程如图一所示。
这部分是把XML文档拆分成对应的单词和元素结点的集合,生成的结构体为TokenizedDocument。其中单词是存在向量terms中,对应的位置是通过在XML文档的偏移量表示的,存储于结构体TermExtent中,元素结点的位置是通过位于元素结点前的单词的数量表示的,存储于结构体TagEvent中。
如对于下面的文档一;元素结点的begin和end值由表一表示。
文档一
<note>
<to>Tove</to> 表一
元素结点 | begin | end |
note | 0 | 8 |
to | 0 | 1 |
from | 1 | 2 |
title | 2 | 3 |
body | 3 | 8 |
<from>Jani</from>
<title>Reminder</title>
<body>
Don't forget me this weekend!
</body>
</note>
这部分主要是对上步中的TokenizedDocument中的元素结点集合,统计元素结点之间的父子关系。这种父子关系是存在结构体TagExtern中parent字段的。并将一个元素结点的开始和结束部分合并成。如对于文档一中的<note>和</note>,在TokenizedDocument中只保留一个元素结点note,而不是分别保留<note>和</note>两个元素结点。
这一部分,主要对ParsedDocument中的单词进行一些附加操作,如表二所示,主是是去掉没用的符号,转换编码,去掉stopword,取词根等操作。
表二
URLTextAnnotator | URL重写,以方便保存 |
NormalizationTransformation | 去掉标点符号 |
UTF8CaseNormalizationTransformation | 统一字符编码,转换为UTF8 |
StopperTransformation | 去掉如a,an,the,等stopword |
StemmerTransformation | 把单词转化成对应的词根 |
Memory Index是要检索的XML文档的汇总,如图二所示。主要包括四部分信息:全局统计信息、单词的信息,元素结点的信息,XML文档的信息。全局统计信息主要包括已统计的XML文档的编号的最小值,目前正在使用的编号值,已统计的文档总数,XML文档集中不重复的单词的个数等;单词的信息包括单词的内容,分配的编号,单词所在的文档,单词在所有的文档的出现的次数,单词在指定的元素结点中的个数等;元素结点的信息主要包括元素结点的名字,元素结点的类型,元素结点的数量,包含该元素结点的XML文档的数量等;XML文档的信息主要包括文档编号,文档长度,文档中不重复的单词的个数,文档的偏移位置等。