排头兵PHP中文分词,纯PHP版实现
浏览:2708次 出处信息
相比成熟的分词类库,如Lucene,中科院之流 没有任何优势,本类库是实验性项目,效率及算法[trie]并无特殊
暂时支持utf8编码
线上测试版即将出来 http://www.paitoubing.cn/pdb/paiswc.php
ps:我的博客托管服务器,暂时不能访问外网,没法安装apc扩展……..
先贴上切词函数,目前只能识别数据字典的词条分词,其他方面的可以扩展.
Trie数据字典保存在apc共享缓存中,根据词条首字母$key 序列化$value 了trie子树,序列化的效率真他妈低,影响了整体分词的效率
以下是代码片段: $result =’’; function pai_scw($text="") { global $result; $textlen = mb_strlen($text); $trienode = false; $find = array(); $wordrootposition = 0;//词根位置 $prenode = false; $word = ’’; for ($i = 0; $i < $textlen;$i++) { $character = mb_substr($text,$i,1); $success = false; if(empty($word)) { $trienode = unserialize(apc_fetch($character,$success)); //unserialize 效率低 //当$character 没有一个可以匹配的字符时,直接跳过,不做倒退匹配 if(!$success) { continue; $result = $result.$character; } } //匹配词首 if($success) { $word = $word .$character; continue; } if(isset($trienode[’c’][$character])) { $word = $word .$character; // echo "isset".$word."\n"; $trienode = $trienode[’c’][$character]; if($prenode == 0) { $wordrootposition = $i; } $prenode = true; if($trienode[’w’]) { $find[] = array(’position’=>$wordrootposition,’word’ =>$word); $result = $result."-".$word."-"; } } else { /*@example 词条:北京奥委会 *@example 判断分词:北京 奥运 *@example 应该回溯到位置 奥的位置 */ $i = $i - mb_strlen($word); $prenode = false; $word = ’’; //添加分词结果 $result = $result.$character; } } return $find; } |
建议继续学习:
- 怎样用好Google进行搜索 (阅读:14783)
- 淘宝搜索:定向抓取网页技术漫谈 (阅读:8272)
- 简析搜索引擎中网络爬虫的搜索策略 (阅读:6053)
- 几种常见的基于Lucene的开源搜索解决方案对比 (阅读:4698)
- 一个简单的中文分词程序 (阅读:4552)
- 用Sphinx快速搭建站内搜索功能 (阅读:4476)
- 基于用户行为分析的搜索引擎自动性能评价 (阅读:4462)
- 互联网网站的反爬虫策略浅析 (阅读:4194)
- 附近地点搜索初探 (阅读:4195)
- 百度搜索URL参数解析 (阅读:4152)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:学习:一个并发的Cache
后一篇:Fastbit中的bitmap索引算法 >>
文章信息
- 作者:排头兵 来源: 排头兵 @ Talk
- 标签: 分词 搜索
- 发布时间:2010-08-05 09:52:57
建议继续学习
近3天十大热文
- [71] Twitter/微博客的学习摘要
- [68] IOS安全–浅谈关于IOS加固的几种方法
- [66] 如何拿下简短的域名
- [65] android 开发入门
- [64] find命令的一点注意事项
- [63] Go Reflect 性能
- [61] 流程管理与用户研究
- [61] Oracle MTS模式下 进程地址与会话信
- [59] 图书馆的世界纪录
- [58] 读书笔记-壹百度:百度十年千倍的29条法则