基于双数组Trie树的中文分词词典算法优化研究

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

CN43一1258/TP计算机工程与科学第35卷第9期2013年9月ISSN1007—130X
Computer Engineering&Science V oI.35,N o.9,S e p.2013文章编号:1007一130X(2013)09一0127一05
基于双数组Trie树的中文分词词典算法优化研究。

杨文川,刘健,于淼
(北京邮电大学计算机学院,北京100876)
摘要:基于双数组nie树的中文分词词典具有较高的查找效率,但其插入时间复杂度较高。

为此提出了一种基于双数组Trie树结构的改进算法iDAT,在原始词典初始化时优先处理分支多的节点,并在初始化之后对base数组中的空序列的下标值做Hash,Hash表中存放空序列之前的所有空序列个数之和,而后运用iDAT算法进行插入。

本算法借鉴了单模式匹配的Sunday算法中的跳跃思想,在适当增加空间开销的基础上,降低了Trie树在动态插入过程中的平均时间复杂度,在实际操作过程中有着良好的性能。

关键词:双数组;Trie树;时间复杂度;分词词典中图分类号:
TP391.3 文献标志码:A
doi:10.3969/j.issn.1007—130X.2013.09.021
Research of an inlproVed algorithm for Chinese word
Segmentanon nlCU0narV baSen on double—array Trie-tree
YANG Wen—chuan,LIU J ian,Y U Miao
(SchooI of Computer Science,Be巧ing University of Post and Telecommunicat ion,Beij ing 100876,Chi na) Abstract:Chinese word segmentation dictionary based o n the double—a rra y 1●ie—t ree has hi gh er se ar c h ef fi—ciency,but the dynamic i nserti on co ns ume s a lot of time.Therefore,an improved algorithm(iDAT)based o n double—array’hie—t ree for Chinese word segmentation dictionar y is proposed.The nodes with more branches ar e handled while the original diction ary is being initialized.After the initialization,a Hash proc es s is perfomed o n the index values of empty seq ue n c e in base array.The final Hash table stores the sum of the empty seq ue n c es befor e the current empty seq u e n c e.After that,the iDAT is used to carry out the dynam ic inser tion process.This algorithm adopts Sunday jumps algorithm of single patt er n m atchi ng.With the reasonable increasement of space,it reduces the the ave ra g e time comp le】【it y of the dynamic i nsertio n p ro ce ss in 7r}ie—tree.Practical results show it has good ope ra ti on perfo咖ance.
Key wor ds:d ou bl e—ar ra y;Tr ie—t re e;t ime co mple xity;w ord s egm en ta tio n dictionary
词二分查找的词典组织方式和算法,这些方法提高引言了分词速度。

以搜索树为基础数据结构的中文词
典表现出了良好的性能,文献[2]指出GB-2312

自动分词是中文信息处理系统的第一步,是对码的常用汉字共有6 768个,每个汉字都可以唯一中文文本进行语法语义分析的前提。

基于词典的地从区位码映射到1~6768间的一个序列码。

由匹配算法是目前主流搜索引擎公司采用的方法,主此可将双数组Trie树算法作为中文分词词典的数要通过索引结构作为词典的数据结构,包括索引据结构。

在基于双数组Trie树的中文词典研究方表、倒排表、散列表以及搜索树。

词库的好坏直接面,文献[3]提出优先处理分支节点多的节点以提影响分词器的速度,文献[1]提出了首字Hash+全高空间利用率;文献[4]提出了基于遗传算法和舍
收稿日期:2013一04—11;修回日期:2013一07—24 基金项目:北大方正集团有限公司数字出版技术国
家重点实验室开放课题资助项目(2012072011) 通讯地址:100876北京市北京邮电大学95信箱
Add res s:Ma il Box95,Be幻ing University of Post and Telec o mm un i ca ti o n,B e巧i n g l00876,P.R.China
128Computer Engineering&Science计算机工程与科学2013,35(9)
伍德思想的双数组Trie树改进优化方案,解决了+f1]一0,施sP[z+f2]=0,,施5P[z+f,j=0,局部最优解的问题。

,妇se[z+c。

]一o,那么这个z可以被接受,即确双数组Trie树的查找效率是o(行),其中押为定了沈sP[s]=z,插入结束。

否则进入步骤3。

待匹配字符长度,其查找性能良好,但是其插人性步骤3令z—z+1,进入步骤2。

能有待
提高,文献[5,6]指出,在调优之后,其插入为避免从头遍历数组寻找空节点,可利用空状性能仍为0(户铆2),其中研为字符集大小,p为常态构建基于双链表结构的空状态序列。

数。

本文
在介绍双数组Trie树的基本原理的基础
上,设计并实现了一个改进的基于双数组Trie树3改进的iDAT算
法的中文分词词典算法iDAT,在保留双数组Trie树的查找性能的同时,优化
和提高了插入效率,改善
3.1插入算法设计
了空间利用率。

3.1.1预备定义
2双数组Trie树基本原理及构造定义1数组节点集合N:N一{卵。

,卵。

,,刀,)
为所有数组节点集合,行,代表第i个节点,i为节点2.1双数组Trie树对应数组下标,Z为数组长度。

定义2空节点集合R:R一{r。

,r:,,,.,,双数组是用两个数组沈se[]与如ec志口来实现
,h)为N中所有空节点集合,,-i代表第歹个空Trie树,定义输入字符为c,从状态s转移到了状态
£,双数组Trie树满足以下条件:
节点,空节点长度为押Z。

幻sP[5]+f—f(1)
定义了子节点字符集S和最大子前缀s:

出gf是[£]一s(2)
s为待插入状态的最大子前缀,S一{s。

,s。

,,轧}
为o枷s的所有子节点字符集,其中&>乳一。

,足为其最大
值。

3.1.2 Hash表构造设置Hash表长度D—Z/
10(或取结果最接近

的素数),其中z为数组长度;设映射函数Hns^
(f。

)一£。

%D,f。

描述插入位置(下标u表示不同位王,
置),用链表法解决冲突节点。

Hash表每个节点F‘19ure l Do ub le ar ra y’r ri e s t r u c t u r e schematic的数据结构如图2所示,其中∞“竹£为该数组位置图1双数组Trie树结构示意图之前的空节点个数之和。

图1中,双数组Trie树中,状态s与f对应数
组下标。

当输入为c时,状态s向状态£转移,f一
int所在位置Int cOⅡ,Ⅱ
N0de’
下一节点地址
沈se[s]+f。

与6乜sP数组平行的c^ec志数组中
f矗ef志[f]一s,也就是说,幽Pc志数组记录着£状态从
F‘19ure2Structure of on e node l n Hash tabIe
哪个状态转换而来。

图2Hash表单个节点结构体示意图
2.2插入过程
3.1.3跨越函数及其算法插入过程的目标是确定6nsP[s]的值。

确定跨越函数isAccPpfn6zP(w,START)用于判断
沈se[s]的过程如下:是否快速跳过某6口sP值,S似RT为初始位置,插
假设fl,f2,,£l,.“,£。

为所有以s开始的后
入词为W,设叫一z删g珈为插入词长度:
缀状态,c,,c:,,cI,.”,c。

是分别与之对应状态转步骤1设△一£。

咖f^一£1,则△表示£。

h

换的输入。

对于数组的某位置i,当妇sP[i]一与£。

的间隔数,所以£。

的插入位置应为sTART~如Pc志[i]一。

时,说明i为空位置。

△£,检查f^Pf志[START一△£]是否小于o,若是
则步骤1设如se[s]初始值为z,z为所有可能说明该位置
为空,进入步骤2;否则返回false并跳
输入的个数之和。

出。

杨文川等:基于双数组Trie树的中文分词词典算法优化研究129
H&5^(S丁ART一△)一1,其中Hns^(S丁ART)表3.3基于双数组Trie树的中文分词词典示
例示STAR丁位置前面的空位置数,则&o“门£表示
3.3.1 基本结构
集合中首节点与尾节点之间的空节点数。


图3为基于Trie树的词典结构示例,其中,方△co“行f<硼一ze行g£^一2,则返回false并跳出;否则
进入步骤3。

框表示接受方框中的字(输入)后所到达的状态,椭步骤3妇s扩[s]一S丁AR丁一£。

h肼,其中
圆表示一个词的结束,也就是终止状态。

沈sPo[s]表示妇sP[s]的初值,记录该值返回true。

3.2iDAT构造算法
3.2.1iDAT算法流程
iDAT算法流程如
下:
步骤1采用前述双数组Trie树的优化方案,F’i g ur e3Schen la tl c o{d l c tl o n a r y b a se d o n d o u bI e array tr ie 进行字典初始化。

图3基于双数组Trie树的词典示意图步骤2设插入词为w,6nse[w]非空。

遍历
从图3可看出,可以识别的词包括:“人代
会”,
c^ec志表,取出以最大子前缀s为后缀的字符集
“人代会特供”,“人民”,“工程师”,“李文明”,
“李文
S一{sl,s2,,靠)。

明工程师”。

将图3的Trie树用双数组表示,结
果步骤3
调用i5Acce户抛6zP(W,START),若
如表1所
示,其中汉字映射的状态(index)值为:人
返回值为true,则找到如sPo[s]并进入步骤4;若
一1、代一2、会一3、民一4、特一5、供一6、工一7、程一8、师一9、李返回值为false,则进入步骤5。

一10、文一11、明一12。

步骤4令z一如sPo[s],若如Pf尼[T+s。

]<3.3.2词语查找过程
0,f^Pf矗[z+52 j<:o,,f^Pf忌Lz+5^1]<<O,下面结合一个中文词语(例如“工程师”)的查
f^Pf是[z+s。

]<o,则找到6口5P初值,并记录找,分析查找过程相关步骤(基于表1)。

pos(s,),返回。

否则进入步骤5。

步骤1先根据“工”的序列码7,找到状

步骤5根据公式6n5P[^+1]一一“变更“工”的下标7。

S姒RT的值,并返回执行步骤3。

步骤2再根据“程”的序列码8找到“工
程” 备注:当pDs(s。

)为0时,对步骤1中的Hash的下标妇sP[7]+8—22,同时根据以Pc忌[6乜sP[7] 表执行更新操作。

+8]一7,表明“工程”是某个词的一部分,且以“工”3.2.2算法分析开头,可以继续查找。

因为iDAT算法中调用的i5AfcP户£n6ze(w,
步骤3然后同理找到状态“工程师”,它的

START)为有限次的操作,调用算法的复杂度为常标为23,此时base[22]<o,查找结束。

数时间
0(1)。

iDAT算法最坏复杂度虽然为3.3.3插入算法示例
0(户行z2)量级(其中户为常数,行z为空节点个数),为了演示本文优化后的插入算法,假设表1即但是利用跳跃方法,降低了平均时间复杂度。

同为初始化之后的双数组Trie树词典。

首先本文遍时,为了减少Hash表的维护次数,iDAT选择从后历该数组空节点构建Hash表,为方便表示,不妨往前的插入来实现。

设映射至Hash表中的节点没有冲突。

Hash表构
T a b I e 1 schemati c tabIe of d ictio nary ba辨d o n doubIe a r r a y Tr ie
表l基于双数组Trie树的词典示意表
130Computer Engineering&Science计算机工程与科学2013,35(9)
造过程如3.1.2节所示,构建后的结果如表2所基于双数组的中文词典构造过程中,通过实际示。

设要插入“工程李”,“工程文”,“工程明”,“工的仿真验证发现,双数组空节点比例和插入节点个程队”,“工程款”,“工程项”,其中新出现汉字映射数与插入成功率之间存在一定关系。

空闲率定义的状态值为:队一13、款一14、项一15。

其余见3.3.1 为:
节。

空闲率一空节点数/数组总长度根据3.2节的iDAT算法,首先进入isAf—图4给出了在数组空闲率分别为3/4、2/3、1/ cPp搬6zP流程的最大子前缀s为“工程”,s的所有2的情况下,插入节点个数与插入成功率的关系。

后缀集合S为{‘‘师”,“李”,“文”,“明”,“队”,加
“款”,“项”)。

不妨设START为最后一个空节点∞
位置。

由表1可知,START一32,△一£。

‰小一连∞

+空闲事3,4
fl一15—9—6。

雷∞
铬+空闲率2,3
<
首先调用isAffPp£a6Zg(W,S了’ART),c^P以蜒∞+空闲宰1,2 [STAR丁一出]一f^Pf是[32—6]一26<o,表明该加
位置为空。

盘o“九£一H口娩(STAR丁)一o
10 15 202530354045
H口s^(S TA R丁一△£)一1一H&s^(32)一插入节点个数
Hn5^(26)一1—4,表明首末之间有4个空位。

由Figure4Relatlonship betw ee n1n s e r t l o n
于S集合有7个字符,所以叫一z删g娩=7。

所以s u c c e s s r a t e and in se rt io n n ode s number
图4插入成功率与插入节点个数关系图
扯o“以f<叫一跆卵g腑一2,此时快速跳过该S了、ART
位置,避免了其他字符的无谓比较。

观察图4中不同的空闲率可以得知,其插入
成功率会在某一插入数下产生阶跃的变化。

为T a b I e2H a s h ta bIe char act eriz ing t he number of b l a n k n o d e s
表2表征空节点个数的H弱h表此在插入算法设计中,本文设定子节点个数多的
词组优先插入;并结合当前数组空闲率情况选择位置C o u n t位置C o u n t
2 O139 是否在词尾生成新的空间,进一步提高插入算法
3 1 1410效率。

通过实际数据仿真验证,数组空闲率大致
4 1 1811 在2/3左右。

因此,当节点个数超过35时,便在
5 2 2612数组结尾开辟新的空间,新空间大小由子节点映
6 42713射编码范围决定。

8 5 2914结合上述方法与前面的iDAT算法,iDAT与
9 6 301 5 EDS两种方案的时间开销如表3所示。

从表3中
11 7 3116可以看出,当插入词条少时,iDAT方法优势并不
1283217明显,但是随着词条的增加,经过优化之后的
重复上述过程,最终确定在表的末尾增加新的iDAT插入方案会跳过更多的无谓比较,优势较为空间存放S中字符。

记录加s(s,)一32作为下一明显。

通过仿真验证,Hash表长度为双数组总
长次插入的START。

度的十分之一时,性能便可以达到要求。

T a b I e3COmp a ri so n of time co璐um pt io n
4对比实验与分析of i n靶r t io n proc麟
表3插入词条过程中两种方案的时间消耗比较ms 本节将对本文提出的iDAT方案与文献[6]
中优化后的方案(以下简称为EDS方案)进行仿
真实验对比,并对其中的数据进行分析。

仿真实
验环境是:CPU Corei7,内存16 GB,操作系统
为window 7,编程语言为Java,运行环境为
Eclipse。

所用词典为“搜狗”提供的开放中
文词库,总共包括157201个词条,应用双数
组Trie树将词典载入之后,幻sP(以Pf是)数组
长度为574 464。

杨文川等:基于双数组Trie 树的中文分词词典算法优化研究
131
[J].计算机工程与应用,2002,38(11):106—109.
5
结束语
[2] 李江波,周强,陈祖舜.汉语词典快速查询算法研究[J].中文
信息学报,2006,20(5):33—39.
本文改进了一个基于双数组Trie 树的中文分
[3] 王思力,张华平,王斌.双数组Trie 树算法优化及其应用研究
[J].中文信息学报,2006,20(5):24—30.
词词典算法性能,基于该词典可以实现快速的机械 [4] 王世坤,李昭滋,柯逍.基于遗传算法和舍伍德思想的双数组
分词以及信息检索中常用的拼写检查以及搜索提 Trie 树改进[J].计算机工程应用,2009,45(29):128—1396.
示等功能。

本方案在适当增加空间开销的基础上, 提高了其插人算法的效率。

插入效率的提高,使得 基于该数据结构的线上系统能够快速更新自身的 数据,有重要的实际意义。

杨文川(1970一),男,重庆人,博士,教
参考文献:
授,CCF 会员(E20000651lS),研究方向为 [1] Li Zhen —xing 。

Xu Ze —ping ,Tang Wei —qing ,et a1.FuIl bin —
大数据和网络信息分析。

E_mail :yang —
search maximal match algo rithm for Chinese word segmenta —
we nc hu an @b u pt .ed u .c n
tion[J].Jour nal of Computer Engineering and Applications ,
、 一‘
YA N G We 十chu 粕。

born in 1970,
2002,38(11):106—109.(in Chinese)
PhD ,p rof es sor ,C CF me mber(E20000651 1S ),h i s research [2] Li Jiang -b o ,Zh ou Q i a n g ,C h en Zu —Shun .A study fast al —
in te re st s i nc l u de big d ata ,a nd n et w or k information ana ly — gorithm for chinese dictionary 100k up
口].Jo ur na l of chinese
s i s .
Information Processing ,2006,20(5):33—39.(in Chinese)
[3] Wang Si —li ,Zh8ng Hua —pi n g ,Wa n g Bin .Research of optimiza —
tion double .array trie and its applicatio n[J ]. Jo ur na l of 刘健(1987一),男,辽宁东港人,硕士 Chinese Information Processing ,2006,20(5):24—30.(in Chi- 生,研究方向为大数据和网络信息分析。

nese)
E-mail :rik kiluc k777@sina .com
[4] Wang SK —k 叽,L i Sha0-z .,Ke)(ia0.DbubI}amy trie based
LIU Jian 。

b o r n in 1987,MS candi da te ,
genetic a190rithm and id 魄o f sherw00d
口].Computer Eng i n ∞r —
his research in te re st s i nc l u de b ig data ,and
ir 堰and Applications ,2009,45(29):128—130.(in CKnese)
tion analysis .
[5] Aoe J .An efficient digital search aIgo rithm by using doub —
le_array structure[J].IEEE Transactions software Engi —
于淼(1987一),女,河南宝丰人,硕士
ring ,1989,15(9):1066—1077.
e —e
[6] An implementation o{double-array t^e .[EB /OL].[1999一06—
生,研究方向为大数据和网络信息分析。

13].http ://1inux .thai .net /~thep /datrie /datrie .html .
E-m 枷:670927638@qq .com
Y U Mi
舯,born in 1987,MS cand ida te ,
附中文参考文献:
h e r research interests inc lu d e b i g dat a ,and
[1]李振星。

徐泽平,唐卫清,等.全二分最大匹配快速分词算法 ne t wo r k informat ion analysis .。

相关文档
最新文档