文本检索技术

本章先简略的介绍一下文本检索技术的基本组成,然后开始谈论文本检索的每个细节。

文本检索,也被称为全文检索( full text search)。文本检索技术是根据一段输入的文本,找出文本集合中最匹配的一些文本。目前,文本检索技术已经发展到针对一个文档的多个文本属性来进行检索,即可以指定在某些属性里面检索。

常见的如百度的高级搜索,可以指定关键词仅仅出现在标题里面(默认是可以出现在标题/内容/url 里面的)。

下图展示了一个基本的文本检索的流程:

信息检索被划分为2 部分,左边的一部分是信息处理的过程;右边的一部分是信息查询的过程。下面用一个实际例子说明信息处理的过程:

  1. 得到一个文本,内容为:“按照国家相关法规规定,未成年人将在游戏中受到一定的限制。”。

  2. 现在对文本进行分词(因为文本检索技术是针对词语的检索),假设得到的结果为:按照、国家、相关、法规、规定、未成年人、将、在、游戏、中、受到、一定、的、限制;

  3. 接着对词语进行索引化,比如,某些词语不能给用户检索等。假设我们得到的可以进行索引的词语为:国家、相关、法规、规定、未成年人、限制;

  4. 对词语构建索引,6 个词语,构建出6 条索引,每个词语对应一条(即倒排索引(Inverted Index ))。每条索引都是由词语和包含本词语的文本列表组成。把6 条索引合并到原来的索引里面。这样,我们就把文本数据索引化,并且保存到了持久层(磁盘或者内存或者其他任何可以再次读取的介质);

以上是一个文本处理的过程,在处理多个文本之后,我们可能得到一个倒排索引集合,其中部分倒排索引如下:

国家:{1,3,6,8,11,20}
北京:{3,7,9,15,16,17}
法规:{1,6,8,11}
人民:{5,6,7,9,20}

以第一条倒排索引为例,它说的是,“国家”这个词语出现在了第1,3,6,8,11,20 这6 个文本里面。

上面已经对信息处理完毕,现在看看信息查询部分的过程:

  1. 用户查询:“北京人民”;

  2. 把用户的查询解析为:“北京” AND “人民”。即认为用户想找既出现了“北京”又出现了“人民”的文本集合;

  3. 接着根据解析得到的结果来检索。根据已有的倒排索引,得到需要的2条倒排索引:

北京:{3,7,9,15,16,17}
人民:{5,6,7,9,20}

对比这2 条索引,可以看到,出现了这2 个词语的文本是第7,9 这2 个文本。

  1. 得到用户需要的文本之后,返回文本给用户;