php做的简单中文分词代码
中文搜索引擎来说, 中文分词是整个系统最基础的部分之一, 因为目前基于单字的中文搜索算法并不是太好. 当然, 本文不是要对中文搜索引擎做研究, 而是分享如果用 PHP 做一个站内搜索引擎. 本文是这个系统中的一篇
进行中文分词的 PHP 类就在下面了, 用 proc_open() 函数来执行分词程序, 并通过管道和其交互, 输入要进行分词的文本, 读取分词结果.
<?php class NLP{ private static $cmd_path; // 不以'/'结尾 static function set_cmd_path($path){ self::$cmd_path = $path; } private function cmd($str){ $descriptorspec = array( 0 => array("pipe", "r"), 1 => array("pipe", "w"), ); $cmd = self::$cmd_path . "/ictclas"; $process = proc_open($cmd, $descriptorspec, $pipes); if (is_resource($process)) { $str = iconv('utf-8', 'gbk', $str); fwrite($pipes[0], $str); $output = stream_get_contents($pipes[1]); fclose($pipes[0]); fclose($pipes[1]); $return_value = proc_close($process); } /* $cmd = "printf '$input' | " . self::$cmd_path . "/ictclas"; exec($cmd, $output, $ret); $output = join("n", $output); */ $output = trim($output); $output = iconv('gbk', 'utf-8', $output); return $output; } /** * 进行分词, 返回词语列表. */ function tokenize($str){ $tokens = array(); $output = self::cmd($input); if($output){ $ps = preg_split('/s+/', $output); foreach($ps as $p){ list($seg, $tag) = explode('/', $p); $item = array( 'seg' => $seg, 'tag' => $tag, ); $tokens[] = $item; } } return $tokens; } } NLP::set_cmd_path(dirname(__FILE__)); ?>
使用起来很简单(确保 ICTCLAS 编译后的可执行文件和词典在当前目录):
<?php require_once('NLP.php'); var_dump(NLP::tokenize('你好啊, 世界!')); ?>
站长经验,
如果想做到搜索引擎分词,需要强大的词库及更智能化的汉语拼音以及写法,习惯等功能库。
本文链接:http://www.phprm.com/frame/php1005201.html
收藏随意^^请保留教程地址.