信息检索技术 全文检索 倒排索引

目录

概述

搜索方法

顺序扫描法

索引与全文检索

全文检索原理

比较两种方法

如何创建索引


概述

全文检索主要对非结构化数据的数据检索。非结构化数据另外一种叫法叫:全文数据

搜索方法

顺序扫描法

顺序扫描法:比如要找内容包含某一个字符串的文件,就是一个文档一个文档的看,对于每一个文档,从头看到尾,如果此文档包含此字符串,则此文档为我们要找的文件,接着看下一个文件,直到扫描完所有的文件。

适用场景:小数据量的文件,结构化数据

索引与全文检索

索引:从非结构化数据中提取出的然后重新组织的信息。eg:字典的拼音表和部首检字表就相当于字典的索引

全文检索:先建立索引,再对索引进行搜索的过程

全文检索原理

全文检索大体分两个过程,创建索引(Indexing)搜索索引(Search)

索引创建:将现实世界中所有的结构化和非结构化数据提取信息,创建索引的过程。

搜索索引:就是得到用户的查询请求,搜索创建的索引,然后返回结果的过程。

正向索引:已知文件,欲检索数据,这是建立文件——数据的映射,称为正向索引,比如下

信息检索技术 全文检索 倒排索引_第1张图片

反向索引:已知数据,欲检索文件,这是建立:数据——文件的映射,称为反向索引,又称倒排索引

信息检索技术 全文检索 倒排索引_第2张图片

左边保存的是一系列字符数据,称为词典。每个字符串都指向包含此字符串的文档(Document)链表,此文档链表称为倒排表(Posting List)。

比较两种方法

全文检索的确加快了搜索的速度,但是多了索引的过程,两者加起来不一定比顺序扫描快多少。尤其是在数据量小的时候更是如此。并且对一个很大量的数据创建索引也是一个很慢的过程。

 顺序扫描是每次都要扫描,而创建索引的过程仅仅需要一次,以后便是一劳永逸的了,每次搜索,创建索引的过程不必经过,仅仅搜索创建好的索引就可以了。

这也是全文搜索相对于顺序扫描的优势之一:一次索引,多次使用。

如何创建索引

全文检索的索引创建过程一般有以下几步:

1.第一步:准备一些需要创建索引的原文档(Document)

2.第二步:将原文档传给分词组件(Tokenizer)

分词组件(Tokenizer)会做以下几件事情(此过程称为Tokenize):

1. 将文档分成一个一个单独的单词。2. 去除标点符号  3. 去除停词(Stop word)。

所谓停词(Stop word)就是一种语言中最普通的一些单词,由于没有特别的意义,因而大多数情况下不能成为搜索的关键词,因而创建索引时,这种词会被去掉而减少索引的大小。英语中停词(Stop word)如:“the”,“a”,“this”等。对于每一种语言的分词组件(Tokenizer),都有一个停词(stop word)集合。

经过分词(Tokenizer)后得到的结果称为词元(Token)

3.第三步:将得到的词元(Token)传给语言处理组件(Linguistic Processor)

对于英语,语言处理组件(Linguistic Processor)一般做以下几点:

1. 变为小写(Lowercase)。

2. 将单词缩减为词根形式,如“cars”到“car”等。这种操作称为:stemming。

3. 将单词转变为词根形式,如“drove”到“drive”等。这种操作称为:lemmatization。

补充:语言处理组件(linguistic processor)的结果称为词(Term)

4.第四步:将得到的词(Term)传给索引组件(Indexer)

索引组件(Indexer)主要做以下几件事情:

4.1. 利用得到的词(Term)创建一个字典。

4.2 对字典按字母顺序进行排序。

4.3 合并相同的词(Term)成为文档倒排(Posting List)链表。

信息检索技术 全文检索 倒排索引_第3张图片

 

Document Frequency 即文档频次,表示总共有多少文件包含此词(Term)。

Frequency 即词频率,表示此文件中包含了几个此词(Term)。

解析图

用词(Term) “allow”来讲,总共有两篇文档包含此词(Term),从而词(Term)后面的文档链表总共有两项,第一项表示包含“allow”的第一篇文档,即1号文档,此文档中,“allow”出现了2次,第二项表示包含“allow”的第二个文档,是2号文档,此文档中,“allow”出现了1次。到此为止,索引已经创建好了,我们可以通过它很快的找到我们想要的文档。 


如果您看到了最后,请点个赞,鼓励一下

你可能感兴趣的:(算法)