基于二级Hash的快速最长匹配分词算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4. 性能分析和实验
4.1 存储空间分析
首字 Hash 表的长度由标准的汉字编码 的个数决定。GB2312 汉字编码包括一级、 二级汉字共 6763 个,所以表的长度固定为 6763。每个首字 Hash 表项占用 7 个 byte, 因此整个首字 Hash 表占用 6763×7byte,约 47Kb 存储空间。
长度 Hash 表的长度由以某字开头的词 条的所有长度决定。统计发现,本文所使用 的词典最大长度为 7,因此长度 Hash 表的 最长为 6,统计表明平均长度为 4。每个长 度 Hash 表项占用 5 个 byte,所以长度 Hash 表占用 6763×4×5,约 132Kb 存储空间。
-3-
http://www.paper.edu.cn
4.2 算法复杂性分析
由于使用了二级 Hash 结构,无论什么 词语,只需要两次定位就能确定应该包含该 词语的词条队列,然后只需要查询该词条队 列是否包含该词语。词条队列中的词语已经 根据词典顺序进行了升序排列,如果采用二 分查找,可以在 log2N(N 为词条队列长度) 的时间复杂度内得出结果。
根据(1)的分析,可知当有 21 万词条时, 平均每个词条队列有 21 万/27052,约为 8 个词条。为此可以得出以下结论:基于二级 Hash 词典的查询性能平均查询次数为 log28 = 3 次。明显优于文献[2] 的 12.32 次,略低 于于文献 [6] 的 2.89 次。由于在构造词典 时加入了词条长度的信息,所以在最长匹配 算法上有其它词典无法比拟的优势。
表 1 词条分布情况


字1
2
3 4 5 67


条 2610 116532 45309 35193 12721 2069 352 数
2.3 分词词典构造
分词词典是汉语自动分词系统的一个 基本组成部分。自动分词系统所需要的汉语 词条信息都要从分词词典中获取,分词词典 的组织结构和查询速度直接影响到分词系 统的速度。本文提出一种新的词典组织方 式,根据词条的首字和词条的长度进行二级 Hash,再把词条放入对应的队列中。词典由 首字 Hash 表、长度 Hash 表和词条队列三部 分组成。 (1) 首字 Hash 表
3.2 算法流程举例
如待切分的字符串“西南交大学新校 区”。取得“西”字的机内码,根据汉字在编 码表中的偏移量计算公式(1)计算其在首字 Hash 表的中的索引位置,得到“西”字对应的 长度 Hash 表。通过查找长度 Hash 表,得到 以“西”字为首二字词、三字词、四字词和五 字词四个词条队列。根据最长匹配原则,从 待切分的字符串中截取长度为五的字符串 “西南交大新”,使用二分查找没有在五字词 的词条队列中发现该字符串。重新截取长度 为四的字符串“西南交大”,使用二分查找在 四字词的词条队列中发现了该字符串,应此 “西南交大”是一个正确切分出的词条。对剩 余部分,从“新”字开始,用同样的方法可以 切分出第二个词条“新校区”。
offset = (ch1 – 0xB0) * 94 + (ch2 – 0xA1) (1)
其中,offset 代表某汉字在编码表中的 位置, ch1、ch2 代表汉字的内部码。
2.2 汉语词的特点
-1-
http://www.paper.edu.cn
词是最小的、能独立活动的、有意义的 语言成分,它是构成和分析语言的基本单 位,汉语的词是一个开放的集合,其数量可 以认为是接近无穷的,没有哪一部词典能够 收集所有的词。文献[1]收录了 10 万多词条, 文献[3]收录了 12 万多词条。本论文采用的 词库收录了 21 万多词条,通过对这些词条 的统计分析,可以发现不同字开头的词条数 目变化很大,有多达数百的(比如“多”、“大” 等),也有一个的(比如“褙”、“褚”)或者没 有。这些词条的长短也不尽相同,有一个字 的单字词,也有 7 个字的多字词(比如“中 华人民共和国”),其中以二字词为最,具体 情况见表 1。
度,而且满足最长匹配的分词需求。
2.二级 Hash 词典的设计
为了提高分词的准确度,基于词典的分 词方法通常采用最长匹配算法。实验证明, 如果分成的词语越长、分出的词语越少,分 词的精确度就越高。通常基于 Hash 方法的 词典只对词语的首字符进行了 Hash,这样 的词典虽然能实现快速查询,但是如果采用 最长匹配算法,则需要对词典进行多次查 询,影响算法速度。 为了使词典更适合最 长匹配算法,通过对对汉字编码体系、汉语 词语特点的分析,针对传统 Hash 词典的缺 点,本文设计了一种基于二级 Hash 的词典 结构。
2.1 汉字编码体系
汉字在计算机内部是以内码的形式进 行存储的,汉字内码是汉字在汉字信息处理 系统中最基本的表达形式,它与汉字交换 码、汉字区位码有一定的对应关系。由于自 定义编码顺序的特殊性,因而,可通过计算 偏移量的方法来定位该汉字在编码表中任 意的位置。国标 GB2312 汉字编码表共收录 了 6763 个汉字,汉字在编码表中的偏移量 计算公式如下:
1. 引言
在中文信息处理中, 如机器翻译、自动 分类等等,词是最小的具有独立活动的有意 义的语言成分。然而中文文本在计算机内部 表示时,不像英文中词与词之间都有空格隔 开,中文词与词之间没有明显的分隔标记, 而是连续的汉字串。因此, 自动识别词的边 界, 将连续的汉字串切分为带有分割标记的 词串将是实现中文信息处理的首要问题。
大提高最长匹配分词的效率。长度 Hash 表
每一项的结构如下,其中 Length 为该项词
条的长度,P1 为指向相应词条队列的指针。
Length P1
(3) 词条队列
词条队列包含一组首字相同、长度相同
的词条。一个词的首字和长度决定了它所在
的词条队列,因此当查询一个词是否在现有
词典中时最终变成查询该词是否存在于特
首字 Hash 表
长度 Hash 表 词

L=2 L=3 L=4 L=5


电影 电视网 电视直播

电视 电视机 电影公司

电脑 电路版 电算中心

电子 电烙铁
最短词条的长度——L,进行如下操作: 从待分词文本的当前位置截取长度为 L 的子字符串,用二分查找算法查询该子 字符串是否存在于长度为 L 的词条队列 中,如果存在,那么子字符串为分出的 词语,Pos=Pos+length,继续从①执行; 如果都不存在,则 Pos=Pos+1,继续从 ①执行; ③ 分词结束。
3.1 算法流程
给定一段文本,先做如下预处理:将原 文中英文字符,汉语标点符号和数字等用空 格代替,连续的只加一个空格。这利用了标 点符号、数字和外文字母都是中文词自然切 分标志的特点。分词算法如下所示: ① 取待切分字符串中当前待切分位置 Pos
的字符作为首字,如果 Pos 大于字符串 的总长度则分词结束,否则根据汉字在 编码表中的偏移量计算公式(1) 算出其 在首字 hash 表中的位置,如果对应结 构中 flag 为 true,则分出一个单字词, Pos=Pos+1,继续从①执行;如果 flag 为 false,找到 P1 指针所指的长度 Hash 表并执行②; ② 在长度 Hash 表中,从最长词条的长度到
Ch
P1
Flag
(2) 长度 Hash 表
对于不同的首字来说,以其开头的词不
仅数量变化很大,而且没有明显的特征规
律。如果想要只通过首字 Hash 表进行查找
不仅需要多次比较,而且不容易找出最长的
词条。为了减少查询、比较次数,同时最精
确的找出最长词条,本文对以某个字开头的
所有词的长度进行第二次 Hash,将以某个
词条队列
图 1 词典结构
3. 基于二级 Hash 的快速最长匹 配算法
基于词典的分词方法,按照不同长度优 先匹配的情况,可以分为最长(最大)匹配 和最短(最小)匹配。统计结果显示最长匹 配的精确度远大于最短匹配,因此在实际应 用中大都使用最长匹配算法。由于使用了基 于二级 Hash 的词典,最长匹配分词算法的 实现更容易,切分速度更块。下面给出基于 二级 Hash 的快速最长匹配算法的实现。
现行常用的词典数据结构主要基于 Hash 方法和索引树方法,根据汉字编码的 一对一映射关系,实现了词典的快速查询, 但两种方法在构造词典时都没有考虑词语 的长度这个关键信息,因此不适合最长匹配 算法。本文在 Hash 方法的基础上,提出一 种新的词典结构,不仅对词语的首字进行 Hash,而且根据词语的长度进行二次 Hash。 实验证明,新的词典结构不仅提高了分词速
4.3 实验结果
Lucene 是著名的开源软件,其中包含有 一个中文分词模块被广泛使用。本实验用 Lucene 的中文分词模块与本文所采用的基 于二级 Hash 的快速最长匹配算法进行比 较。实验内容包括两个方面的测试:
(1) 对词典中所有词条依次查询 1 次。 (2) 在网络上任取一段文本(大小约 2M),用两种方法分别进行切分。 实验环境 CPU:1GHz;RAM:256M。
http://www.paper.edu.cn
基于二级 Hash 的快速最长匹配分词算法
殷鹏程,谭献海
西南交通大学,四川成都(610031)
E-mail:ypc_swjtu@163.com
摘 要:中文分词是中文信息处理的基础,在海量的中文信息处理中,分词速度至关重要。 本文根据中文单词的特点,通过分析现有词典分词算法,提出了一种基于二级 Hash 的快速 最长匹配分词算法。试验结果表明,该算法保证了分词的最长匹配,同时提高了分词的速度, 适用于小型搜索引擎和自动文本分类等应用。 关键词:中文分词;Hash 词典;最长匹配
字开头的所有词条散列在不同的队列上,比
如以“电”开头的所有词条电影、电视、电路、
电视迷、电视网、电视机、电视公司、电视
直播、电视接收、电算中心、电视接收机,
会被散列到二字词、三自词、四字词、五字
词这四个队列上。这样增加了队列个数,减
少了队列长度,不仅提高了查询命中率,而
且由于最长词条的长度是已知的,所以能极
现有的分词算法可分为三大类:基于词 典的分词方法、基于理解的分词方法和基于 统计的分词方法。无论哪种分词方法都需要 将大量时间用于将待切分语句的切分为可 能的词,然后再依据统计或语法方面的规则 对切分出的词进行处理,得到一种最有可能 的切分结果。如果能加快初始切分的速度, 对于提高整个分词算法的速度也会有很大 帮助。由于词语信息都以词典的形式存储, 所以在整个汉语分词过程中, 都需要频繁地 访问词典以获得词语信息。因此词典的查询 速度是整个分词系统处理效率的关键所在。
由首字 Hash 表的长度和长度 Hash 表的 平局长度,可以得出一共有 6763×4=27052 个词条队列。每个词条队列为存储词条需要 额外的 2 个 byte 表示队列的长度,因此所有 词条队列需要 27052×2,约 53Kb 的存储空 间。
可以得出,除去词条所占存储空间,为 了维持词典结构,需要 47+132+53= 232Kb 的附加存储空间,低于文献[6]的存储 空间。
表 2 时间统计
分词算法
测试 1/ms
基于二级 Hash 最大匹 137

Lucene
156
பைடு நூலகம்测试 2/ms 1205 1321
表 3 分词结果统计
分词算法
分词个数
基于二级 Hash 最大匹配 788982
Lucene
806596
平局词长 2.7 2.6
从表 2 可以看出,基于二级 Hash 的快 速最长匹配算法比 Lucene 的中文分词模块 在速度上有了较大的提高;从表 3 可以看 出,基于二级 Hash 的快速最长匹配算法分 出的词汇更少,平均词长更长,因此从某种 程度上可以认为基于二级 Hash 的快速最长 匹配算法分词结果比 Lucene 的中文分词模 块更精确,效率更高。
对于首字的 Hash 采用文献[3]中提到的 方法,GB2312 编码表中的每一个汉字在首 字 Hash 表中都有唯一的一项与其对应,首 字 Hash 表中每一项的结构如下,其中 Ch 为该汉字,P1 是指向二级 Hash 表的指针, flag 指示以该字为前缀的词条是否为单字
词,如果是单字词,则 P1 为 null。
定的词条队列里。词条队列的结构如下,其中 k 为该词条队列的长度,word1,word2, word3…wordk 为 K 个词条。队列中的词条根 据词典排序规则进行升序排列。
K
word1,word2,word3…wordk
最终词典在内存中的形式如图 1 所示
-2-
http://www.paper.edu.cn
相关文档
最新文档