倒排索引是信息检索的重要一环。在这个模块中,主要包含四个关键步骤:从 json 文件中提取新闻内容、新闻内容切词、统计词频和文档频率、计算 tf-idf 权重。

python faiss 构建检索库查询 python信息检索搜索引擎_权重

4.1 文档切词

在常见的中文分词工具中,IKAnalyzer 分词器常用,效果好,方便拓展,受到了很多好评。因此,在我们的方案中,选用了 IKAnalyzer 分词器。IKAnalyzer 是一个开源的,基于 java 语言开发的轻量级的中文分词工具包。从 2006年 12 月推出 1.0 版开始, IKAnalyzer 已经推出了 4 个大版本。

分词效果示例:

IK Analyzer 2012 版本支持 细粒度切分 和 智能切分,以下是两种切分方式的演示样例。

文本原文 1:

IKAnalyzer 是一个开源的,基于 java 语言开发的轻量级的中文分词工具包。从 2006年 12 月推出 1.0 版开始, IKAnalyzer 已经推出了 3 个大版本。

智能分词结果:

ikanalyzer |是|一个|开源|的|基于|java|语言| 开发 | 的 | 轻量级 | 的 | 中文 | 分词 | 工具包 | 从 | 2006年 | 12月 | 推出 | 1.0版 | 开始 | ikanalyzer | 已经 | 推| 出了 | 3个 | 大 | 版本

最细粒度分词结果:

ikanalyzer | 是 | 一个 | 一 | 个 | 开源 | 的 | 基于 | java | 语言 | 开发 | 的 | 轻量级|的 | 中文 | 分词 | 工具包 | 工具 | 包 | 从 | 2006 | 年 | 12 | 月 | 推出 | 1.0 |版 | 开始 |ikanalyzer | 已经 | 推出 | 出了 | 3 | 个 | 大 | 版本。

安装部署方法:它 的 安 装 部 署 十 分 简 单 , 将 IKAnalyzer2012.jar 部 署 于项目的 lib 目录中 ;IKAnalyzer.cfg.xml 与 stopword.dic 文件放置 class 根目录(对于 web项目,通常是 WEB-INF/classes 目录,同 hibernate、log4j 等配置文件相同)下即可。

主要流程:将上一步提取的新闻主体的 txt 文档,全部遍历切词,将切词结果保存中本地中。

4.2倒排索引构建流程

在本题目中,要求是 10W 篇文档,数据量不是太大。因此,我们采用基于内存的索引构建方式,将索引构建的过程全部放入内存中进行统计,单次扫描,单次统计出结果,构建出索引。

主要流程:将上一步中分词的 10W 篇文档,全部遍历。在循环中,我们统计文档中每个词项出现的位置和次数,以及在 10W 篇文档中的总次数。在具体实现中,我们用两个HashMap 来保存结果,HashMap 用词项做键,文档名、文档位置及其他属性为值(中间用特殊符号分割开),一个用于统计每篇文档的情况,一个统计所有文档的情况。

python faiss 构建检索库查询 python信息检索搜索引擎_python信息检索搜索引擎_02

4.3 计算td-idf权重

信息检索领域最出名的权重计算方法,tf-idf 权重计算公式:

python faiss 构建检索库查询 python信息检索搜索引擎_权重_03

其中,dft 是出现词项 t 的文档数目成为逆文档频率,tft,d 是指 t 在 d 中出现的次数,是与文档相关的一个量,成为词项频率。随着词项频率的增大而增大,随着词项罕见度的增加而增大。

python faiss 构建检索库查询 python信息检索搜索引擎_analyzer_04