InformationRetrieval

选修课信息检索的课程设计

1、程序题目

试按 tf-idf 在剔除一些常用词后给出文本中术语的统计算法和程序,并按降序进行排序算法思路

2、算法思路

Tf计算 tf是term frequency的缩写,指文本中的词频。衡量一个词语在文档中的出现频率有很多方法,最简单也足够有效的,便是直接计算这个词出现的次数,来作为这个词的tf值

idf计算 idf是inverse document frequency的缩写,指“逆文档频率”,是一个用来衡量一个词常见程度的值。这个值的计算不应该基于单个文档,而应该考虑所有要进行分析的文档,来得出结果,idf值的计算方法也有很多,本算法采用一个常见的公式:log 语料库文档总数/(包含该词的文档数+1)

3、代码实现

文档读取与分词 首先根据设定的filePath找到该路径下所有文档,将其文档信息存入docIndex.txt文本文件中,再依次读取文本,使用java封装好的正则匹配功能将文档中的单词读出,存入map数据结构中,记录单词总数和每个单词出现的次数。

使用map数据结构保存单词及其对应的tf-idf值 在读取文档时将各个文档中的单词分别存入set集合中,达到同种单词只记录一遍的目的,方便后面计算idf的操作。

Map排序实现 由于每个单词为Map结构中的key值,对应的tf-idf值为其对应的value值,因而不能使用默认的map排序功能,本程序所采用的方法是重写camparator函数,将Map转为List后进行排序

2、程序题目

试编制首先对文档建立inverted file,然后进行检索的算法和程序

算法思路: 为方便索引,在单词位置(position)和单词(word)之间建立索引。常规索引是指通过位置找到相应的单词,倒排索引则是反过来,通过单词获取位置。 算法思路:读取文档,利用正则匹配进行分词,如果当前的单词在整个统计过程中首次出现,新建map项,记录单词与当前文档ID号和当前文档的位置(即当前读到第几个单词),若当前单词在统计中已经出现,则查看单词是否在当前文档中出现,若未出现,新建文档号和位置集合记录,若已经出现,在文档号对应的Set集合中加入当前位置。