Heim > Backend-Entwicklung > PHP-Tutorial > discuz! 2.5x 3.0x的自动tag系统是如何实现的?

discuz! 2.5x 3.0x的自动tag系统是如何实现的?

WBOY
Freigeben: 2016-06-06 20:50:10
Original
1200 Leute haben es durchsucht

最近有个项目要实现自动产生标签,发现discuz! 3.0x已经实现了这个功能,想问问discuz是如何实现分词和产生标签的。 例如:http://www.playsc.com/forum/forum.php?mod=viewthread&tid=359314&extra=page%3D1 以上链接地址有标签:SPL, Hero, 三星, 季后赛 这些标签都是自动产生的。这样的功能如何实现?discuz!在哪里实现这个功能?
主要是怎么实现的分词?哪里有算法?特别是php如何实现?
(我把discuz!下来了但是只找到tag.php类里面updatedata($appid, $data)函数,没有上一步分词函数)

回复内容:

最近有个项目要实现自动产生标签,发现discuz! 3.0x已经实现了这个功能,想问问discuz是如何实现分词和产生标签的。 例如:http://www.playsc.com/forum/forum.php?mod=viewthread&tid=359314&extra=page%3D1 以上链接地址有标签:SPL, Hero, 三星, 季后赛 这些标签都是自动产生的。这样的功能如何实现?discuz!在哪里实现这个功能?
主要是怎么实现的分词?哪里有算法?特别是php如何实现?
(我把discuz!下来了但是只找到tag.php类里面updatedata($appid, $data)函数,没有上一步分词函数)

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

以本标题为例子 discuz! 2.5x 3.0x的自动tag系统是如何实现的?,下面为生成的uri地址: http://keyword.discuz.com/related_kw.html?title=discuz!%202.5x%203.0x%E7%9A%84%E8%87%AA%E5%8A%A8tag%E7%B3%BB%E7%BB%9F%E6%98%AF%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E7%9A%84%EF%BC%9F&content=discuz!%202.5x%203.0x%E7%9A%84%E8%87%AA%E5%8A%A8tag%E7%B3%BB%E7%BB%9F%E6%98%AF%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E7%9A%84%EF%BC%9F&ics=utf-8&ocs=utf-8 请求后返回的是XML格式的内容:

<code class="lang-xml"><?xml version="1.0" encoding="utf-8" ?>
<total_response>
    <svalid>36000</svalid>
    <keyword>
    <info>
        <count>4</count>
        <errno>0</errno>
        <nextuptime>1291287160</nextuptime>
        <keep>0</keep>
    </info>
    <result>
        <item>
            <kw></kw>
        </item>
        <item>
            <kw></kw>
        </item>
        <item>
            <kw></kw>
        </item>
        <item>
            <kw></kw>
        </item>
    </result>
    </keyword>
</total_response>
</code>
Nach dem Login kopieren

PHP具体调用代码为:

<code class="lang-php">    function get_dz_tag($subject , $message){
        global $_SC;
        $subjectenc = rawurlencode(strip_tags($subject));
        $messageenc = rawurlencode(strip_tags(preg_replace("/\[.+?\]/U", '', $message)));

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

        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);

            $kws = array();

            foreach($values as $valuearray) {
                if($valuearray['tag'] == 'kw' || $valuearray['tag'] == 'ekw') {
                    if(PHP_VERSION > '5' && $_SC['charset'] != 'utf-8') {
                        $kws[] = siconv(trim($valuearray['value']), $_SC['charset'], 'utf-8');//???????
                    } else {
                        $kws[] = trim($valuearray['value']);
                    }
                }
            }

            $return = '';
            if($kws) {
                foreach($kws as $kw) {
                    $kw = shtmlspecialchars($kw);
                    $return .= $kw.' ';
                }
                $return = trim($return);
            }
            return $return;
         }
    }
</code>
Nach dem Login kopieren

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

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

api代码为:

<code class="lang-php">    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;    
    }
</code>
Nach dem Login kopieren

具体扩展版请参考scws文档:scws

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage