一种基于词库的动态规划中文分词方法

文档序号:6628764阅读:347来源:国知局
一种基于词库的动态规划中文分词方法
【专利摘要】一种基于词库的动态规划中文分词方法,其特征在于,包括如下步骤:(1)加载常用中文词库;(2)加载非常用中文词库;(3)读入中文文本,获得当前中文文本内容;(4)对于中文文本进行分句,将中文文本分成一个个短句;(5)进行动态规划中文自动分词;(6)从最后一个词开始扫描,得到分词结果进行词性分析加入词性标注,输出结果;(7)将未登录词存入非常用中文词库;(8)判断文本是否结束;若否,转入步骤(4),进行循环处理。本发明的有益效果为:准确率高、效率快,分词精度可达到与人类类似的水平,分词速度可达到每秒2MB以上。
【专利说明】一种基于词库的动态规划中文分词方法

【技术领域】
[0001]本发明涉及中文信息自动处理【技术领域】,尤其是一种基于词库的动态规划中文分词方法。

【背景技术】
[0002]随着信息时代的到来,中文信息资源越来越多,如何在浩如烟海的中文信息世界中找到自己需要的资料是一个十分重要的课题。由于数据量剧增,手工处理已经变的不太现实。自动化处理方法帮助人们检索、管理信息,来解决现在社会信息丰富而知识贫乏的现状。目前已经出现了很多自动化的工具诸如自动摘要、自动文件检索等语言处理技术,这些技术的一个核心关键是主题词。对于主题词的提取有助于简化此类工作,而如何找到主题词是需要分词技术的。
[0003]中文分词是中文文本信息处理中最为关键的预处理,是文本挖掘的基础。中文分词是其他中文信息处理的基础,例如中文搜索引擎、机器翻译、语音合成、自动分类、自动摘要、自动校对等等,都需要用到分词。对于中文分词技术的研究,对于我国中文信息自动处理的发展有着至关重要的作用。


【发明内容】

[0004]本发明所要解决的技术问题在于,提供一种准确率高、速度快的基于词库的动态规划中文分词方法。
[0005]为解决上述技术问题,本发明提供一种基于词库的动态规划中文分词方法,包括如下步骤:(I)加载常用中文词库;(2)加载非常用中文词库;(3)读入中文文本,获得当前中文文本内容;(4)对于中文文本进行分句,将中文文本分成一个个短句;(5)进行动态规划中文自动分词;寻找第一个词的可能位置,记F[i]表示当前分到第i个字分到的最少词数;对于每个字开始转移,从当前字开始寻找转移,寻找他前一个词;当F[i]〈F[j]+l,进行转移,从而存储当前最长的词为结果;(6)从最后一个词开始扫描,得到分词结果进行词性分析加入词性标注,输出结果;(7)将未登录词存入非常用中文词库;(8)判断文本是否结束;若否,转入步骤(4),进行循环处理。
[0006]常用中文词库与非常用词库建立双数组字典树;双数组字典树的数据结构由两个整数数组构成,一个是base □,为词语的地址,一个是check□,为字的hash值;设数组下标为i,如果base[i]、check[i]均为O,表示该位置为空,如果base [i]为负值,表示该状态为词语,check[i]表示该状态的前一状态。
[0007]构建双数组字典树,经过四次遍历,将所有的词语放入双数组中,然后遍历一遍词表,修改base值;用负的base值表不该位置为词语,如果状态i对应某一个词,而且base[i]=0,那么令 base[i]= (_1) ;如果 base[i]的值不是 0,那么另 base[i]= (_1)*base[i]。
[0008]本发明的有益效果为:准确率高、效率快,分词精度可达到与人类类似的水平,分词速度可达到每秒2MB以上。

【专利附图】

【附图说明】
[0009]图1是本发明的基于词库的动态规划中文分词方法的工作流程图。
[0010]图2是本发明的双数组字典树数据结构图例。
[0011]图3是本发明的双数组字典树中文词库图例。

【具体实施方式】
[0012]为解决上述技术问题,本发明提供一种基于词库的动态规划中文分词方法,包括如下步骤:(I)加载常用中文词库;(2)加载非常用中文词库;(3)读入中文文本;(4)对于中文文本进行分句,将中文文本分成一个个短句;(5)进行动态规划中文自动分词;(6)得到结果进行词性分析加入词性标注;(7)将未登录词存入非常用中文词库;(8)转入步骤
(4),进行循环处理。
[0013]中文分词:将一个汉字序列切分成一个一个单独的词,分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。中文分词词典:由中文常用词语组成的词典,应该保证该词典占用内存较小且查询速度较快。未登录词:没有被收录在分词词表中但必须切分出来的词,包括各类专有名词(人名、地名、企业名等)、缩写词、新增词汇等。交集型歧义:因为词语交集形成的歧义,如“提高产品质量”,提高、高产、产品、品质、质量等。组合型歧义:同一个字串既可合又可分,如“个人恩怨”中的“个人”就是一个词,“这个人”中的“个人”就必须拆开;“这扇门的把手”中的“把手”就是一个词,“把手抬起来”中的“把手”就必须拆开。
[0014]如图1所示,系统首先要读取已经保存的常用中文词库,以及学习而得的非常用中文词库。为了节省内存空间以及保证中文自动分词的效率,对于这两个词典,建立双数组字典树。系统读取需要中文分词的文本,对于文本按标点符号进行分句。分句之后进入中文分词阶段,寻找第一个词的可能位置,用F[i]表示句子到第i个字为止能分到的词数最少的情况。对于每个字开始转移,从当前字开始寻找转移,寻找他前一个词。当F[i]〈=F[j],进行转移,从而存储当前最长的词为结果。从最后一个词开始扫描,得到分词结果,并进行词性标注,输出。判断文本是否结束,若没结束,继续将文本按标点分句,循环进行分词的过程。
[0015]记F[i]为分词到第i个字所能分成的最少字数,那么F[i]=min(F[i],F[j]+l),i词的最大长度j〈i,F[i]=F[j]+l。其中j的枚举顺序是从大到小更新,若F[i]=F[j]+l即更新的话,此时的j是所能更新的最小的一个,可以认为最后一个词尽可能的长,这符合直观的中文分词算法最大匹配法。每一次状态转移都要保证F[i]>F[j]+l,算法一定保证整个句子分出的是最小词数。基于词库的动态规划中文分词方法将两种方法结合到一起,有效的提升了中文分词的效率。
[0016]如图2所示,为双数组字典树。双数组字典树是一种特殊的字典树,相较字典树而言,它的空间利用率更高,消耗的内存更小,查询的效率与普通字典树相同。双数组字典树的数据结构由两个整数数组构成,一个是base [],为词语的地址,一个是check[],为字的hash值。设数组下标为i,如果base[i]、check[i]均为O,表不该位置为空。如果base[i]为负值,表示该状态为词语,check[i]表示该状态的前一状态。
[0017]双数组字典树构造分词算法词典,假定词表中只有“啊,阿根廷,阿胶,阿拉伯,阿拉伯人,埃及”这几个词。首先对此表中所有出现的10个汉字进行编码,啊-1、阿-2、唉-3、根-4、胶-5、拉-6、及-7、廷-8、伯-9、人-10。对于每一个汉字,需要确定一个base值,使得对于所有以该汉字开头的词,在双数组中都能放下。例如,现在要确定“阿”字的base值,假设以“阿”开头的词的第二个字序列码依次为al、a2、a3……an,必须找到一个值i,使得
base [i+al]、check[i+al]、base [i+a2]、check [i+a2]......base [i+an]、check[i+an]均为
0。一旦找到了这个i,“阿”的base值就确定为i。
[0018]如图3所示,将上述例子构建双数组字典树,经过四次遍历,将所有的词语放入双数组中,然后遍历一遍词表,修改base值。用负的base值表示该位置为词语,如果状态i对应某一个词,而且base[i]=0,那么令base[i]= (_1) ;如果base[i]的值不是0,那么另 base[i]= (_1) *base[i]。
[0019]除此之外,还需维护一些特殊词表,例如单独成词的虚词词表,地名词表,人名词表等未登录词表,进一步提升软件的正确率。
[0020]这种基于词库的动态规划中文分词方法,在时间复杂度上仍然是线性级别的,对于每个字只需要找到它的前驱,所以时间复杂度非常小。
[0021]使用人民日报1998年I月份语料,在与人工正确分词进行比对后,准确率达到了98.8904%,分词速率为 2504kb/s。
[0022]尽管本发明就优选实施方式进行了示意和描述,但本领域的技术人员应当理解,只要不超出本发明的权利要求所限定的范围,可以对本发明进行各种变化和修改。
【权利要求】
1.一种基于词库的动态规划中文分词方法,其特征在于,包括如下步骤:(1)加载常用中文词库;(2)加载非常用中文词库;(3)读入中文文本,获得当前中文文本内容;(4)对于中文文本进行分句,将中文文本分成一个个短句;(5)进行动态规划中文自动分词;寻找第一个词的可能位置,记F[i]表示当前分到第i个字分到的最少词数;对于每个字开始转移,从当前字开始寻找转移,寻找他前一个词;iF[i]〈F[j]+l,进行转移,从而存储当前最长的词为结果;(6)从最后一个词开始扫描,得到分词结果进行词性分析加入词性标注,输出结果;(7)将未登录词存入非常用中文词库;(8)判断文本是否结束;若否,转入步骤(4),进行循环处理。
2.如权利要求1所述的中文分词方法,其特征在于,常用中文词库与非常用词库建立双数组字典树;双数组字典树的数据结构由两个整数数组构成,一个是base [],为词语的地址,一个是check[],为字的hash值;设数组下标为i,如果base [i]、check[i]均为O,表示该位置为空,如果base [i]为负值,表示该状态为词语,check[i]表示该状态的前一状态。
3.如权利要求2所述的中文分词方法,其特征在于,构建双数组字典树,经过四次遍历,将所有的词语放入双数组中,然后遍历一遍词表,修改base值;用负的base值表示该位置为词语,如果状态i对应某一个词,而且base[i]=0,那么令base[i]= (_1) *i ;如果base[i]的值不是 O,那么另 base[i] = (_1) *base[i]。
【文档编号】G06F17/27GK104252542SQ201410507974
【公开日】2014年12月31日 申请日期:2014年9月29日 优先权日:2014年9月29日
【发明者】孙珂, 田冰川, 张道强 申请人:南京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1