dede采集如何自动添加标签?

99ANYc3cd6
预计阅读时长 21 分钟
位置: 首页 DEDE建站 正文

这里的“自动标签”通常指两种情况:

dede 采集自动标签
(图片来源网络,侵删)
  1. 自动为采集的文章添加关键词标签:这是最常见的需求,根据文章内容自动提取关键词,并生成链接到相关关键词列表页的标签。
  2. 采集时自动调用[field:tags/]标签:在采集规则或模板中,直接使用 [field:tags/] 这个系统变量,让它自动显示文章已有的标签。

这两种需求都围绕着 这个核心,下面我将分步详细说明如何实现。


核心思路

无论是哪种情况,核心步骤都是:

  1. 采集文章内容:从目标网站抓取文章标题、内容等。
  2. 中提取关键词:这是最关键的一步,DedeCMS 本身不带强大的中文分词功能,所以我们需要借助插件或修改代码来实现。
  3. 根据关键词生成标签:将提取出的关键词,保存到数据库的 dede_taglistdede_arctag 表中,并与文章ID关联。
  4. 在模板中调用标签:使用 {dede:tag}[field:tags/] 等标签在文章页或列表页显示出来。

安装并使用“关键词提取”插件(推荐)

这是最简单、最安全的方法,通过安装现成的插件来增强 DedeCMS 的功能。

安装插件

市面上有很多优秀的 DedeCMS 关键词提取插件,DedeCMS 智能关键词自动提取插件”等,你可以在 DedeCMS 官方论坛、模板网站或搜索引擎中搜索下载。

dede 采集自动标签
(图片来源网络,侵删)

下载后,通常包含以下文件:

  • 插件主程序文件(通常是 .php
  • 安装说明文件(readme.txt
  • 可能包含 SQL 文件(用于更新数据库)

安装步骤通常如下:

  1. 上传文件:将插件文件上传到你的 DedeCMS 根目录下的 dede/ 文件夹里。
  2. 执行安装:在浏览器中访问 http://你的网站/dede/插件安装文件名.php,根据提示完成安装。
  3. 后台配置:登录 DedeCMS 后台,在“系统” -> “插件管理”中找到你刚安装的插件,进行相关设置,比如设置关键词的数量、是否自动生成等。

配置采集规则以使用插件

安装好插件后,它通常会提供一个系统变量,[field:keywords_auto/],你需要在采集规则的“列表内容模板”中使用它。

操作步骤:

dede 采集自动标签
(图片来源网络,侵删)
  1. 进入 DedeCMS 后台,点击“采集” -> “采集管理”。
  2. 选择或新建一个采集节点,点击“修改”。
  3. 找到“模板”这个文本框。
  4. 在模板中,除了常规的 [field:title/][field:writer/][field:content/] 等,你需要添加一个用于接收自动生成关键词的字段,通常插件会提供一个固定的变量名,[field:keywords_auto/]
  5. 在 DedeCMS 的数据库中,确保你的 dede_archives 表(文章主表)有一个字段用来存储这些自动生成的关键词,如果插件没有自动创建,你可能需要手动添加一个 keywords_auto 字段(类型为 VARCHAR,长度255左右)。
  6. 在模板中,将 [field:keywords_auto/] 的值赋给文章的关键词字段,采集规则模板的写法可能需要配合 PHP 代码来实现。

示例模板代码片段:

{dede:loop}
    <dd>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
        <!-- 获取文章内容,用于插件分析 -->
        [field:content/]
    </dd>
    {/dede:loop}

关键点:很多插件的工作方式是,在你保存文章(包括采集保存)时,自动触发一个钩子,分析文章内容并更新 keywords 字段,你可能不需要在采集模板里直接写 [field:keywords_auto/],而是需要在后续步骤中配置。

关联到文章并显示

采集完成后,文章的关键词字段应该已经被插件自动填充了。

  • 在文章页显示标签: 在文章内容页模板(通常是 article_article.htm)中,使用以下标签来显示文章的所有标签,并且每个标签都是可点击的链接。

    {dede:tag type='current'}
    <a href='[field:link/]'>[field:tagname/]</a>
    {/dede:tag}
    • type='current':表示获取当前文章的标签。
  • 在列表页显示标签: 在列表页模板(通常是 list_article.htm)中,使用 [field:tags/]

    [field:tags/]

    注意[field:tags/] 标签需要你修改 include/helpers/extend.helper.php 文件才能正常工作,找到 GetTags() 函数,确保它存在并且代码正确。


手动修改代码实现(进阶)

如果你不想用插件,或者想自己定制功能,可以手动修改代码,这需要你有一定的 PHP 和 DedeCMS 底层知识。

修改采集保存程序

目标是:在文章被成功保存到数据库后,立即执行关键词提取和标签生成逻辑。

  1. 找到核心文件: 采集的核心处理逻辑在 dede/co_export.php 文件中,你需要找到文章入库成功的地方,通常是在一个循环处理完所有字段之后。

  2. 添加代码: 在 co_export.php 文件中,找到类似 $arc->Save() 的代码执行成功后,在其后面插入你自己的代码。

    示例代码结构:

    // ... 采集和保存文章的代码 ...
    // 假设 $arcid 是新保存文章的ID
    if($arc->Save())
    {
        $arcid = $arc->ArcID; // 获取新文章的ID
        // --- 开始添加你的自动标签逻辑 ---
        // 1. 获取文章内容
        $body = $arc->body; // $arc->body 通常包含文章内容
        // 2. 调用你的关键词提取函数
        //    你需要自己写一个 MyExtractKeywords 函数,或者调用某个分词库
        $keywords = MyExtractKeywords($body);
        if(!empty($keywords))
        {
            // 3. 将关键词分割成数组
            $keywordArray = explode(',', $keywords);
            // 4. 循环处理每个关键词,添加到标签库
            foreach ($keywordArray as $keyword)
            {
                $keyword = trim($keyword);
                if(empty($keyword)) continue;
                // 调用 DedeCMS 自带的标签添加函数
                // AddTag($tag, $aid, $typeid);
                AddTag($keyword, $arcid, $typeid);
            }
        }
        // --- 结束添加你的自动标签逻辑 ---
        // ... 其他后续处理 ...
    }
  3. 编写 MyExtractKeywords 函数: 这是最难的部分,你需要一个能从一段文本中提取中文关键词的函数。

    • 简单实现(基于词库):你可以准备一个关键词词库(txt文件,每行一个词),然后用 strpos 或正则去匹配,这种方法效率低,准确率也不高。
    • 推荐使用现成的 PHP 分词库scws (简易中文分词系统) 或 pseg4php (PHP 中文分词),你需要将分词库集成到你的项目中。

    使用 SCWS 的伪代码示例:

    // 你需要先安装并配置好 SCWS
    function MyExtractKeywords($text) {
        // 初始化分词对象
        $so = scws_new();
        $so->set_charset('utf-8'); // 确保编码正确
        $so->set_dict(DedeCMS路径 . '/scws/dict/dict.xdb'); // 设置词典路径
        $so->set_rule(DedeCMS路径 . '/scws/etc/rules.ini'); // 设置规则路径
        $so->set_ignore(true); // 忽略标点符号
        $so->send_text($text);
        $top = $so->get_result();
        $so->close();
        // 提取权重最高的前 N 个词作为关键词
        $keywords = array();
        foreach ($top as $word) {
            if($word['idf'] > 10 && strlen($word['word']) > 1) { // 过滤掉单字和低频词
                $keywords[] = $word['word'];
            }
        }
        return implode(',', array_slice($keywords, 0, 5)); // 返回前5个关键词,用逗号分隔
    }

修改 extend.helper.php 以支持 [field:tags/]

如果你想在列表页使用 [field:tags/],必须修改 include/helpers/extend.helper.php

  1. 打开 extend.helper.php 文件。

  2. 在文件末尾,添加如下函数:

    if ( ! function_exists('GetTags'))
    {
        function GetTags($aid)
        {
            global $dsql;
            $tags = '';
            $query = "SELECT tag FROM `dede_taglist` WHERE aid='$aid' ";
            $dsql->Execute('me',$query);
            while($row = $dsql->GetArray('me'))
            {
                $tags .= ($tags=='' ? '<a href="/tags.php?/'.$row['tag'].'">'.$row['tag'].'</a>' : ', <a href="/tags.php?/'.$row['tag'].'">'.$row['tag'].'</a>');
            }
            return $tags;
        }
    }
    • 这段代码会根据文章ID $aid,从 dede_taglist 表中查询出所有标签,并生成带有链接的HTML字符串。

总结与建议

方法 优点 缺点 适用人群
插件法 简单、安全、功能稳定,有现成的技术支持。 可能需要付费,或功能不够定制化。 绝大多数用户,特别是新手和希望快速解决问题的用户。
手动修改法 高度定制化,可以完全按照自己的逻辑实现。 技术门槛高,需要懂 PHP、DedeCMS 底层,且容易出错,升级麻烦。 有一定开发能力,希望深度定制或插件无法满足特定需求的开发者。

给你的建议:

  1. 首选插件法:先去搜索一下是否有合适的“关键词提取”插件,这能帮你节省大量时间和精力,是最稳妥的方案。
  2. 理解原理:即使你使用插件,也最好理解上面“手动修改法”的原理,这样在插件出现问题或需要微调时,你才能知道从哪里入手。
  3. 注意编码:确保你的网站、数据库、采集目标网站、插件都使用统一的字符编码(强烈推荐 UTF-8),否则关键词提取和显示会出现乱码问题。
  4. 测试:无论使用哪种方法,都务必在测试环境下充分测试,确认采集、关键词提取、标签生成和显示都正常无误后,再应用到正式网站。
-- 展开阅读全文 --
头像
dede水印图片路径如何正确设置?
« 上一篇 03-19
dede a 读取权限
下一篇 » 03-19
取消
微信二维码
支付宝二维码