以前有用过dedecms分词功能,经过测试还是不理想,后来经过一些处理得到的结果还是可以接受的,今天我再看到这款分词法,拿出来给大家看看,实例代码如下:
- <?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);
- }
-
-
-
-
-
- $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('Hello, World!'));
- ?>
进行中文分词的 PHP 类就在下面了,用 proc_open() 函数来执行分词程序,并通过管道和其交互, 输入要进行分词的文本, 读取分词结果. |