课程概要
- 布尔查询
- 词项分割与去停用词
- 倒排索引的构建与词典
- 输入纠错与编辑距离
- 索引压缩
- 向量空间模型与tf-idf权重计算
- 检索系统的评价
- 检索模型的介绍
- Web采集与链接分析
课程设计
任务内容
Part 1:
基本要求:构建词典和倒排索引
- 实现 Single-pass In-memory Indexing
- 实现倒排索引的 Gamma 编码压缩 / 解压
- 实现词典的单一字符串形式压缩 / 解压,任意数据结构(如哈希表、 B 树等)
- 实现关键字的查找,命令行中 Print 给定关键字的倒排记录表
- 给出以下语料统计量:词项数量,文档数量,词条数量,文档平均长度(词条数量)
- 对停用词去除、词干还原等无要求,但应实现最基本的词条化功能 例如:将所有非字母和非数字字符转换为空格,不考虑纯数字词项
Test Data
解压命令: tar zxvf shakespear-merchant.trec.tgz
Part 2:
采用类似 TREC 竞赛的形式
- 以小组形式在给定数据上进行实验
- 鼓励创新思维
– 评分:综合考虑实验结果和使用的新方法、提出的新思路
任务设计思路
第一部分是对我们课上学习内容的实现,通过实现任务一,对于加深对课程学习的立即是很有帮助的
主要涉及:
- 词项归一化(选择哪种归一化方法?)与去停用词(哪些是停用词?)和词条化
- 字符串压缩与解码
- 倒排索引的构建
- 语料的读取与分词
- 统计分析词项数量与文档数量、文档长度(词条数目),词条数量
第二部分是research能力与开发能力并重的,可以使用开源软件提升检索能力,也可以自己实现检索器
实现
It’s preferred to use Python and with python package unittest for unit test to imply the part one while C++ implement is optional.
关于TREC数据集合构建索引查询分析的实验
调研
开源搜索引擎
参考博文
简要介绍
-
ht://Dig, 提供一组工具可以索引和搜索一个站点。提供有一个命令行工具和CGI界面来执行搜索。
尽管已经有了更新的版本了, 但是根据项目的网站, 3.1.6版是最快的版本了。 -
IXE Toolkit, 是模块化C++类集合, 有一组工具完成索引和查询。Tiscali(来自意大利)提供有商业版本, 同时提供了一个非商业版本仅用于科学研究。
-
Indri,是基于Lemur的搜索引擎。Lemur是用来研究语言模型和信息检索的工具。这个项目是马萨诸塞大学和CMU的合作项目的产物。
-
Lucene, 是Apache 软件基金会的一个文本搜索引擎库。由于它是一个库,所以很多项目基于这个库,例如Nutch项目。
在目前,它捆绑自带的最简单的应用是索引文档集合。 -
MG4J(管理前兆数据Java语言)是针对大文本集合的一个全文索引工具。由米兰大学开发。他们提供了通用的字符串和位级别的I/O的优化的类库作为副产物。
-
Omega, 基于Xapian的应用。Xapian是开源的统计信息检索库,由C++开 发,但是被移植到了Python Perl php Java Tcl C#等多种语言。
-
IBM Omnifind Yahoo! Edition, 非常适合内网 搜索的搜索软件。 他结合了基于Lucene索引的内网搜索,和利用Yahoo 实现的外网搜索。
-
SWISH-E(简单网页索引系统—增强版), 是开源的索引和检索引擎。是Kevin Hughes 开发的SWISH的增强版。
-
SWISH++是基于SWISH-E的索引和检索工具。尽管经过C++全部重写, 但是 没有实现SWISH-E的全部功能。
-
Terrier(太字节检索), 由苏格兰的格拉斯哥大学开发的,模块化的平台,能够快速的构架互联网,内网,和 桌面的搜索引擎。它附带了索引,查询和评估标准TREC集合的功能。
-
XMLSearch, C++开发的索引和检索的一组类。利用文本操作(相等,前缀,后缀,分段)来扩展了查询能力。 Barcino(来自智利)提供了一个商 业版, 同时也有个供学术研究的非商业版。
-
Ze