加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

使用PHP编写的一个简单的中文分词程序

发布时间:2023-08-10 13:08:47 所属栏目:PHP教程 来源:
导读:中文搜索引擎来说,中文分词是整个系统最基础的部分之一,因为目前基于单字的中文搜索算法并不是太好,当然,本文不是要对中文搜索引擎做研究,而是分享如果用 PHP 做一个站内搜索引擎,本文是这个系统中的一篇.

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

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

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

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章