Discuz开发 discuz! X3.2的自动tag系统实现的方法

[复制链接]
ARCHY明星会员实名认证 发表于 2016-9-11 12:13:09 [Discuz开发] 显示全部楼层 |阅读模式 上一主题 下一主题
discuz使用视频教程

马上注册,一起探讨正确快速的建站方法

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
discuz是如何实现分词和产生标签的呢,有很多人不知道如何实现的,那下面就来给大家简单说明下思路:

Discuz X系列都有一个在线分词工具,具体的URI地址为:
  1. "http://keyword.discuz.com/related_kw.html?title=$subjectenc&content=$messageenc&ics=$SC[charset]&ocs=$SC[charset]"
复制代码


以本标题为例子 discuz! X3.2的自动tag系统实现的方法,下面为生成的uri地址: http://keyword.discuz.com/related_kw.html?title=discuz!%20X3.2%E7%9A%84%E8%87%AA%E5%8A%A8tag%E7%B3%BB%E7%BB%9F%E5%AE%9E%E7%8E%B0%E7%9A%84%E6%96%B9%E6%B3%95&content=discuz%E6%98%AF%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E5%88%86%E8%AF%8D%E5%92%8C%E4%BA%A7%E7%94%9F%E6%A0%87%E7%AD%BE%E7%9A%84%E5%91%A2%EF%BC%8C%E6%9C%89%E5%BE%88%E5%A4%9A%E4%BA%BA%E4%B8%8D%E7%9F%A5%E9%81%93%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E7%9A%84&ics=utf-8&ocs=utf-8 请求后返回的是XML格式的内容:
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <total_response>
  3.     <svalid>36000</svalid>
  4.     <keyword>
  5.     <info>
  6.         <count>4</count>
  7.         <errno>0</errno>
  8.         <nextuptime>1291287160</nextuptime>
  9.         <keep>0</keep>
  10.     </info>
  11.     <result>
  12.         <item>
  13.             <kw><![CDATA[的]]></kw>
  14.         </item>
  15.         <item>
  16.             <kw><![CDATA[是]]></kw>
  17.         </item>
  18.         <item>
  19.             <kw><![CDATA[discuz]]></kw>
  20.         </item>
  21.         <item>
  22.             <kw><![CDATA[如何]]></kw>
  23.         </item>
  24.     </result>
  25.     </keyword>
  26. </total_response>
复制代码

PHP具体调用代码为:
  1.     function get_dz_tag($subject , $message){
  2.         global $_SC;
  3.         $subjectenc = rawurlencode(strip_tags($subject));
  4.         $messageenc = rawurlencode(strip_tags(preg_replace("/\[.+?\]/U", '', $message)));

  5.         $data = @implode('', file("http://keyword.discuz.com/related_kw.html?title=$subjectenc&content=$messageenc&ics=$_SC[charset]&ocs=$_SC[charset]"));

  6.         if($data) {
  7.             $parser = xml_parser_create();
  8.             xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
  9.             xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
  10.             xml_parse_into_struct($parser, $data, $values, $index);
  11.             xml_parser_free($parser);

  12.             $kws = array();

  13.             foreach($values as $valuearray) {
  14.                 if($valuearray['tag'] == 'kw' || $valuearray['tag'] == 'ekw') {
  15.                     if(PHP_VERSION > '5' && $_SC['charset'] != 'utf-8') {
  16.                         $kws[] = siconv(trim($valuearray['value']), $_SC['charset'], 'utf-8');//???????
  17.                     } else {
  18.                         $kws[] = trim($valuearray['value']);
  19.                     }
  20.                 }
  21.             }

  22.             $return = '';
  23.             if($kws) {
  24.                 foreach($kws as $kw) {
  25.                     $kw = shtmlspecialchars($kw);
  26.                     $return .= $kw.' ';
  27.                 }
  28.                 $return = trim($return);
  29.             }
  30.             return $return;
  31.          }
  32.     }
复制代码

当然这只是一个在线分词工具,当然你也可以使用PHP扩展进行操作:如SCWS 中文分词。

scws 有在线 api 和 扩展版两个方式:

api代码为:

    function Scws($string){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_POST, TRUE);
        curl_setopt($ch, CURLOPT_URL, "http://www.ftphp.com/scws/api.php");
        curl_setopt($ch, CURLOPT_POSTFIELDS, "data={$string}&respond=json");

        ob_start();
        curl_exec($ch);
        $content = ob_get_contents();
        curl_close($ch);
        ob_clean();
        $content  = json_decode($content ,true);
        return $content;   
    }
具体扩展版请参考scws文档:http://www.xunsearch.com/scws/




上一篇:Discuz模板里面时间戳函数的应用 数据库的数字转换成个性化时间
下一篇:Discuz后台 文件misc_seccode.php包含漏洞

大神点评3

风吹叶儿落 发表于 2016-10-9 21:17:30 [Discuz开发] 显示全部楼层
看看也好,爱学习
东莞http://hao158.net/上海http://021snw.net/蒲友论坛http://puyouluntan.com/
samfall 发表于 2016-11-19 16:45:17 [Discuz开发] 显示全部楼层
很给力,希望分享更多给力的帖子啊。
wuyin731 发表于 2016-11-20 12:35:55 [Discuz开发] 来自手机 显示全部楼层
这个具体怎么用
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

快速回复 返回顶部 返回列表