php做的简单中文分词代码
中文搜索引擎来说,中文分词是整个系统最基础的部分之一,因为目前基于单字的中文搜索算法并不是太好,当然,本文不是要对中文搜索引擎做研究,而是分享如果用 PHP 做一个站内搜索引擎,本文是这个系统中的一篇.
进行中文分词的 PHP 类就在下面了,用 proc_open() 函数来执行分词程序,并通过管道和其交互,输入要进行分词的文本,读取分词结果.
<?php class NLP{ private static $cmd_path ; // 不以'/'结尾 static function set_cmd_path( $path ){ self:: $cmd_path = $path ; } //开源代码phpfensi.com 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( '你好啊, 世界!' )); ?>站长经验: 如果想做到搜索引擎分词,需要强大的词库及更智能化的汉语拼音以及写法,习惯等功能库.
查看更多关于php做的简单中文分词代码 - php高级应用的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did30230