dede如何自动获取关键词?

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

使用DedeCMS自带的关键词自动提取功能(基础方法)

这是最直接的方法,但需要确保你的模板和系统设置正确。

dede自动获取关键词
(图片来源网络,侵删)

操作步骤:

  1. 后台设置:

    • 登录DedeCMS后台。
    • 进入 “系统” -> “系统基本参数” -> “核心设置”
    • 找到 “关键字替换次数” 这个选项,将其设置为 12(0表示不替换,1表示替换一次,建议设置为1)。
    • 保存设置。
  2. 发布文章时勾选:

    • 在后台发布或编辑文章时,你会看到关键词输入框。
    • 在关键词输入框的下方,有一个 “自动获取关键词” 的复选框。
    • 勾选这个复选框,然后点击“确定”或“保存”。
    • 系统会自动从文章内容中提取出现频率较高的词语,并填充到关键词输入框中。

优点:

  • 无需修改任何文件,官方自带功能。
  • 操作简单,一键获取。

缺点:

dede自动获取关键词
(图片来源网络,侵删)
  • 提取效果一般,可能不够精准。
  • 需要每次发布文章时手动勾选。
  • 可能会提取出一些无意义的常用词(如“的”、“是”、“在”等,DedeCMS有内置词库过滤,但不一定完美)。

修改 arc.archives.class.php 文件(优化自动提取)

这个方法的核心是修改DedeCMS处理文章数据的底层类文件,让它在文章保存时自动提取关键词,无需手动勾选,并且可以优化提取算法。

操作步骤:

  1. 找到并打开文件:

    • 使用FTP或文件管理器,登录你的网站服务器。
    • 找到并打开以下文件: /include/arc.archives.class.php
  2. 定位关键代码:

    • 在文件中搜索 this->Keywords = ''; 这行代码,它通常在 SaveToDb() 函数附近,用于处理文章的附加数据(包括关键词)。
    • 你会找到类似这样的代码块:
    // 关键词处理
    if(empty($this->Keywords))
    {
        $this->GetKeywords($this->body);
    }
    $this->Keywords = preg_replace('/[,,\s]+/', ',', trim($this->Keywords));
    $this->Keywords = addslashes($this->Keywords);
  3. 优化代码(可选但推荐):

    dede自动获取关键词
    (图片来源网络,侵删)
    • 默认的 GetKeywords 函数提取效果可能不好,我们可以替换或增强它,一个更优化的方法是使用 CutStr 函数来截取,并结合正则表达式过滤掉无意义的词。
    • 将上面那段代码替换为以下优化后的代码:
    // 关键词处理 - 自动获取
    if(empty($this->Keywords))
    {
        // 从内容中提取关键词
        $this->GetKeywords($this->body);
        // 如果提取的关键词为空,或者数量太少,则使用一个更可靠的方法
        if(empty($this->Keywords) || count(explode(',', $this->Keywords)) < 3)
        {
            // 使用CutStr函数截取内容的前200个字符作为备选关键词源
            $auto_keywords = trim($this->GetKeywords($this->GetLitpic() . $this->body));
            // 如果还是为空,则用标题代替
            if(empty($auto_keywords)){
                $auto_keywords = $this->Title;
            }
            $this->Keywords = $auto_keywords;
        }
    }
    // 清理和格式化关键词
    // 1. 替换常见的分隔符为英文逗号
    $this->Keywords = preg_replace('/[,,\s]+/', ',', $this->Keywords);
    // 2. 移除开头和结尾的逗号
    $this->Keywords = trim($this->Keywords, ',');
    // 3. 移除重复的关键词(确保每个关键词只出现一次)
    $keyword_array = array_unique(explode(',', $this->Keywords));
    $this->Keywords = implode(',', $keyword_array);
    // 4. 转义特殊字符,防止SQL注入
    $this->Keywords = addslashes($this->Keywords);

    代码解释:

    • if(empty($this->Keywords)): 只有当关键词为空时才自动获取,避免覆盖手动输入的关键词。
    • count(explode(',', $this->Keywords)) < 3: 增加一个判断,如果自动获取的关键词太少(少于3个),则触发备用方案,从标题和内容中重新提取,确保关键词数量。
    • preg_replacearray_unique: 用来清理和去重,使关键词格式更规范。
    • addslashes: 增加安全性,防止SQL注入。
  4. 保存文件并测试:

    • 保存修改后的 arc.archives.class.php 文件。
    • 重新发布一篇文章,不要在后台填写任何关键词,保存后你会发现关键词字段已经被自动填充了。

优点:

  • 全自动:发布文章时无需任何额外操作。
  • 更智能:通过优化代码,提取的关键词质量和数量都有提升。
  • 保留手动输入:如果手动填写了关键词,系统不会覆盖它。

缺点:

  • 需要修改核心文件,升级DedeCMS时可能会被覆盖,需要重新修改。
  • 对技术有一定要求,操作不当可能导致网站出错。

使用DedeCMS标签在首页/列表页自动显示关键词(前端应用)

我们需要的不是后台自动填充,而是在前台的页面(如文章详情页、列表页)自动将文章中的关键词高亮或提取出来展示给用户,这可以通过DedeCMS的标签结合自定义函数实现。

示例:在文章详情页自动提取并显示相关关键词

  1. templets/default/article_article.htm(你的文章详情模板)中,找到合适的位置添加以下代码:

    <div class="keywords">
        <strong>本文标签:</strong>
        {dede:field name='keywords' runphp='yes'}
            if(@me != ''){
                $keywords = explode(',', @me);
                $result = '';
                foreach($keywords as $keyword){
                    // 这里可以给每个关键词加链接,比如链接到搜索结果页
                    $result .= "<a href='/search.php?kw=".urlencode($keyword)."' target='_blank'>".$keyword."</a> ";
                }
                @me = $result;
            }else{
                // 如果没有关键词,则尝试自动提取并显示(但不保存到数据库)
                @me = '暂无标签';
            }
        {/dede:field}
    </div>
  2. 更高级的自动提取(前端不保存): 如果你想在页面上展示一个自动提取的、但不保存到数据库的关键词列表,你需要一个自定义函数。

    • /include/extend.func.php 文件中添加以下函数:

      // 自动从内容中提取关键词并格式化(不保存到数据库)
      function GetAutoKeywords($body, $len = 500)
      {
          // 1. 过滤HTML标签
          $body = stripslashes($body);
          $body = preg_replace('/[<>]/', ' ', $body);
          // 2. 移除无意义的常用词,你可以根据需要扩展这个数组
          $filter_words = array('的', '了', '和', '是', '在', '我', '有', '为', '不', '人', '都', '一', '个', '上', '也', '很', '到', '说', '要', '去', '你', '会', '着', '没有', '看', '好', '自己', '这');
          $body = str_replace($filter_words, ' ', $body);
          // 3. 按空格分割成词组
          $words = preg_split('/\s+/', $body);
          // 4. 统计词频
          $word_count = array();
          foreach ($words as $word) {
              if (mb_strlen($word, 'UTF-8') > 1 && !is_numeric($word)) { // 只统计长度大于1的词
                  $word_count[$word] = isset($word_count[$word]) ? $word_count[$word] + 1 : 1;
              }
          }
          // 5. 按词频排序,并取前N个
          arsort($word_count);
          $top_keywords = array_slice(array_keys($word_count), 0, 10); // 取前10个关键词
          return implode(',', $top_keywords);
      }
    • 在模板中调用这个函数:

      <div class="auto-keywords">
          <strong>自动提取标签:</strong>
          {dede:field name='body' runphp='yes'}
              $body = @me;
              require_once(DEDEINC.'/dedecollection.class.php'); // 可能需要引入某些类
              @me = GetAutoKeywords($body);
              if(@me){
                  $keywords = explode(',', @me);
                  $result = '';
                  foreach($keywords as $keyword){
                      $result .= "<a href='/search.php?kw=".urlencode($keyword)."' target='_blank'>".$keyword."</a> ";
                  }
                  @me = $result;
              }else{
                  @me = '暂无标签';
              }
          {/dede:field}
      </div>

优点:

  • 灵活性极高,可以完全自定义关键词的展示方式。
  • 不影响数据库,纯粹用于前端展示。

缺点:

  • 实现相对复杂,需要懂PHP和DedeCMS标签。
  • 每次页面加载都会执行计算,如果文章内容很长,可能会对页面加载速度有轻微影响。

总结与建议

方法 优点 缺点 适用场景
后台勾选 简单、官方、无需修改文件 需手动操作,提取效果一般 临时使用、新手用户、少量文章
修改核心文件 全自动、效果优化、一劳永逸 修改核心文件,升级可能覆盖 强烈推荐,适合大多数网站,追求效率和SEO
前端标签 灵活、不影响数据库、展示效果好 实现复杂,可能影响性能 需要在页面上特殊展示关键词,如标签云、相关推荐

给你的建议:

  1. 首选方法二:这是最实用、最一劳永逸的解决方案,按照“方法二”的步骤修改 arc.archives.class.php 文件,可以让你在发布文章时彻底告别手动输入关键词的烦恼。
  2. 辅助方法三:如果想在文章页面上给用户展示更美观的标签,可以结合“方法三”来实现前端展示,但请注意,这和方法二不冲突,方法二是为了SEO和后台管理,方法三是为了前端用户体验。
  3. 谨慎使用方法一:除非你只是偶尔发几篇文章,否则不推荐依赖手动勾选。

希望这份详细的指南能帮助你成功实现DedeCMS的自动获取关键词功能!

-- 展开阅读全文 --
头像
dede修改关键词长度
« 上一篇 03-02
C语言中如何实现日期格式化?
下一篇 » 03-02
取消
微信二维码
支付宝二维码

目录[+]