首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 實現文章關鍵詞自動提取:分詞算法、詞庫過濾、工程落地全流程

     編輯:PHP 相關知識

自動提取關鍵詞三步走

  1. 分詞:將標題+正文切分為詞彙並統計詞頻。
  2. 過濾:結合停用詞表、領域詞庫,去除無意義詞(「的」、「我們」等)。
  3. 選取:按詞頻、位置權重(標題>正文)、詞長等策略輸出 Top-K。

主流中文分詞方案對比

方案語言特點PHP 可用性
ICTCLAS (中科院)C++/Java權威、準確率高需擴展/服務化,門檻高
HMM (隱馬爾可夫)C++/Java統計建模,無詞庫依賴同左
SCWS (簡單中文分詞)C + PHP 擴展開源、詞頻統計、新詞發現✅ pscws 擴展,1.0.4 穩定
HTTPCWS (張宴)C + PHPICTCLAS API + 逆向最大匹配 + 標點過濾⚠ 僅 Linux,未移植 Windows
DEDECMS 內置分詞PHP純 PHP 實現,無需擴展✅ 即用,但準確率一般
Discuz! APIPHP (遠程)騰訊優化詞庫,效果較好✅ HTTP 調用,有頻率限制

實戰測試:DEDECMS vs Discuz API

測試文本:ThinkPHP 官方停止對 2.0 版本支持的公告。

DEDECMS 分詞結果 (詞頻降序)

標題: THINKPHP(1) 官方(1) 即將(1) 停止(1) 對(1) 2.0(1) 版本(1) 的(1) 支持(1)
正文: 版本(12) 的(12) 和(8) ThinkPHP(5) 2.0(5) 也(3) 2.2(3) 2.1(3) 開發(3) 3.0(2) 是(2) 快速(2) 到(2) 發布(2) 維護(2) 之前(2) 了(2) 新版(2) 支持(2) 框架(2) 同時(2) 從(2) ...

後處理策略:去停用詞 → 按正文詞頻排序 → 優先保留標題中出現的詞 → 取 Top 5:
版本、ThinkPHP、2.0、支持、停止

Discuz API 結果

的、快速、版本升級、開發、用戶

首詞為停用詞「的」,偏離主題,但詞熱度高。

工程落地建議

  1. 輕量項目:直接用 DEDECMS 分詞類 + 自維護停用詞表 (200-500 詞),滿足 80% 需求。
  2. 中型項目:編譯 pscws 擴展,載入 dict.utf8.xdb 詞庫,開啟多線程,QPS 可達千級。
  3. 高準確度需求:接入 Discuz/百度/騰訊 NLP API,或自建 Elasticsearch + IK Analyzer 集群。
  4. 混合策略:標題分詞權重 ×3、正文首段 ×2、其餘 ×1;TF-IDF 進一步抑制高頻無意義詞。

關鍵代碼片段:DEDECMS 分詞類調用

<?php
require_once 'SplitWord.class.php';  // DEDECMS 分詞類
$sp = new SplitWord();
$sp->SetSource($title . ' ' . $body);
$sp->StartAnalysis();
$keywords = $sp->GetFinallyResult(' ', 10);  // 空格分隔,取前 10
// 進一步過濾停用詞
$stopWords = ['的','了','和','是','在','我們','你們','它們'];
$kwArr = array_diff(explode(' ', $keywords), $stopWords);
$final = implode(',', array_slice($kwArr, 0, 5));
echo $final;  // 版本,ThinkPHP,2.0,支持,停止
?>

避坑指南

  • 分詞前**務必清洗 HTML 標籤、實體、腳本、樣式**,否則產生大量垃圾詞。
  • 停用詞表需根據業務域動態維護(電商、醫療、技術博客停用詞截然不同)。
  • 單純詞頻易被刷版面攻擊,生產環境引入 TF-IDF 或 TextRank 圖模型。
  • 中文分詞無銀彈,**人工審核 + 算法推薦** 是成熟 CMS 的標配模式。

從「能用」到「好用」,關鍵在詞庫與業務規則的持續打磨。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved