相比成熟的分词类库,如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; } |