php中文分词插件phpanalysis、结巴、SCWS对比
今天来介绍一下三款php的中文分词插件,每一款都有自己的特色,满足不同的业务需求。
一、phpanalysis
PHPAnalysis分词程序使用居于unicode的词库,使用反向匹配模式分词,理论上兼容编码更广泛,并且对utf-8编码尤为方便。 由于PHPAnalysis是无组件的系统,因此速度会比有组件的稍慢,不过在大量分词中,由于边分词边完成词库载入,因此内容越多,反而会觉得速度越快,这是正常现象,PHPAnalysis的词库是用一种类似哈希(Hash)的数据结构进行存储的,因此对于比较短的字符串分词,只需要占极小的资源,比那种一次性载入所有词条的实际性要高得多,并且词库容量大小不会影响分词执行的速度。
下载后解压将此目录放在web目录下,访问demo.php
<?php // 严格开发模式 ini_set('display_errors', 'On'); ini_set('memory_limit', '64M'); error_reporting(E_ALL); $t1 = $ntime = microtime(true); $endtime = '未执行任何操作,不统计!'; function print_memory($rc, &$infostr) { global $ntime; $cutime = microtime(true); $etime = sprintf('%0.4f', $cutime - $ntime); $m = sprintf('%0.2f', memory_get_usage()/1024/1024); $infostr .= "{$rc}: {$m} MB 用时:{$etime} 秒<br />\n"; $ntime = $cutime; } header('Content-Type: text/html; charset=utf-8'); $memory_info = ''; print_memory('没任何操作', $memory_info); require_once 'phpanalysis.class.php'; $str = (isset($_POST['source']) ? $_POST['source'] : ''); $loadtime = $endtime1 = $endtime2 = $slen = 0; $do_fork = $do_unit = true; $do_multi = $do_prop = $pri_dict = false; if($str != '') { //岐义处理 $do_fork = empty($_POST['do_fork']) ? false : true; //新词识别 $do_unit = empty($_POST['do_unit']) ? false : true; //多元切分 $do_multi = empty($_POST['do_multi']) ? false : true; //词性标注 $do_prop = empty($_POST['do_prop']) ? false : true; //是否预载全部词条 $pri_dict = empty($_POST['pri_dict']) ? false : true; $tall = microtime(true); //初始化类 PhpAnalysis::$loadInit = false; $pa = new PhpAnalysis('utf-8', 'utf-8', $pri_dict); print_memory('初始化对象', $memory_info); //载入词典 $pa->LoadDict(); print_memory('载入基本词典', $memory_info); //执行分词 $pa->SetSource($str); $pa->differMax = $do_multi; $pa->unitWord = $do_unit; $pa->StartAnalysis( $do_fork ); print_memory('执行分词', $memory_info); $okresult = $pa->GetFinallyResult(' ', $do_prop); print_memory('输出分词结果', $memory_info); $pa_foundWordStr = $pa->foundWordStr; $t2 = microtime(true); $endtime = sprintf('%0.4f', $t2 - $t1); $slen = strlen($str); $slen = sprintf('%0.2f', $slen/1024); $pa = ''; } $teststr = "2010年1月,美国国际消费电子展 (CES)上,联想将展出一款基于ARM架构的新产品,这有可能是传统四大PC厂商首次推出的基于ARM架构的消费电子产品,也意味着在移动互联网和产业融合趋势下,传统的PC芯片霸主英特尔正在遭遇挑战。 11月12日,联想集团副总裁兼中国区总裁夏立向本报证实,联想基于ARM架构的新产品正在筹备中。 英特尔新闻发言人孟轶嘉表示,对第三方合作伙伴信息不便评论。 正面交锋 ARM内部人士透露,11月5日,ARM高级副总裁lanDrew参观了联想研究院,拜访了联想负责消费产品的负责人,进一步商讨基于ARM架构的新产品。ARM是英国芯片设计厂商,全球几乎95%的手机都采用ARM设计的芯片。 据悉,这是一款采用高通芯片(基于ARM架构)的新产品,高通产品市场总监钱志军表示,联想对此次项目很谨慎,对于产品细节不方便透露。 夏立告诉记者,联想研究院正在考虑多种方案,此款基于ARM架构的新产品应用邻域多样化,并不是替代传统的PC,而是更丰富的满足用户的需求。目前,客户调研还没有完成,“设计、研发更前瞻一些,最终还要看市场、用户接受程度。”"; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>分词测试</title> </head> <body> <table width='90%' align='center'> <tr> <td> <hr size='1' /> <form id="form1" name="form1" method="post" action="?ac=done" style="margin:0px;padding:0px;line-height:24px;"> <b>源文本:</b> <a href="dict_build_new.php" target="_blank">[更新词典]</a> <br/> <textarea name="sourc...
点击查看剩余70%
网友评论0