Solr55搜索引擎之分词原理说明.docx

上传人:b****5 文档编号:7648570 上传时间:2023-01-25 格式:DOCX 页数:12 大小:144.43KB
下载 相关 举报
Solr55搜索引擎之分词原理说明.docx_第1页
第1页 / 共12页
Solr55搜索引擎之分词原理说明.docx_第2页
第2页 / 共12页
Solr55搜索引擎之分词原理说明.docx_第3页
第3页 / 共12页
Solr55搜索引擎之分词原理说明.docx_第4页
第4页 / 共12页
Solr55搜索引擎之分词原理说明.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

Solr55搜索引擎之分词原理说明.docx

《Solr55搜索引擎之分词原理说明.docx》由会员分享,可在线阅读,更多相关《Solr55搜索引擎之分词原理说明.docx(12页珍藏版)》请在冰豆网上搜索。

Solr55搜索引擎之分词原理说明.docx

Solr55搜索引擎之分词原理说明

Solr5.5搜索引擎之分词原理说明

1.中文分词

1.1概念

众所周知,英文是以词为单位的,词和词之间是靠空格隔开,而中文时以字为单位,句子中所有的字连起来才能描述一个意思。

例如,英文句子Iamastudent,用中文则为:

“我是一个学生”。

计算机可以很简单通过空格知道student是一个单词,但是不能很容易明白“学”,“生”两个字合起来才表示一个词。

把中文的汉字序列切分成有意义的词,就是中文分词,有些人也称为切词。

“我是一个学生”的分词结果是:

“我是一个学生”。

摘自http:

//www.williamlong.info/archives/333.html

1.2应用

目前在自然语言处理技术中,中文处理技术比西文处理技术要落后很大一段距离,很多西文的处理方法对中文不能直接采用,就是因为中文必须有分词这道工序。

中文分词是其他中文信息处理的基础,搜索引擎只是中文分词的一个应用。

其他的比如机器翻译(MT)、语音合成、自动分类、自动摘要、自动校对等等,都需要用到分词。

因为中文需要分词,可能会影响一些研究,但同时也为一些企业带来机会,因为国外的计算机处理技术要想进入中国市场,首先也要解决中文分词问题。

分词准确性对搜索引擎来说十分重要,但如果分词速度太慢,即使准确性再高,对于搜索引擎来说也是不可用的,因为搜索引擎需要处理数以亿计的网页,如果分词耗用的时间过长,会严重影响搜索引擎内容更新的速度。

因此对于搜索引擎来说,分词的准确性和速度,二者都需要达到很高的要求。

2.搜索引擎和中文分词

2.1搜索引擎的工作原理

摘自:

搜索引擎为什么能快速检索到自己查询的关键字呢?

实际上得益于它的数据存储机制“倒排索引”,这里用一个例子来大体说明什么是倒排索引。

假设我有10篇文章,它们可能论述了相同或不同的主题。

如果我想看看哪篇文章中含有“中文分词”这个词语,我可以循环遍历每篇文章,看看他的内容中有没有含有“中文分词”这个词语,然后把含有目标词语的文章返回。

很显然,我需要打开10篇文章,并且从头到尾的遍历每篇文章,看能否匹配到“中文分词”,这样的效率是很低的,对于毫秒级的搜索引擎来说是绝对不能接受的。

所以我给每篇文章做个“目录”,事先找到含有“中文分词”的文章,假设文章1,3,5,7含有这个词语,文章2,4,6,7含有“搜索引擎”,我建立一个对应关系表:

词语

文章编号

“中文分词”

1,3,5,7

“搜索引擎”

2,4,6,7

于是当我要检索“中文分词”这个词语的时候,我不再打开每篇文章去匹配,而是直接在对应关系表看一下“中文分词”对应着文章1,3,5,7。

结果是文章1,3,5,7中含有“中文分词”,同样检索“搜索引擎”,直接返回的结果是2,4,6,7。

如果我要同时检索“中文分词”和“搜索引擎”,结果是(1,3,5,7)和(2,4,6,7)取交集。

结果是文章7同时包含“中文分词”和“搜索引擎”。

这个对应关系表就是所谓的倒排索引。

当然倒排索引可能包含的信息更为丰富,比如不仅包含词语在哪一篇文章,同时还包含了在这篇文章的哪个位置等。

生产环境中需要把所有文章都建立一个倒排索引。

创建倒排索引的前提是:

搜索引擎怎么认识句子中哪些是词语呢?

它不知道“中文分词”是一个词语。

这个工作由中文分词器来完成,分词器在创建索引过程和用户查询过程都会被使用到。

2.2搜索引擎和数据库区别

为什么搜索引擎无法被数据库所替代的原因主要有两点:

一个是在数据量比较大的时候,搜索引擎的查询速度快,第二点在于,搜索引擎能做到比数据库更理解用户。

第一点好理解,每当数据库的单个表大了,就是一件头疼的事,还有在较大数据量级的情况下,你让数据库去做模糊查询,那也是一件比较吃力的事(当然前缀匹配会好得多),设计上就应当避免。

关于第二点,搜索引擎如何理解用户,肯定不是简单的靠匹配,这里面可以加入很多的处理,甚至加入各种自然语言处理的高级技术,而比较通用且基本的方法就是靠分词器来完成,而且这是一种比较简单而且高效的处理方法。

3.中文分词类型

分词技术现今非常成熟了,分为3中技术

3.1基于词典的字符串匹配的分词方法

按照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行匹配,若在词典中找到某个字符串,则匹配成功(识别出一个词)。

范例:

检索“山东经济学院”时,首先检查“山”是否在词典中,再检查“山东”是否在词典中,然后查“山东经济”是否在词典中,以此类推。

按照扫描方向不同,串匹配又分为正向匹配和逆向匹配;

按照不同长度优先匹配的情况,可分为最长(最大)匹配和最短(最小)匹配;

按照是否与词性标注过程相结合,可分为单纯分词和分词与标注相结合的一体化方法;

常见的匹配方法包括:

正向最大匹配、逆向最大匹配、最短路径最大匹配

3.1.1正向最大匹配

假设词典里包含以下词:

“研究”、“研究生”、“生命”、“起源”

对“研究生命起源”进行分词。

匹配起点选择次数

子匹配次数

备选词

词典是否存在

分词结果

长度最大匹配结果

分析匹配结果

1

1

研究生

“研究生_命_起源”

明显语义错误。

说明本方法在用于“研究生命起源”时有误差。

2

研究

研究

3

研究生

研究生

4

研究生命

5

研究生命起

备注:

假设一个词语最大不超过5个字,停止匹配

2

1

(备注:

从“研究生”的下一个词开始)

2

命起

3

命起源

备注:

已延长到句子结尾,停止匹配。

3

1

起源

2

起源

起源

3.1.1逆向最大匹配

假设词典里包含以下词:

“研究”、“研究生”、“生命”、“起源”

对“研究生命起源”进行分词。

匹配起点选择次数

子匹配次数

备选词

词典是否存在

分词结果

长度最大匹配结果

分析匹配结果

1

1

起源

“研究_生命_起源”

明显语义正确。

说明本方法在用于“研究生命起源”时无误差。

2

起源

起源

3

命起源

4

生命起源

5

究生命起源

备注:

假设一个词语最大不超过5个字,停止匹配

2

1

生命

2

生命

生命

3

究生命

4

研究生命

3

1

研究

2

研究

研究

3.2基于统计的分词方法

从形式上看,词是稳定的字的组合,因此在上下文中,相邻的字同时出现的次数越多,就越有可能构成一个词。

因此字与字相邻共现的频率或概率能够较好的反映成词的可信度。

可以对语料中相邻共现的各个字的组合的频度进行统计,计算它们的互现信息。

定义两个字的互现信息,计算两个汉字X、Y的相邻共现概率。

互现信息体现了汉字之间结合关系的紧密程度。

当紧密程度高于某一个阈值时,便可认为此字组可能构成了一个词。

这种方法只需对语料中的字组频度进行统计,不需要切分词典,因而又叫做无词典分词法或统计取词方法。

但这种方法也有一定的局限性,会经常抽出一些共现频度高、但并不是词的常用字组,例如“这一”、“之一”、“有的”、“我的”、“许多的”等,并且对常用词的识别精度差,时空开销大。

实际应用的统计分词系统都要使用一部基本的分词词典(常用词词典)进行串匹配分词,同时使用统计方法识别一些新的词,即将串频统计和串匹配结合起来,既发挥匹配分词切分速度快、效率高的特点,又利用了无词典分词结合上下文识别生词、自动消除歧义的优点。

3.3基于语法的分词方法

这种分词方法是通过让计算机模拟人对句子的理解,达到识别词的效果。

其基本思想就是在分词的同时进行句法、语义分析,利用句法信息和语义信息来处理歧义现象。

它通常包括三个部分:

分词子系统、句法语义子系统、总控部分。

在总控部分的协调下,分词子系统可以获得有关词、句子等的句法和语义信息来对分词歧义进行判断,即它模拟了人对句子的理解过程。

这种分词方法需要使用大量的语言知识和信息。

由于汉语语言知识的笼统、复杂性,难以将各种语言信息组织成机器可直接读取的形式,因此目前基于理解的分词系统还处在试验阶段。

4.中文分词的难题

摘自:

http:

//www.williamlong.info/archives/333.html

有了成熟的分词算法,是否就能容易的解决中文分词的问题呢?

事实远非如此,中文是一种十分复杂的语言,让计算机理解中文语言更是苦难,在中文分词过程中,有两大难题一直没有完全突破。

4.1歧义识别

歧义是指同样的一句话,可能有两种或者更多的切分方法。

4.1.1交叉歧义

例如:

“表面的”这句话,因为“表面”和“面的”都是词,那么这个短语就可以分成“表面|的”和“表|面的”。

这种称为交叉歧义。

例如:

“化妆和服装”可以分为“化妆|和|服装”或者“化妆|和服|装”。

像这种交叉歧义十分常见,由于没有人的知识去理解,计算机很难知道到底哪个方案正确。

4.1.2组合歧义

比交叉歧义更加难处理的是组合歧义,必须根据整个句子来判断。

例如:

在句子“这个门把手坏了”中,“把手”是个词,但在句子“请把手拿开”中,“把手”不是一个词;

例如:

在句子“将军任命了一名中将”中,“中将”是个词,但在句子“产量三年中将增长两倍”中,“中将”不再是词。

这些词计算机无法识别。

4.1.3真歧义

真歧义是给出一句话,由人去判断也不知道哪个应该是词,哪个不应该是词。

例如:

“乒乓球拍卖完了”,可以切分成“乒乓|球拍|卖|完|了”,也可以切分成“乒乓球|拍卖|完|了”,如果没有上下文其他的句子,恐怕谁也不知道“拍卖”在这里算不算一个词。

4.2新词识别

新词,专业术语称为未登录词。

也就是那些在字典中都没有收录过,但有确实能称为词的那些词。

最典型的是人名,人可以很容易理解句子:

“王军虎去广州了”中,“王军虎”是个词,因为是一个人的名字,但要是让计算机去识别就困难了。

如果把“王军虎”作为一个词收录到字典中,全世界有那么多名字,而且每时每刻都有新增的人名,收录这些人名本身就是一项巨大的工程。

即使这项工作可以完成,还是会存在问题,例如:

在句子“王军虎头虎脑的”中,“王军虎”就不能算词。

新词中除了人名外,还有机构、地名、产品名、商标名、简称、省略语等都是很难处理的问题,而且这些又正好是经常使用的词,因此对于搜索引擎来说,分词系统中的新词识别十分重要。

4.IKAnalyzer中文分词器

4.1正向迭代最细粒度切分算法

根据官方说法IK分词器采用“正向迭代最细粒度切分算法”,属于“正向最大匹配法”的变种。

分析它的源代码,可以看到分词工具类IKQueryParser起至关重要的作用,它对搜索关键词采用从最大词到最小词层层迭代检索方式切分。

内部包含两种分词方法:

智能方式和非智能方式。

摘自:

4.1.1细粒度切分(IK的默认方式)

属于“正向”匹配,但并不是仅仅保留最长的词,而是把匹配到的所有词都保留下来了,所以也是“最细粒度切分”。

范例如下:

假设词典里包含以下词:

“研究”、“研究生”、“生命”、“起源”

对“研究生命起源”进行分词。

匹配起点选择次数

子匹配次数

备选词

词典是否存在

分词结果

合并分词结果

1

1

“研究生|研究|命起源”

2

研究

研究

3

研究生

研究生

4

研究生命

5

研究生命起

备注:

假设一个词语最大不超过5个字,停止匹配

2

1

2

生命

生命

3

生命起源

3

1

2

起源

起源

比如搜索词:

“中华人民共和国成立了”,

如果按照默认额细粒度切分,按照下图从上到下的顺序切分,形成树状结构。

最后树的先序遍历结果:

“中华人民共和国|中华人民|中华|华人|人民共和国|共和国|共和|国|成立|立了”就是分词结果。

4.1.1智能切分

IK分词器则会根据内在方法输出一个认为最合理的分词结果,这就涉及到了歧义判断,一般不存在相同词分到不同次元中。

假设词典里包含以下词:

“研究”、“研究生”、“生命”、“起源”。

对“研究生命起源”进行分词,结果是:

“研究|生命|起源”

范例:

原词

智能切分

细粒度切分

故宫博物院

故宫博物院

故宫博物院|故宫|博物院|博物|院|

八达岭长城风景名胜区

八达岭|长城|风景|名胜区|

八达岭|达|岭|长城|风景名胜|风景|名胜区|名胜|区|

4.2分词词典的重要性

智能分词和最细粒度分词。

两种分词方法都是以词库为分词依据。

下面范例说明了,虽然被分词的句子相同,但由于词库不同导致了分词结果的不同。

测试句子

词库内容

智能分词结果

最细力度分词结果

网厅

网厅

网厅

网厅|网|厅|

网厅

网厅

网厅

网厅

网厅

(无内容)

网|厅

网|厅

网厅

网|厅

网|厅

4.3词库配置

IKAnalyzer允许用户自定义三种词库:

扩展词库ext.dic,停用词库stopword.dic和同义词词库。

部署位置在conf目录下,和data-config.xml在相同目录下。

4.3.1配置文件IKAnalyzer.cfg.xml

4.3.1扩展词库

ext.dic格式是无BOM的UTF-8格式,自己修改时可以直接替换成首行空一行的utf8格式文件,每个扩展词占一行。

如下图:

这两个词库需要在IKAnalyzer的自身jar包中配置即可。

4.3.2停用词词库配置

stopword.dic格式是无BOM的UTF-8格式,自己修改时可以直接替换成首行空一行的utf8格式文件,每个扩展词占一行。

如下图:

4.3.2同义词词库配置

格式说明:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1