一种基于最小信息量的汉语快速分词系统及方法与流程

文档序号:12176970阅读:390来源:国知局
一种基于最小信息量的汉语快速分词系统及方法与流程

本发明属于汉语言文字信息处理领域,涉及一种基于最小信息量的汉语快速分词系统及方法。



背景技术:

随着互联网的飞速发展,人们对搜索引擎、文本信息提取、文本语义分析、大数据处理等应用的需求不断增加,因此快速中文分词处理的重要性日益明显,其市场需求与应用规模与日俱增。但是,与英语、意大利语等西欧语言不同的是,汉语不能以空格作为词汇的分界标识,因此在数据处理时,需要专门的算法、工具,才能进行有效的分词处理。

当前,常用的分词方法有两类:一类是基于简单的词典进行查找匹配。此类方法通常以给定的词典为参考,在汉语字符串中,根据词语的首汉字在词典中逐一查找与之匹配的汉语词语,然后按照前向匹配原则、后向匹配原则、和最长匹配原则中的一种,确定最终的分词结果。该方法能够快速地确定分词结果,但由于匹配规则简单,其结果的准确率往往不高,不能胜任对准确性要求较高的分词处理任务。另外一类分词方法是基于语言模型的概率方法,该方法需要先验的概率统计知识,然后通过计算各种分词方法的概率,选择概率可行性最大的分词方法进行分词。由于基于先验的统计知识,此类方法准确率更高,但却在两方面存在着不足:首先,此类方法在分词开始前需要知道各个词语的先验统计概率,所以如果没有先验统计或出现了新词,就会出现先验概率缺失的情况;第二,此类方法要对所有可能的分词情况进行处理,对于长度为N的文本,其复杂度是O(2N),这大大增加了计算的复杂度,其实际应用价值和处理问题的规模也因此受到限制。



技术实现要素:

本发明技术解决问题:为了解决基于语言模型概率分词方法中存在的上述不足,提供一种基于最小信息量的快速分词系统及方法,无需提前获取词语的先验统计信息,并且能够在仅有词库的条件下实现高效分词。该方法适用于各种中文文本的分词处理,在搜索引擎、文本信息提取、文本语义分析、知识图谱等的中文信息处理领域有着重要的应用价值。

本发明技术解决方案:一种基于最小信息量的汉语快速分词系统,包括备选词确定模块、歧义区域识别模块、歧义分词消除模块和结果统计模块,其中:

备选词确定模块:获得文本中的所有中文词语、汉字的位置与数量信息,并根据词典对文本进行初步的统计,以避免由于缺少词语先验统计信息或出现新词带来的不准确分词;从输入文本的第一个字符位置开始,利用词典,逐个确定文本中出现的全部汉字和所有中文词语,并记录全部汉字和所有中文词语的位置和数量;在文本中,所有可能是最终分词结果的词语都被称为备选词;

歧义区域识别模块:根据备选词确定模块的全部汉字和所有中文词语的位置和数量,确定输入文本的所有歧义区间,以便后续的歧义消除;所述歧义区间是指有可能产生歧义划分的所有相关备选词的文本位置区间;基于备选词的位置信息,确定词语划分的三种情况:无歧义分词、单汉字分词和有歧义分词;对于无歧义分词和单汉字分词,将无歧义分词和单汉字分词作为分词结果记录;对于有歧义分词,记录歧义区间的起止位置及区间内备选词的序数信息,将有歧义分词交由歧义分词消除模块,以进一步消除该歧义区间的分词歧义,待歧义分词消除模块返回分词方案后,将该分词方案记入结果集;对某个字符长度大于等于2的备选词,如果备选词中的字符与备选词前、后的若干连续字符都不构成词典中的词语即另一个不同的备选词,则称该备选词为无歧义分词;如果某个汉字与它前后的字符都不构成词语,则某个汉字本身不会与其他汉字或词语产生歧义划分,称为单汉字分词;某个备选词的部分连续字符与它前、后的字符串构成新的备选词,则该词的划分就被称为有歧义划分;

歧义分词消除模块:对给定歧义区间中的所有可选分词方案作比较,依据信息量最小原则,选择最优分词方案分词,并将结果存储,同时将结果返回给歧义区域识别模块执行,整个文本分词处理结束。

所述系统还包括结果统计模块:将整个文本分词处理结果输出,同时将最终的分词结果累计到词库集合中,为后续的处理做出累加作用。

所述备选词确定模块中,统计当前输入文本中所有备选词,并将这些备选词的词语的相关统计信息记录入相应的存储结构中,其中,每个词语w的统计信息包括:词语w在文本中出现的总次数,总次数由备选词的统计结构DocCount[w]记录;词语w在文本检测中出现的顺序信息,顺序信息由备选词序列CandidateWD记录,词语w在第k次出现时的起始位置CandidateStart[k]以及结束位置CandidateEnd[k]位置信息。

所述歧义区域识别模块中的歧义区域识别实现如下:经过备选词确定后共有KN个备选词,设当前处理的备选词为第k个备选词CandidateWD[k],k<KN,根据备选词的开始位置信息CandidateStart[k]和结束位置信息CandidateEnd[k],逐个确定第k个备选词的归属类别,对于无歧义分词和单汉字分词,将有序对(CandidateStart[k],CandidateWD[k])作为分词结果直接保存到集合Result中;对于有歧义分词,则确定包含该词的歧义区间,并交由歧义分词消除模块进一步消除歧义,待歧义分词消除模块返回分词方案后,再将该分词方案记入结果集Result中。

所述歧义分词消除模块实现为:首先,对所有可选分词方案进行冲突判断:一种分词方案对应着歧义区间内备选词指标集合ambiguityWordIndexSet的一个非空子集,若indSubset是ambiguityWordIndexSet的一个非空子集,即一种分词方案,如果indSubset中某两个元素i、j所对应的备选词CandidateWD[i]和CandidateWD[j]在歧义区间[ambiguityStart,ambiguityEnd]内同时占据了一个或多个位置,则称这两个备选词在该歧义区间产生了冲突;反之,如果indSubset中任意两个元素所对应的备选词相互都不产生干扰,则称indSubset对应的分词方案是无冲突的;对所述歧义区间内的所有无冲突的分词方案,计算各分词方案中全部类型分词的累计信息量,选择具有最小累计信息量的分词方案作为消除区间歧义的最优方法,并将该方案中所有词语的位置信息在歧义区间[ambiguityStart,ambiguityEnd]中做标记。

一种基于最小信息量的汉语快速分词方法,包括步备选词确定步骤、歧义区域识别步骤、歧义分词消除模块和结果统计步骤,其中:

(1)备选词确定步骤:获得文本中的所有中文词语、汉字的位置与数量信息,并根据词典对文本进行初步的统计,以避免由于缺少词语先验统计信息或出现新词带来的不准确分词;从输入文本的第一个字符位置开始,利用词典,逐个确定文本中出现的全部汉字和所有中文词语,并记录全部汉字和所有中文词语的位置和数量;在文本中,所有可能是最终分词结果的词语都被称为备选词;

(2)歧义区域识别步骤:根据备选词确定步骤的全部汉字和所有中文词语的位置和数量,确定输入文本的所有歧义区间,以便后续的歧义消除;所述歧义区间是指有可能产生歧义划分的所有相关备选词的文本位置区间;基于备选词的位置信息,确定词语划分的三种情况:无歧义分词、单汉字分词和有歧义分词;对于无歧义分词和单汉字分词,将无歧义分词和单汉字分词作为分词结果记录;对于有歧义分词,记录歧义区间的起止位置及区间内备选词的序数信息,将有歧义分词交由歧义分词消除步骤,以进一步消除该歧义区间的分词歧义;某个字符长度大于等于2的备选词,如果备选词中的字符与备选词前、后的若干连续字符都不构成词典中的词语即另一个不同的备选词,则称该备选词为无歧义分词;如果某个汉字与它前后的字符都不构成词语,则某个汉字本身不会与其他汉字或词语产生歧义划分,称为单汉字分词;某个备选词的部分连续字符与它前、后的字符串构成新的备选词,则该词的划分就被称为有歧义划分;

(3)歧义分词消除步骤:对给定歧义区间中的所有可选分词方案作比较,依据信息量最小原则,选择最优分词方案分词,并将结果存储,同时将结果返回给歧义区域识别步骤执行,整个文本分词处理结束;

(4)结果统计步骤:将整个文本分词处理结果输出,同时将最终的分词结果累计到词库集合中,为后续的分词处理提供更为精细的数据支持。

本发明与现有技术相比的优点在于:

(1)本发明以无标识的中文信息文本为输入,以带有中文分词标识的结构文本为输出。在分词的同时,本发明还将累计各个词语的总词频信息,为后续分词提供更为精确的指导。

(2)本发明能够高效自动的对中文文本进行分词处理。该方法能够适应于无先验信息的分词处理,能够有效地是用于多种需求。因此,本方法实现简单、高效,能够有效地实现中文分词。

(3)本发明无需提前获取词语的先验统计信息,并且能够在仅有词库的条件下实现高效分词。该方法适用于各种中文文本的分词处理,在搜索引擎、文本信息提取、文本语义分析、知识图谱等的中文信息处理领域有着重要的应用价值。

附图说明

图1为本发明整体实现的数据流图;

图2为图1中备选词确定模块的实现流程图;

图3为图1中歧义区域识别模块的实现流程图;

图4为图1中歧义分词消除模块的实现流程图;

图5为图1中结果统计模块的实现流程图。

具体实施方式

如图1所示,本发明的处理过程包括:备选词确定、歧义区域识别、歧义分词消除、结果统计等四个模块。

为了实现本发明,需要两套额外的装置:一套装置用于检测词典是否包含单个的汉语字符串,另一套装置用于统计和记录汉语词语或汉字的出现频率。对于词典而言,它除了拥有一个包含诸多词语的词库,还设有一个索引结构,用于记录以任意汉字为首词语的最大字符长度。在本发明中,我们用MaxWordLength(C)表示所有以汉字C为首字的词语的最大字符长度。对于词频统计,本发明使用辅助存储结构DictCount[w],以记录某个汉语词w(可以是通常意义下的中文词语,也可是某个经常出现的单个汉字)在现有全部分词结果中出现的总次数。

在本发明实现的过程中,系统每处理一篇中文文本,就会对输入文本所有字符(一个字符既可以是一个汉字,也可以是一个标点符号或其他非汉语字符)的位置进行标识:标识文本中第一个字符的位置为0,标识文本中第二个字符的位置为1,以此类推。如果输入文本共有CharNum个字符位置,则假设文本第i(i<CharNum)个位置的字符为Ci

本发明具体是通过以下技术方案实现的:

一、备选词确定模块,如图2所示。

该阶段的作用在于获得当前输入文本中所有可能出现的词语、汉字的统计信息和位置信息,以避免由于缺少词语先验统计信息或出现新词带来的不准确分词。具体来说,本发明统计当前输入文本中所有潜在的汉语词,并由存储结构DocCount记录汉语词统计信息(记文本中汉语词w出现的总次数为DocCount[w]),由CandidateWD、CandidateStart和CandidateEnd记录词语的位置信息。该功能由步骤1实现。

步骤1:从输入文本的第一个字符位置开始,利用词典,逐个确定文本中出现的全部汉字和所有中文词语,并记录它们的位置和数量。步骤1的具体方法如下:

步骤1.1设当前位置i=0、输入文本的备选词语总数为KN=0,将DocCount中所有汉语词的出现次数置为0,执行步骤1.2。

步骤1.2如果i<CharNum,执行步骤1.3;否则,执行步骤1.6。

步骤1.3如果第i个字符Ci是汉字,则DocCount[Ci]++、j=1,执行步骤1.4;否则,i++,执行步骤1.2。

步骤1.4如果Ci+j是汉字且j<MaxWordLength(Ci),执行步骤1.5;否则,i++,执行步骤1.2。

步骤1.5如果字符串Ci...Ci+j是词典中的词语,则Ci...Ci+j是一个备选词,将其加入备选词序列CandidateWD[KN]=Ci...Ci+j,记录起止位置CandidateStart[KN]=i、CandidateEnd[KN]=i+j,完善统计信息:KN++、DocCount[Ci...Ci+j]++,令j++,执行步骤1.4。

步骤1.6结束步骤1。

步骤1的作用在于统计文本中的所有中文词语/汉字的位置与数量信息,并根据字典对文本进行初步的备选词统计。

二、歧义区域识别模块,如图3所示。

对于连续的中文字符串,根据步骤1确定备选词有可能出现三种情况。

第一种情况:某个字符长度大于等于2的备选词语,如果词语中的字符与其前、后的若干连续字符都不构成词典中的词语(即另一个不同的备选词),则称该词语为无歧义分词。例如,字符串“明天高考结束”中的“高考”,“高”、“考”,以及“高考”都不能与其前、后字符构成一个词语,因此“高考”在该字符串中就是一个无歧义词语。

第二种情况:如果某个汉字与其前后的字符都不构成词语,那么该汉字本身不会与其他汉字/词语产生歧义划分,这时称其为单汉字分词。例如字符串“祖国的未来”中的“的”就是一个单汉字分词。

第三种情况:某个备选词的部分连续字符与它前/后的字符串构成新的备选词,那么该词的划分就被称为有歧义划分。例如在字符串“汉语言学”中,“汉语”中的“语”与其后的“言”构成词语“语言”,这时“汉语”与“语言”就构成了歧义划分。本发明称产生歧义划分中所有相关备选词的文本位置区间为歧义区间,而本模块的作用是在步骤1的基础上,确定输入文本的所有歧义区间,以便后续的歧义消除。

本模块功能由步骤2实现。

步骤2:经过步骤1处理,一共有KN个备选词。设当前处理的备选词为第k(k<KN)个备选词CandidateWD[k],本步骤根据备选词的位置信息CandidateStart[k]和CandidateEnd[k],逐个确定第k个备选词的归属类别。对于无歧义分词和单汉字分词,将有序对(CandidateStart[k],CandidateWD[k])作为分词结果直接保存集合Result中;对于有歧义分词,则确定包含该词的歧义区间,并由步骤3专门的处理。步骤2的具体实现如下:

步骤2.1初始化k=0,设当前歧义分词区间起始和末尾位置的初始值分别为ambiguityStart=0、ambiguityEnd=0,令Result为空集,执行步骤2.2。

步骤2.2如果k+1<KN,判断第k个备选词分词归属,执行步骤2.3;否则第k个备选词CandidateWD[k]为无歧义词,将有序对(CandidateStart[k],CandidateWD[k])作为分词结果存储到集合Result中,执行步骤2.8。

步骤2.3判断第k个备选词CandidateWD[k]是否与后续词CandidateStart[k+1]产生歧义:如果CandidateEnd[k]+1=CandidateStart[k+1],则CandidateWD[k]与后续字符的划分为无歧义分词,将有序对(CandidateStart[k],CandidateWD[k])作为分词结果存储到集合Result中,令k++,并执行步骤2.2;否则,执行步骤2.4。

步骤2.4如果CandidateEnd[k]+1<CandidateStart[k+1],则第k个词语CandidateWD[k]与后续字符的划分为无歧义分词,而且从位置CandidateEnd[k]+1到位置CandidateStart[k+1]-1的所有汉字都为单汉字分词。将(CandidateStart[k],CandidateWD[k])作为分词结果存储到集合Result中,并将位置CandidateEnd[k]到CandidateStart[k+1]之间所有字符及位置信息存储到集合Result中(即对所有的CandidateEnd[k]<i<CandidateStart[k+1],将(i,Ci)存储到Result中),令k++,执行步骤2.2;否则,执行步骤2.5。

步骤2.5经过步骤2.3和步骤2.4的条件选择,CandidateEnd[k]>=CandidateStart[k+1]成立。此时,第k个备选词与第k+1个备选词语构成歧义分词,记录当前歧义区间起止位置ambiguityStart=CandidateStart[k]、ambiguityEnd=max(CandidateEnd[k],CandidateEnd[k+1]),令l=k+2,执行步骤2.6。

步骤2.6如果l<KN,继续确定当前歧义区间终止位置,执行步骤2.7;否则,歧义区间确定,由歧义区间备选词指标集ambiguityWordIndexSet记录该歧义区间内全部备选词的序数,即令ambiguityWordIndexSet={k,...,l-1}。将ambiguityWordIndexSet与歧义区间位置信息ambiguityStart和ambiguityEnd一起传递给步骤3,做进一步的歧义分词处理,待执行步骤3返回结果后,执行k=l,执行步骤2.2。

步骤2.7如果当前歧义区间终止位置ambiguityEnd>=CandidateStart[l],第l个备选词和现歧义区间内词语产生歧义划分,重置ambiguityEnd=max(ambiguityEnd,CandidateEnd[l]),l++,执行步骤2.6;否则,歧义区间判别结束,记录歧义区间内全部备选词的序数,令ambiguityWordIndexSet={k,...,l-1},将其与歧义区间位置信息ambiguityStart和ambiguityEnd一起传递给消除歧义分词模块做歧义分词处理,待消除歧义分词模块执行返回结果后,令k=l,执行步骤2.2。

步骤2.8结束步骤2。

步骤2的作用在于基于备选词的位置信息,确定词语划分的三种情况:无歧义分词、单汉字分词和有歧义分词。对于无歧义分词和单汉字分词,将其作为分词结果记录;对于有歧义分词,记录歧义区间的起止位置及区间内备选词的序数,将参数交由消除歧义分词模块进一步消除该区间的分词歧义。待步骤2执行结束,其结果将交由结果统计模块处理。

三、消除歧义分词模块,如图4所示。

该模块在获得歧义区间[ambiguityStart,ambiguityEnd]和歧义区间备选词指标集ambiguityWordIndexSet的基础上,确定一种该区间内无冲突的最优分词方案。具体来说,本模块在区间内所有无冲突的分词方案中,计算各方案的累计信息量,选择具有最小累计信息量的方案作为消除歧义的最优方法。

在实现上,一种分词方案对应着集合ambiguityWordIndexSet的一个非空子集。假设indSubset是ambiguityWordIndexSet的一个非空子集,如果indSubset中某两个元素i、j所指示备选词CandidateWD[i]和CandidateWD[j]在歧义区间[ambiguityStart,ambiguityEnd]同时占据了一个或多个相同位置,则称这两个词语在该歧义区间产生了冲突;反之,如果indSubset中任意两个元素所指示的备选词都不产生干扰,则称indSubset对应的分词方案是是无冲突的。

本模块功能由步骤3实现。

步骤3:对于指定的歧义区间,逐个确定该区间内的分词方案是否产生歧义,对于无歧义的分词方案,计算它的汉语词累计信息量,并比较它与已有方案的优劣,最终选择具有最小累计信息量的分词方案作为消除区间歧义的最优方法。步骤3的具体实现如下:

步骤3.1初始化方案备选集PowerSet是一个包含集合ambiguityWordSet的所有子集的集合,则PowerSet被用于记录所有可能的分词方案(ambiguityWordSet的一个子集对应一种分词方案),初始化累计信息量Infor=N*logN+M*logM、当前歧义分词结果集合result为空集,执行步骤3.2。其中,N是DictCount中所有汉语词出现的总次数,M是DocCount中所有备选词语出现总次数与文本中所有汉字出现总次数之和。

步骤3.2如果PowerSet不为空集,则从中取出一个元素indSubset(indSubset是ambiguityWordSet的一个子集),令PowerSet=PowerSet-{indSubset},执行步骤3.3;否则,执行步骤3.7。

步骤3.3设token是歧义区间[ambiguityStart,ambiguityEnd]的表示变量内,则对于该歧义区间的每一个位置i(ambiguityStart<=i<=ambiguityEnd),初始化位置标识token[i]=0,执行步骤3.4。

步骤3.4对indSubset中全部指标元素,将其所标识备选词的位置在变量token中标注。例如:对indSubset中的某个元素k,其所指示的备选词CandidateWD[k]在歧义区间中占据从CandidateStart[k]到CandidateEnd[k]的所有位置,如果token[j]=0对于所有的j(CandidateStart[k]<=j<=CandidateEnd[k])都成立,则对所有的j标注token[j]=1;如果存在某个j使得token[j]=1,则表明在标注该词前,位置j已经被占,这时分词方案indSubset发生冲突。在对indSubset中全部元素进行标注的过程中,如果产生冲突,则执行步骤3.2;否则,没有冲突发生,则执行步骤3.5。

步骤3.5此时,indSubset所对应的分词法方案无冲突,对区间[ambiguityStart,ambiguityEnd]中的某个空位i(即token[i]=0),将该位置汉字Ci作为单汉字分词,并根据下公式计算indSubset在歧义区间[ambiguityStart,ambiguityEnd]上的累计信息量:

其中,0<α<1,通常可取α为0.8、0.9等;在本发明中出现的对数函数log都是以2为底。执行步骤3.6。

步骤3.6如果IindSubset<Infor,则令Infor=IindSubset,清空result,将当前indSubset中存储的所有指标k对应的序对(CandidateStart[k],CandidateWD[k])插入当前歧义分词结果result中,对于该方案中歧义区间内的所有空置位置i(即token[i]=0),将单汉字分词序对(i,Ci)插入到当前歧义分词结果result中,执行步骤3.2;否则,直接执行步骤3.2。

步骤3.7将歧义分词结果result逐条插入到Result中,结束步骤3,返回至步骤2的调用处。

步骤3的作用在于对歧义区间[ambiguityStart,ambiguityEnd]中的所有可选分词方案作比较,依据信息量最小原则,选择最优分词方案分词,并将结果存入Result中。步骤3的优点在于它既考虑了备选词的整体统计特性,又参考了其文档统计特性,对于词典中没有新词和没有DictCount先验统计的分词具有良好的适应性。步骤3产生的结果将返回给步骤2的执行。整个文本分词处理结束之后,将会进入到步骤4的分词结果统计阶段。

四、结果统计模块,如图5所示。

本模块功能由步骤4实现。

步骤4:该步骤主要是将分词结果输出,同时,将最终的分词结果累计到词库集合中去,为后续的分词处理提供更为精细的数据支持。

步骤4.1将Result中的全部元素(posStart,word),按照元素第一个位置参数posStart从小到大排序,并按顺序输出第二个位置参数word的内容,以此作为分词的结果。

步骤4.2对于Result中的每一个序偶(posStart,word),令DictCount[word]++。

步骤4.3结束步骤4。

本发明能够高效自动的对中文文本进行分词处理。该方法能够适应于无先验信息的分词处理,能够有效地是用于多种需求。因此,本方法实现简单、高效,能够有效地实现中文分词。应该理解的是,本实施例只是该发明的一种优选的实施方式。在不脱离本发明的精神和原则的前提下,任何对本发明做出的等同替换或变化,都应计入本发明的保护范围之内。

本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做出各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1