php做的简单中文分词代码

作者:袖梨 2022-06-24

中文搜索引擎来说, 中文分词是整个系统最基础的部分之一, 因为目前基于单字的中文搜索算法并不是太好. 当然, 本文不是要对中文搜索引擎做研究, 而是分享如果用 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 编译后的可执行文件和词典在当前目录):

require_once('NLP.php');
var_dump(NLP::tokenize('你好啊, 世界!'));
?>


站长经验,

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

相关文章

精彩推荐