- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一种对英文字符串进行分词方法
一种对英文字符串进行分词的方法
摘要:对Aho-Corasick算法略作改变,用一个收词丰富的有优先级的字典构造Aho-Corasick树,并利用它对英文字符串进行字典匹配。对匹配的结果,利用后缀词按优先级排序的特点设计了一个高效的分词算法。实验证明该算法具有高效性。
关键词:字典匹配; 英文分词; 后缀词
中图分类号:TP311文献标志码:A
文章编号:1001-3695(2007)07-0052-03
0引言??
分词(Words Segmentation)是词法分析、语义分析、自然语言理解的基础。中文分词是当前计算语言学的一个重点和难点。英文分词在一般情况下要简单一些,因为英语的词与词之间有间隔符,如空格和标点。但是在一些特殊情况下,英文分词也存在与中文分词类似的难题。如果要对数据库的表和字段进行数据库模式映射(Schema Mapping)或语义理解时,它们的名称是必须考虑的重要元素。这些名称一般由多个词组成,并且词与词之间一般不会有分隔符,而要理解这些名称语义的前提就是对它们进行分词。??
对英文字符串的分词算法非常少见。为此,本文在字典匹配算法基础上,设计了一种高效、快速的英文分词算法。本文采用的字典匹配算法是Aho-Corasick(以下简称AC)算法[1]。首先将一个收集词汇比较全面的词典组织成一个AC树(一种特殊的自动机),然后利用这一自动机将英文字符串进行字典匹配。由于字典收集的词汇比较全面,这一字典匹配的结果可以看成是英文字符串在所有英文单词上的全切分。对字符串全切分的结果,本文给出了一种高效、快速的按词汇优先级进行分词的算法。??
1AC算法简介??
2分词算法??
字典匹配的结果是字符串在字典上的全切分,因此词与词之间可能会互相交叠。在进行分词时则不允许词交叠,因此需要确定一种对全切分结果词之间的取舍标准。为此,规定字典中的词是有优先级的,并且规定字典中的词按优先级从高到低顺序排列。对全切分结果进行分词时,如果有词交叠,则保留最高优先级的词而删除与其交叠的低优先级词。??
对于用有优先级的字典进行分词,有以下定理和推论:??
定理1如果字典中词A的优先级大于词B,则A不能是B的子串。??
证明:用反证法。如果A是B的子串,分词中如果有B,由于A是B的子串,则必有A且与B交叠;又因为A的优先级大于B,B必被删除。因此,A不能是B的子串。证毕。??
对于不满足定理1的词典,可以先进行预处理,使其满足这一要求。??
对于定理1,有如下的一个重要推论:??
推论1A、B都是字典中的词且B是A的真后缀,则B的优先级必然低于A。??
该算法首先将字典按要求准备好,并存放到按优先级排序的数组DICT中,即数组下标小的优先级高。在用AC算法进行字典匹配时,按状态转移顺序将Output表写到数组ALLPARTITION中,这个数组实质上是一个双向链表。同时,将Output表写到ALLPARTITION之前,还要对Output表进行排序,使低优先级词排序在前,然后才将其按顺序写到ALLPARTITION中。最后得到的ALLPARTITION数组显然就是AC算法全切分结果。ALLPARTITION数组数据项的结构如下:??
struct PARTITION_WORD??
{??
int index; //词在字典DICT中的下标号??
int start; //词在字符串T中的开始位置??
int end; //词在字符串T中的结束位置??
int suffix_num; ??
//本状态所表示的字符串的所有后缀是词的个数??
int left; /*词左边的尚未删除的词在ALLPARTITION中的下标号,如果词在ALLPARTITION中的下标号为0,或从0到这个词(可不含)都被删除,则为-1*/??
int right; /*词右边的尚未删除的词在ALLPARTITION中的下标号,如果词是ALLPARTITION中的最后一个词,或从这个词(可不含)到最后一个词都被删除,则为全切分词的个数*/??
short deleted; //0表示词未被删除,1表示词已被删除??
}??
为了能够按照上述要求组织全切分结果和节省内存,取消了AC算法中的Output表,并对AC树中的状态节点进行了改进。在状态节点结构中,增加两个结构项,即当前状态节点所对应的字符串的所有后缀是词的个数suffix_num,及当前状态节点所对应的字符串是否为词Output。若是则为该词在字典中的下标号,否则为-1。AC状态节点的结构定义
文档评论(0)