-
Notifications
You must be signed in to change notification settings - Fork 0
sleepsort/se
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
#!/usr/bin/env vim
将位置信息与模糊查询等功能暂时去掉, 可在Gov2下完成索引与检索(索引大小12G)
IndexSearcher初始化占用内存5.3G,但是,搜高频词时需要足够大的内存
(包括虚拟内存至少8G空闲空间)
测试时,用BM25 (k=1.2, b=0.4), 对于idf评分为负的query不作考虑,对每个topic
取前10,000篇相关文档输出,打分的结果如下(详细结果在log文件夹下):
TREC 04:
R-prec 0.3287
map 0.2818
P5 0.5469
P10 0.5469
TREC 05:
R-prec 0.3512
map 0.3178
P5 0.5400
P10 0.5440
TREC 06:
R-prec 0.3125
map 0.2653
P5 0.5360
P10 0.4900
TREC 04~06:
R-prec 0.3308
map 0.2883
P5 0.5409
P10 0.5268
snippet的生成策略是:长度最多为80字符,头尾的词都必须完整,优先输出覆盖最多查询串字符的片段,
(但这样当query含有高频词时,snippet会输出更多高频词而把低频query漏掉)
结果如下(命令行下有染色处理):
query = (peking | university)
BM25: numhit = 2848432
[19003836] 23.656693 GX075-12-12551435 (718)
... Jian Dai , Xing-Chang Song (Peking University) Comments: LaTeX 5 pages,...
[19183958] 23.656693 GX075-12-4179505 (718)
... Jian Dai , Xing-Chang Song (Peking University) Comments: LaTeX 5 pages,...
[20943851] 23.383717 GX180-06-12915650 (1985)
...Lee , H.G. Wang , R.X. Xu (Peking University, Beijing, China) Comments: 5...
[ 1036750] 22.956249 GX171-89-10767512 (901)
... Jian Dai , Xing-Chang Song (Peking University) Comments: LaTeX, 15 pages,...
[ 443665] 22.733286 GX088-41-11788847 (138)
...F. Zhu (Peking University) WPAH312 Research on Peking University ...
... (result trucated)
================================
GOV2数据信息:
文档个数: 25205179
stem后词项个数: 10475630
平均文档长度: 758.61
索引信息:
倒排表大小(无距离): 12GB
================================
RCV1数据信息:
文档个数: 806791
词项个数: 438488
stem后词项个数: 371521
平均文档长度: 261.19 (#ttf=210728333)
平均词项长度: 8.42 (#permuterm=3691287)
索引信息:
词典大小: 7.1MB
倒排表大小(带距离): 2.4GB
压缩后大小(带距离): 889MB
permutree大小: 219MB
* 倒排表结构: 三级倒排
词项id => <词项id,文件指针> => <文档id,文件指针> => 距离信息
pst.dat.trm pst.dat.doc pst.dat.pos
压缩用Variable Byte + D-gap操作。压缩的数列包括: 文档id、文件指针、词项位置。
* permuterm tree : B+树
非叶结点存储部分key值,用于多分查找;
叶结点存储包括非叶结点出现的所有key值。
同一层上的相邻叶结点之间用一个单向链串起来,方便区间搜。
此处,key的结构为 <轮转字符串, 词项id>。
这样,查找wildcard时,通过B+树上的ranged query功能收集到所有命中的
key,将词项id取出来,并把query语法树上的wildcard query结构转变成or query
的结构。如:
AND AND
/ \ => / \
tropi*al fish OR fish
/ \
tropival tropical
* 词典 : Hashmap
term_id => <term_string, document_frequency, corpus_frequency>
doc_id => <doc_filename, doc_length>
================================
项目结构
assign-x-yyy
│
├── data -> ../data # 数据文件, 放在项目的上层目录
├── log -> ../log # 评分结果
├── lib # 静态库文件
├── script # 处理脚本或测试脚本
├── src # 源文件
│ ├── index
│ ├── main
│ ├── query
│ ├── search
│ ├── template
│ └── util
├── src # TREC评测脚本与结果
└── test # 测试信息
-------
data
│
├── gov2 # GOV2的解压数据,均为天网格式
├── reuter # RCV1的解压文件,均为xml格式
├── shakespeare # 前期作业的数据文件
│
├── index # 程序建立的索引文件
└── reuter-zip # RCV1的初解压文件,为zip格式,可用script中的脚本处理
├── disk1
└── disk2
================================
测试/开发环境:
系统环境(包括项目编译环境与引用静态库的制作环境):
ArchLinux (i686) g++ 4.7.2 glibc 2.17
Ubuntu (x86_64) g++ 4.4.3 glibc 2.11.1
用到的外部代码:
lib/lib*porter.a: Jamie Callan 的 Porter Stemmer,已打包
lib/lib*pugixml.a: Arseny Kapoulkine 的 pugixml库,已打包
makefile自带64位与32位检测,若出问题,
可更改src/Makefile中的$(LIB)进行调整
================================
运行方式:
make clean
make clean-trec
make # 编译
make init-trec # 解包
make idx-small # 根据shakespeare数据集重建索引(会抹掉原有索引)
make idx-medium # 根据reuter数据集重建索引(会抹掉原有索引)
make idx-large # 根据gov2数据集重建索引(会抹掉原有索引)
make rnk < test/ranking # 文档打分测试
make smr < test/ranking # snippet单独测试(不打分)
make eval-04 # 用trec04的topics.701-750
make eval-05 # 用trec05的topics.751-800
make eval-06 # 用trec06的topics.801-850
make eval-all # 用trec06的topics.701-850
make view-all # 查看打分结果
About
Toy search engine, developed to run on large dataset like gov2
Resources
Stars
Watchers
Forks
Packages 0
No packages published