全文检索理论补习之索引部分

首先,数据分两种:结构化数据非结构化数据

 

结构化数据如数据库数据非结构化数据如邮件,word文档

非结构化数据的另一种叫法是全文数据

当然还有一种分类为半结构化数据:如html和xml数据;半结构化数据可以根据需要按照结构化数据来处理,也可以按照非结构化数据来处理

 

结构化数据本来就是按照一定的规则来组织的数据,不用多说;关键的问题就在于非结构化数据即全文数据的搜索上。

 

全文数据的搜索主要有两种: 1.顺序扫描法 2.全文检索法

1.顺序扫描法在NT系统里面就有体现,windows当中的搜索功能就有搜索文件,或者搜索文件内容的选项;如果是按照搜索文件当中的内容时,那么windows就会顺序扫描计算机当中的每一个文件,去查找包含指定内容的文件。不用多说,会非常慢。

2.全文检索接触过数据库之后,针对数据库当中的结构化数据的搜索速度是很快的,而将非结构化的数据转换成结构化的数据,然后再进行搜索,这就是全文检索的基本思路了。

这也就是说,全文检索分为两步,首先将非结构化的数据整理成结构化的----建立索引的过程

然后对结构化的数据搜索的过程------对索引进行搜索的过程

总结:这种先建立索引,然后再对索引进行搜索的过程叫做全文检索

1.索引创建:

首先,索引里面究竟存些什么?

想这个问题的时候,想一下顺序搜索:非结构化数据中所存储的是每个文件都包含哪些字符串,即已知文件欲求字符串相对容易,也即是文件到字符串的映射。而NT系统下的搜索是已知字符串,去搜索文件,即字符串到文件的映射。这就相对困难了。因为基础是文件到字符串的映射,而搜索的时候倒过来从字符串去映射文件。所以,如何在文件到字符串映射的基础上,保存文件到字符串的映射关系,那么搜索的时候就相对简单了。

总结:由于文件到字符串的映射是字符串到文件的映射的反向过程,因此这种索引被称作反向索引

大致存储结构如下:字符串----文档列表

此处的字符串称为字典,文档列表称为倒排表

 

term
term是搜索的最小单位,它表示文档的一个词语,term由两部分组成:它表示的词语和这个词语所出现的field。

 

tocken
tocken是term的一次出现,它包含trem文本和相应的起止偏移,以及一个类型字符串。一句话中可以出现多次相同的词语,它们都用同一个term表示,但是用不同的tocken,每个tocken标记该词语出现的地方。

 

其次,如何创建索引?

1.首先是拿到文档 2.将文档传给分词组件(Tokenizer) 分词组件会做如下事情:

2.1将文档分成一个一个单独的单词

2.2去除标点符号

2.3去除停词

3.将得到的单词或者说是词元传给语言处理组件,对于英语,语言处理组件一般做以下几点:

3.1变为小写

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

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

两者的异同:

相同之处:两者都要使词汇成为词根形式。

不同之处: stemming采用的是缩减的方式:cars到car,driving到drive

lemmatization采用的是转变的方式:drove到drive,driving到drive。

算法不同: stemming主要是采取某种固定的算法来做这种缩减,如去除s,去除ing加e,将ational变为ate,将tional变为tion

lemmatization主要是采用保存某种字典的方式做这种转变。比如字典中有driving道drive,drove到drive,am、is、are到be的映射,做转变时,只要查字典就可以了。

总结: stemming和lemmatization不是互斥关系,是有交集的,有的词利用这两种方式都能达到相同的转换。

4.将得到的词传给索引组件indexer

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

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

4.3合并相同的词(Term)成为文档倒排(Posting List)链表形成文档倒排链表的过程中,有两个定义:(注意这两个定义)

 

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

词频率(tf)Frequency,表示此文件中包含了多少个此词

 

总结:从理论上来讲,拿到原始数据,然后传给分词组件,先将文档经过分词组件的分析,然后经过语言处理组件,最后就到了分词组件,最关键的应该是分词组件部分。这一部分可以单独研究一下

 

最后,如何对索引进行搜索?

1.用户输入查询语句

2.对查询语句进行词法分析,语法分析,语言处理。

词法分析主要用来识别单词和关键字;比如用户输入“lucene and lerned not hadoop”,

经过词法分析得到的单词有:lucene,learned,hadoop,关键字有and,not。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值