IT技术博客大学习 共学习 共进步

排头兵PHP中文分词,纯PHP版实现

排头兵 @ Talk 2010-08-05 09:52:57 浏览 3,661 次
PHP中文分词类,主要作用是分析语料库,找出核心主题词,是网页相似度引擎的子模块

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

建议继续学习

  1. 怎样用好Google进行搜索 (阅读 15,662)
  2. 淘宝搜索:定向抓取网页技术漫谈 (阅读 9,362)
  3. 简析搜索引擎中网络爬虫的搜索策略 (阅读 7,282)
  4. 几种常见的基于Lucene的开源搜索解决方案对比 (阅读 5,981)
  5. 基于用户行为分析的搜索引擎自动性能评价 (阅读 5,602)
  6. 百度搜索URL参数解析 (阅读 5,581)
  7. 用Sphinx快速搭建站内搜索功能 (阅读 5,564)
  8. 一个简单的中文分词程序 (阅读 5,380)
  9. Xapian搜索体系结构 (阅读 5,161)
  10. 附近地点搜索初探 (阅读 5,141)