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

- 自动为采集的文章添加关键词标签:这是最常见的需求,根据文章内容自动提取关键词,并生成链接到相关关键词列表页的标签。
- 采集时自动调用[field:tags/]标签:在采集规则或模板中,直接使用
[field:tags/]这个系统变量,让它自动显示文章已有的标签。
这两种需求都围绕着 这个核心,下面我将分步详细说明如何实现。
核心思路
无论是哪种情况,核心步骤都是:
- 采集文章内容:从目标网站抓取文章标题、内容等。
- 中提取关键词:这是最关键的一步,DedeCMS 本身不带强大的中文分词功能,所以我们需要借助插件或修改代码来实现。
- 根据关键词生成标签:将提取出的关键词,保存到数据库的
dede_taglist和dede_arctag表中,并与文章ID关联。 - 在模板中调用标签:使用
{dede:tag}或[field:tags/]等标签在文章页或列表页显示出来。
安装并使用“关键词提取”插件(推荐)
这是最简单、最安全的方法,通过安装现成的插件来增强 DedeCMS 的功能。
安装插件
市面上有很多优秀的 DedeCMS 关键词提取插件,DedeCMS 智能关键词自动提取插件”等,你可以在 DedeCMS 官方论坛、模板网站或搜索引擎中搜索下载。

下载后,通常包含以下文件:
- 插件主程序文件(通常是
.php) - 安装说明文件(
readme.txt) - 可能包含 SQL 文件(用于更新数据库)
安装步骤通常如下:
- 上传文件:将插件文件上传到你的 DedeCMS 根目录下的
dede/文件夹里。 - 执行安装:在浏览器中访问
http://你的网站/dede/插件安装文件名.php,根据提示完成安装。 - 后台配置:登录 DedeCMS 后台,在“系统” -> “插件管理”中找到你刚安装的插件,进行相关设置,比如设置关键词的数量、是否自动生成等。
配置采集规则以使用插件
安装好插件后,它通常会提供一个系统变量,[field:keywords_auto/],你需要在采集规则的“列表内容模板”中使用它。
操作步骤:

- 进入 DedeCMS 后台,点击“采集” -> “采集管理”。
- 选择或新建一个采集节点,点击“修改”。
- 找到“模板”这个文本框。
- 在模板中,除了常规的
[field:title/]、[field:writer/]、[field:content/]等,你需要添加一个用于接收自动生成关键词的字段,通常插件会提供一个固定的变量名,[field:keywords_auto/]。 - 在 DedeCMS 的数据库中,确保你的
dede_archives表(文章主表)有一个字段用来存储这些自动生成的关键词,如果插件没有自动创建,你可能需要手动添加一个keywords_auto字段(类型为VARCHAR,长度255左右)。 - 在模板中,将
[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 底层知识。
修改采集保存程序
目标是:在文章被成功保存到数据库后,立即执行关键词提取和标签生成逻辑。
-
找到核心文件: 采集的核心处理逻辑在
dede/co_export.php文件中,你需要找到文章入库成功的地方,通常是在一个循环处理完所有字段之后。 -
添加代码: 在
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); } } // --- 结束添加你的自动标签逻辑 --- // ... 其他后续处理 ... } -
编写
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个关键词,用逗号分隔 } - 简单实现(基于词库):你可以准备一个关键词词库(txt文件,每行一个词),然后用
修改 extend.helper.php 以支持 [field:tags/]
如果你想在列表页使用 [field:tags/],必须修改 include/helpers/extend.helper.php。
-
打开
extend.helper.php文件。 -
在文件末尾,添加如下函数:
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字符串。
- 这段代码会根据文章ID
总结与建议
| 方法 | 优点 | 缺点 | 适用人群 |
|---|---|---|---|
| 插件法 | 简单、安全、功能稳定,有现成的技术支持。 | 可能需要付费,或功能不够定制化。 | 绝大多数用户,特别是新手和希望快速解决问题的用户。 |
| 手动修改法 | 高度定制化,可以完全按照自己的逻辑实现。 | 技术门槛高,需要懂 PHP、DedeCMS 底层,且容易出错,升级麻烦。 | 有一定开发能力,希望深度定制或插件无法满足特定需求的开发者。 |
给你的建议:
- 首选插件法:先去搜索一下是否有合适的“关键词提取”插件,这能帮你节省大量时间和精力,是最稳妥的方案。
- 理解原理:即使你使用插件,也最好理解上面“手动修改法”的原理,这样在插件出现问题或需要微调时,你才能知道从哪里入手。
- 注意编码:确保你的网站、数据库、采集目标网站、插件都使用统一的字符编码(强烈推荐 UTF-8),否则关键词提取和显示会出现乱码问题。
- 测试:无论使用哪种方法,都务必在测试环境下充分测试,确认采集、关键词提取、标签生成和显示都正常无误后,再应用到正式网站。
