PHP汉语高速分词的原理和源码

php中文网
发布: 2016-06-13 12:35:19
原创
1036人浏览过

PHP中文高速分词的原理和源码

一、正向最大匹配算法和反向最大匹配算法的缺点

正向最大匹配算法:从左到右将待分词文本中的几个连续字符与词表匹配,如果匹配上,则切分出一个词。但这里有一个问题:要做到最大匹配,并不是第一次匹配到就可以切分的。举个例子:中华人民共和国今天成立了。从左到右扫描,要分别检索:中,中华,中华人,中华人民,中华人民共,中华人民共和,中华人民共和国今,今,今天,今天成,成,成立,成立了,了。14 次检索词库,最后的切分结果:中华人民共和国/今天/成立了。所以,当遇到长词时,要反复检索多次数据库,效率非常差。还有,一个更严重的问题是:词的最大长度是有限制的,为了兼顾算法的效率,不可能将最大词长定的非常大,这就会导致更长的词汇不能正确切分。

反之,反向最大匹配算法,则会将长词分开,造成错误切分。比如,上面的待切分文本,从右向左扫描,要分别检索:了,立了,立,成立,天成立,天,今天,今天国,国,和国,共和国,民共和国,民,人民,华人民,华,中华。17 词查询数据库,最后切分结果:中华/人民/共和国/今天/成立/了。将中华人民共和国切分成了3 个词。

二、克服最大匹配算法的缺点的算法

为了克服最大匹配算法的低效和不能切分长词,将所有的能组成词汇的汉字,建立索引,作为词的首字母。然后将每个汉字开头的词汇,分成一类,按词长排序。词库结构如下:

分词时,由汉字找到该字开头的词组(长度3000左右的线性检索),然后按由长到短5,4,3,2的顺序检索词库,和待分词语句对比(线性),如果有匹配,则切分为一个词,然后继续匹配下一个词。通过这种方式,大大提高了检索词库效率,解决了任意长词汇匹配问题。

在PHP算法的实现上,为了加快在线匹配速度,上面的词库结构,用PHP的联想数组的形式实现,全部加载到内存。为了灵活增删词库,做了个字符串处理程序,自动生成PHP联想数组结构的词库。详细实现算法,见PHP源码。

PHP分词源码下载:http://www.box.net/shared/gryspzppsb

相关标签:
php
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号