分词技术就是搜索引擎针对用户提交查询的关键词串进行的查询处理后根据用户的关键词串用各类匹配方法进行的一种技术。固然,咱们在进行数据挖掘、精准推荐和天然语言处理工做中也会常常用到中文分词技术。算法
1、为何要进行中文分词?数据库
词是最小的可以独立活动的有意义的语言成分,英文单词之间是以空格做为天然分界符的,而汉语是以字为基本的书写单位,词语之间没有明显的区分标记,所以,中文词语分析是中文信息处理的基础与关键。数据结构
Lucene中对中文的处理是基于自动切分的单字切分,或者二元切分。除此以外,还有最大切分(包括向前、向后、以及先后相结合)、最少切分、全切分等等。搜索引擎
2、中文分词技术的分类spa
咱们讨论的分词算法可分为三大类:基于字典、词库匹配的分词方法;基于词频度统计的分词方法和基于字标注的分词方法。索引
第一类方法应用词典匹配、汉语词法或其它汉语语言知识进行分词,如:正向最大匹配法、逆向最大匹配法、最小匹配方法等。这类方法简单、分词效率较高,但汉语语言现象复杂丰富,词典的完备性、规则的一致性等问题使其难以适应开放的大规模文本的分词处理(好比未登陆词)。文档
第二类基于统计的分词方法则基于字和词的统计信息,如把相邻字间的信息、词频及相应的共现信息等应用于分词,因为这些信息是经过调查真实语料而取得的,于是基于统计的分词方法具备较好的实用性。字符串
第三类基于字标注的分词方法其实是构词方法。即把分词过程视为字在字串中的标注问题。因为每一个字在构造一个特定的词语时都占据着一个肯定的构词位置(即词位),假如规定每一个字最多只有四个构词位置:即B(词首),M (词中),E(词尾)和S(单独成词),那么下面句子(甲)的分词结果就能够直接表示成如(乙)所示的逐字标注形式:数据挖掘
(甲)分词结果:/上海/计划/N/本/世纪/末/实现/人均/国内/生产/总值/五千美圆/。效率
(乙)字标注形式:上/B海/E计/B划/E N/S 本/s世/B 纪/E 末/S 实/B 现/E 人/B 均/E 国/B 内/E生/B产/E总/B值/E 五/B千/M 美/M 元/E 。/S
首先须要说明,这里说到的“字”不仅限于汉字。考虑到中文真实文本中不可避免地会包含必定数量的非汉字字符,本文所说的“字”,也包括外文字母、阿拉伯数字和标点符号等字符。全部这些字符都是构词的基本单元。固然,汉字依然是这个单元集合中数量最多的一类字符。
下面简要介绍几种经常使用方法:
1)逐词遍历法。
逐词遍历法将词典中的全部词按由长到短的顺序在文章中逐字搜索,直至文章结束。也就是说,无论文章有多短,词典有多大,都要将词典遍历一遍。这种方法效率比较低,大一点的系统通常都不使用。
2)基于字典、词库匹配的分词方法(机械分词法)
这种方法按照必定策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行匹配,若在词典中找到某个字符串,则匹配成功。识别出一个词,根据扫描方向的不一样分为正向匹配和逆向匹配。根据不一样长度优先匹配的状况,分为最大(最长)匹配和最小(最短)匹配。根据与词性标注过程是否相结合,又能够分为单纯分词方法和分词与标注相结合的一体化方法。经常使用的方法以下:
a、最大正向匹配法 (MaximumMatchingMethod)一般简称为MM法。其基本思想为:假定分词词典中的最长词有i个汉字字符,则用被处理文档的当前字串中的前i个字做为匹配字段,查找字典。若字典中存在这样的一个i字词,则匹配成功,匹配字段被做为一个词切分出来。若是词典中找不到这样的一个i字词,则匹配失败,将匹配字段中的最后一个字去掉,对剩下的字串从新进行匹配处理…… 如此进行下去,直到匹配成功,即切分出一个词或剩余字串的长度为零为止。这样就完成了一轮匹配,而后取下一个i字字串进行匹配处理,直到文档被扫描完为止。
其算法描述以下:
(1)初始化当前位置计数器,置为0;
(2)从当前计数器开始,取前2i个字符做为匹配字段,直到文档结束;
(3)若是匹配字段长度不为0,则查找词典中与之等长的做匹配处理。
若是匹配成功,
则,
a)把这个匹配字段做为一个词切分出来,放入分词统计表中;
b)把当前位置计数器的值加上匹配字段的长度;
c)跳转到步骤2);
不然
a) 若是匹配字段的最后一个字符为汉字字符,
则
①把匹配字段的最后一个字去掉;
②匹配字段长度减2;
不然
①把匹配字段的最后一个字节去掉;
②匹配字段长度减1;
b)跳转至步骤3);
不然
a)若是匹配字段的最后一个字符为汉字字符,
则 当前位置计数器的值加2;
不然当前位置计数器的值加1;
b)跳转到步骤2)。
b、逆向最大匹配法 (ReverseMaximumMatcingMethod)一般简称为RMM法。RMM法的基本原理与MM法相同 ,不一样的是分词切分的方向与MM法相反,并且使用的分词辞典也不一样。逆向最大匹配法从被处理文档的末端开始匹配扫描,每次取最末端的2i个字符(i字字串)做为匹配字段,若匹配失败,则去掉匹配字段最前面的一个字,继续匹配。相应地,它使用的分词词典是逆序词典,其中的每一个词条都将按逆序方式存放。在实际处理时,先将文档进行倒排处理,生成逆序文档。而后,根据逆序词典,对逆序文档用正向最大匹配法处理便可。
说明
因为汉语中偏正结构较多,若从后向前匹配,能够适当提升精确度。因此,逆向最大匹配法比正向最大匹配法的偏差要小。统计结果代表 ,单纯使用正向最大匹配的错误率为 1/169,单纯使用逆向最大匹配的错误率为 1/245。例如切分字段“硕士研究生产”,正向最大匹配法的结果会是“硕士研究生 / 产”,而逆向最大匹配法利用逆向扫描,可获得正确的分词结果“硕士 / 研究 / 生产”。
固然,最大匹配算法是一种基于分词词典的机械分词法,不能根据文档上下文的语义特征来切分词语,对词典的依赖性较大,因此在实际使用时,不免会形成一些分词错误,为了提升系统分词的准确度,能够采用正向最大匹配法和逆向最大匹配法相结合的分词方案(即双向匹配法)
C、最少切分法:使每一句中切出的词数最小。
D、双向匹配法:将正向最大匹配法与逆向最大匹配法组合。先根据标点对文档进行粗切分,把文档分解成若干个句子,而后再对这些句子用正向最大匹配法和逆向最大匹配法进行扫描切分。若是两种分词方法获得的匹配结果相同,则认为分词正确,不然,按最小集处理。
3). 全切分和基于词的频度统计的分词方法
基于词的频度统计的分词方法是一种全切分方法。在讨论这个方法以前咱们先要明白有关全切分的相关内容。
全切分
全切分要求得到输入序列的全部可接受的切分形式,而部分切分只取得一种或几种可接受的切分形式,因为部分切分忽略了可能的其余切分形式,因此创建在部分切分基础上的分词方法无论采起何种歧义纠正策略,均可能会遗漏正确的切分,形成分词错误或失败。而创建在全切分基础上的分词方法,因为全切分取得了全部可能的切分形式,于是从根本上避免了可能切分形式的遗漏,克服了部分切分方法的缺陷。
全切分算法能取得全部可能的切分形式,它的句子覆盖率和分词覆盖率均为100%,但全切分分词并无在文本处理中普遍地采用,缘由有如下几点:
a)全切分算法只是能得到正确分词的前提,由于全切分不具备歧义检测功能,最终分词结果的正确性和彻底性依赖于独立的歧义处理方法,若是评测有误,也会形成错误的结果。
b)全切分的切分结果个数随句子长度的增加呈指数增加,一方面将致使庞大的无用数据充斥于存储数据库;另外一方面当句长达到必定长度后,因为切分形式过多,形成分词效率严重降低。
基于词的频度统计的分词方法:
这是一种全切分方法。它不依靠词典,而是将文章中任意两个字同时出现的频率进行统计,次数越高的就多是一个词。它首先切分出与词表匹配的全部可能的词,运用统计语言模型和决策算法决定最优的切分结果。它的优势在于能够发现全部的切分歧义而且容易将新词提取出来。
4).基于知识理解的分词方法(基于字标注)
该方法主要基于句法、语法分析,并结合语义分析,经过对上下文内容所提供信息的分析对词进行定界,它一般包括三个部分:分词子系统、句法语义子系统、总控部分。在总控部分的协调下,分词子系统能够得到有关词、句子等的句法和语义信息来对分词歧义进行判断。这类方法试图让机器具备人类的理解能力,须要使用大量的语言知识和信息。因为汉语语言知识的笼统、复杂性,难以将各类语言信息组织成机器可直接读取的形式。所以目前基于知识的分词系统还处在试验阶段。
5).一种新的分词方法
并行分词方法:这种分词方法借助于一个含有分词词库的管道进行 ,比较匹配过程是分步进行的 ,每一步能够对进入管道中的词同时与词库中相应的词进行比较 ,因为同时有多个词进行比较匹配 ,于是分词速度能够大幅度提升。这种方法涉及到多级内码理论和管道的词典数据结构。