文档章节

分词算法

将将将
 将将将
发布于 2016/04/20 15:44
字数 1571
阅读 188
收藏 2

由于汉语单字成词的特点,正向最小匹配和逆向最小匹配一般很少使用一般说来,逆向匹配的切分精度略高于正向匹配,遇到的歧义现象也较少

一、最大正向匹配算法

通常简称为MM法。其基本思想为:假定分词词典中的最长词有i个汉字字符,则用被处理文档的当前字串中的前i个字作为匹配字段,查找字典。若字典中存在这样的一个i字词,则匹配成功,匹配字段被作为一个词切分出来。如果词典中找不到这样的一个i字词,则匹配失败,将匹配字段中的最后一个字去掉,对剩下的字串重新进行匹配处理……  如此进行下去,直到匹配成功,即切分出一个词或剩余字串的长度为零为止。这样就完成了一轮匹配,然后取下一个i字字串进行匹配处理,直到文档被扫描完为止。

例子:“今天来了许多新同事’”
假设:正向最大匹配方式,最大长度为5 (即词库词典中最长的词长度为5)
今天来了许 
今天来了 
今天来 
今天  >>>>>>> 得到一个词:今天 
来了许多新 
来了许多 
来了许 
来了 
来  >>>>>>>>> 得到一个词:来 
了许多新同 
了许多新 
了许多 
了许 
了 >>>>>>>>> 得到一个词: (在实际生产环境 “了”会被作为停用词过滤掉)
许多新同事 
许多新同 
许多新 
许多  >>>>>>>>> 得到一个词:许多 
新同事 
新同 
新  >>>>>>>>> 得到一个词:新 
同事  >>>>>>>>> 得到一个词:同事 

最后正向最大匹配的结果是: 
/今天/来/了/许多/新/同事/ 

二、逆向最大匹配

通常简称为RMM法。RMM法的基本原理与MM法相同 ,不同的是分词切分的方向与MM法相反,而且使用的分词辞典也不同。逆向最大匹配法从被处理文档的末端开始匹配扫描,每次取最末端的i个字符(i字字串)作为匹配字段,若匹配失败,则去掉匹配字段最前面的一个字,继续匹配。相应地,它使用的分词词典是逆序词典,其中的每个词条都将按逆序方式存放。在实际处理时,先将文档进行倒排处理,生成逆序文档。然后,根据逆序词典,对逆序文档用正向最大匹配法处理即可。

例子:“今天来了许多新同事’”
假设:正向最大匹配方式,最大长度为5 (即词库词典中最长的词长度为5)

许多新同事 
多新同事 
新同事 
同事 ====》得到一个词:同事 
来了许多新 
了许多新 
许多新 
多新 
新 ====》得到一个词:新 
天来了许多 
来了许多 
了许多 
许多 ====》得到一个词:许多 
今天来了 
天来了 
来了 
了 ====》得到一个词:了 
今天来 
天来 
来 ====》得到一个词:来 
今天 ====》得到一个词:今天 

最后反向最大匹配的结果是: 
/今天/来/了/许多/新/同事/ 

正向最大匹配和反向最大匹配的结果并不一定都相同 
例子:’我一个人吃饭’ 
1.正向最大匹配方式,最大长度为5 
我一个人吃 
我一个人 
我一个 
我一 
我 ====》得到一个词: 我 
一个人吃饭 
一个人吃 
一个人 
一个 ====》得到一个词:一个 
人吃饭 
人吃 
人 ====》得到一个词:人 
吃饭 ====》得到一个词:吃饭 

最后正向最大匹配的结果是: 
/我/一个/人/吃饭/ 

2.反向最大匹配方式,最大长度为5 
一个人吃饭 
个人吃饭 
人吃饭 
吃饭 ====》得到一个词:吃饭 
我一个人 
一个人 
个人 ====》得到一个词:个人 
我一 
一 ====》得到一个词:一 
我 ====》得到一个词:我 

最后反向最大匹配的结果是: 
/我/一/个人/吃饭/ 
这次两种方式的结果就不一致了。 

三、双向匹配

将正向最大匹配法与逆向最大匹配法组合。先根据标点对文档进行粗切分,把文档分解成若干个句子,然后再对这些句子用正向最大匹配法和逆向最大匹配法进行扫描切分。如果两种分词方法得到的匹配结果相同,则认为分词正确,否则,按最小集处理

四、最少切分法

使每一句中切出的词数最少

五、全切分

全切分要求获得输入序列的所有可接受的切分形式,而部分切分只取得一种或几种可接受的切分形式,由于部分切分忽略了可能的其他切分形式,所以建立在部分切分基础上的分词方法不管采取何种歧义纠正策略,都可能会遗漏正确的切分,造成分词错误或失败。而建立在全切分基础上的分词方法,由于全切分取得了所有可能的切分形式,因而从根本上避免了可能切分形式的遗漏,克服了部分切分方法的缺陷。

全切分算法能取得所有可能的切分形式,它的句子覆盖率和分词覆盖率均为100%,但全切分分词并没有在文本处理中广泛地采用,原因有以下几点:

1)全切分算法只是能获得正确分词的前提,因为全切分不具有歧义检测功能,最终分词结果的正确性和完全性依赖于独立的歧义处理方法,如果评测有误,也会造成错误的结果。

2)全切分的切分结果个数随句子长度的增长呈指数增长,一方面将导致庞大的无用数据充斥于存储数据库;另一方面当句长达到一定长度后,由于切分形式过多,造成分词效率严重下降。



© 著作权归作者所有

共有 人打赏支持
将将将
粉丝 23
博文 30
码字总数 13288
作品 0
深圳
程序员
私信 提问
word分词器、ansj分词器、mmseg4j分词器、ik-analyzer分词器分词效果评估

word分词是一个Java实现的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。 能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名、组织机构名等未登录...

杨尚川
2014/04/29
0
1
Java中文分词组件 - word分词

Java分布式中文分词组件 - word分词 word分词是一个Java实现的分布式的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。能准确识别英文、数字,以及日期、时间等数...

杨尚川
2014/04/29
0
47
word v1.3 发布,Java 分布式中文分词组件

word 分词是一个Java实现的分布式的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名、组织机构名...

杨尚川
2015/08/29
4.4K
0
干货 | 自然语言处理(1)之聊一聊分词原理

前言 在做文本挖掘时,首先要做的预处理就是分词。英文单词天然有空格隔开容易按照空格分词,但有时也需要把多个单词做为一个分词,比如一些名词如“New York”,需要做为一个词看待。而中文...

sfm06sqvw55dft1
2017/12/08
0
0
go中文分词包--cwsharp-go

cwsharp-go cwsharp-go是golang的文本分词包,支持中文、英文以及中英混合词组,除此之外,提供自定义分词的扩展(比如日文、韩文或其它语种)。 .NET版:CWSharp-C# 安装&测试 分词算法 cw...

menuvb
2015/08/04
599
0

没有更多内容

加载失败,请刷新页面

加载更多

storm 环境搭建

1.下载解压 下载地址:http://storm.apache.org/downloads.html

MrPei
9分钟前
0
0
Python Base - 读写文件,字符串拼接,单引号

字符转义 读写文件cvs 字符串拼接,替换 import csvcsv_file_name = 'cardbin.csv'# insert into `card_bin_code` (name_of, code_of, card_no_prefix, bank_code) values ('中国银行......

园领T
10分钟前
0
0
基于JQUERY BOOTSTRAP 最简单的loading遮罩层

<%--loading遮罩层--%><div class="modal fade" id="loadingModal" backdrop="static" keyboard="false">   <div style="width: 200px;height:20px; z-index: 20000; position: abs......

颖辉小居
11分钟前
0
0
springboot+kafka

1,首先springboot对kafka的支持也很好,同样是在配置文件中配置好参数,然后就可以直接使用。先说一下,很简单,,,不要怕 2,我用的依赖是 <dependency> <groupId>org.springframewor...

我真是小菜鸡
15分钟前
2
0
webservice动态客户端自我记录备份(spring boot)

动态客户端相比直接调用webservice的客户端代码要简单很多,但实际上很多工作是java自己替我们做掉了。简单记录一下内容,以备后续使用: pom文件只需要引入: <!-- CXF webservice --><de...

checkboxMan
21分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部