PHPCMSV9调用discuz中文分词

代码笔记   2016-03-30 21:01:10

不同于使用自己的服务器进行分词,Discuz!在线中文分词服务是基于API返回分词结果的。在phpcmsV9中,我们只需要一个函数即可方便地进行分词、关键词提取。

以下是根据Discuz!在线分词服务API写的函数,测试可正常运行:

文件路径:

api/get_keywords.php

 

<?php

/**
 * 获取关键字接口
 */
defined('IN_PHPCMS') or exit('The resource access forbidden.'); 
define('API_URL_GET_KEYWORDS', 'http://tool.phpcms.cn/api/get_keywords.php');
$number = intval($_GET['number']);
$data = $_POST['data'];
echo getTags($data);
function getsegment($data){
$segment = gws_main::load_sys_class('segment');
$fulltext_data = $segment->get_keyword($segment->split_result($data));
return $fulltext_data;
}
 
function get_keywords($data, $number = 3) {
$data = trim(strip_tags($data));
    if(empty($data)) return '';
gws_main::load_sys_class('FanJianConvert', '', 0);
$data=FanJianConvert::tradition2simple($data);
$http = gws_main::load_sys_class('http');
if(CHARSET != 'utf-8') {
$data = iconv('utf-8', CHARSET, $data);
} else {
$data = iconv('utf-8', 'gbk', $data);
}
$http->post(API_URL_GET_KEYWORDS, array('siteurl'=>SITE_URL, 'charset'=>CHARSET, 'data'=>$data, 'number'=>$number));
if($http->is_ok()) {
if(CHARSET != 'utf-8') {
return trim($http->get_data());
} else {
return trim(iconv('gbk','utf-8',$http->get_data()));
}
}
  return '';
}
 
 
 
 
function getTags($title,$content=""){
        $subjectenc = str_replace(' ','',strip_tags($title));
        $messageenc = rawurlencode(strip_tags(preg_replace("/\[.+?\]/U", '',$content)));
        $subjectenc =substr($subjectenc,0,120);
        $messageenc=substr($messageenc,0,1200);
$data = @implode('', file("http://keyword.discuz.com/related_kw.html?title=$subjectenc&ics=utf-8&ocs=utf-8"));
        $kws = array();
        $Tags="";
if($data) {
                $parser = xml_parser_create();
                xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
                xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
                xml_parse_into_struct($parser, $data, $values, $index);
                xml_parser_free($parser);
 
                foreach($values as $valuearray) {
                        if($valuearray['tag'] == 'kw' || $valuearray['tag'] == 'ekw') {
                                $kw =trim($valuearray['value']);       
                                $kws[] =$kw ;
                        }
                }
        }
foreach($kws as $i){
$Tags.=$i." ";
}
 
return $Tags;
}
 
 

?>


其中getsegment为调用pc系统自带分词

get_keywords为远程调用phpcms的分词api,但是不够稳定

getTags为调用discuz分词