首页 > php开发 > php做的简单中文分词代码

php做的简单中文分词代码

中文搜索引擎来说,中文分词是整个系统最基础的部分之一,因为目前基于单字的中文搜索算法并不是太好,当然,本文不是要对中文搜索引擎做研究,而是分享如果用 PHP 做一个站内搜索引擎,本文是这个系统中的一篇.

进行中文分词的 PHP 类就在下面了,用 proc_open() 函数来执行分词程序,并通过管道和其交互,输入要进行分词的文本,读取分词结果.

<?php 
	class NLP{ 
	    private static $cmd_path; 
	    // 不以'/'结尾 
	    static function set_cmd_path($path){ 
	        self::$cmd_path = $path; 
	    }//开源代码phprm.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('你好啊, 世界!')); 
	 

站长经验:如果想做到搜索引擎分词,需要强大的词库及更智能化的汉语拼音以及写法,习惯等功能库.

教程网址:http://www.phprm.com/develop/fs5044.html

欢迎收藏∩_∩但请保留本文链接。

标签:php中文分词 php分词代码

相关文章

发表留言