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

PHP 中文分詞與關鍵詞提取:SCWS 與 PhpAnalysis 實戰指南

     編輯:PHP 綜合知識

為什麼需要中文分詞?

中文無自然分詞符號(空格),搜索引擎、標籤雲、內容推薦、情感分析等場景都依賴準確分詞。PHP 生態中主流有兩類方案:C 擴展型(高性能)與純 PHP 實現(易部署)。

方案一:SCWS - 簡易中文分詞系統(C 擴展,高性能)

特點

  • 純 C 開發,提供 PHP 擴展與共享庫,切詞速度極快(百萬字/秒級)
  • 支援 GBK、UTF-8、BIG5 多編碼
  • 內建詞頻詞典、專有名詞/人名/地名/數字識別規則,準確率 90%~95%
  • 適合中小型搜索引擎、關鍵詞提取、文本分類等生產環境

PHP 整合示例

<?php
// 需安裝 scws 擴展:pecl install scws
// 或編譯共享庫後 php.ini 加入 extension=scws.so

$scws = new SCWS();
$scws->set_charset('utf-8');
$scws->set_dict('/path/to/dict.utf8.xdb');      // 主詞典
$scws->set_rule('/path/to/rules.utf8.ini');    // 模糊規則
$scws->set_ignore(true);                       // 忽略標點、數字等
$scws->send_text($text);

// 獲取權重前 10 關鍵詞
$topWords = $scws->get_tops(10);
$keywords = array_column($topWords, 'word');
// 輸出: ['關鍵詞1', '關鍵詞2', ...]

// 完整分詞結果(帶詞性)
$words = [];
while ($token = $scws->get_result()) {
    $words[] = $token; // ['word'=词, 'idf'=权重, 'attr'=词性]
}
$scws->close();
?>

資源下載

方案二:PhpAnalysis - 純 PHP 實現(零依賴,易部署)

特點

  • 無需編譯擴展,僅需引入類文件,虛擬主機也能跑
  • 基於機械分詞(正向/逆向最大匹配),實現簡單
  • 支援 UTF-8/GBK,提供 HTTP 服務模式
  • 缺點:大數據量下效率明顯低於 SCWS,適合輕量級應用

使用示例

<?php
require_once 'PhpAnalysis.class.php';

PhpAnalysis::$loadInit = false; // 禁用自動載入詞典(手動控制)
$pa = new PhpAnalysis('utf-8', 'utf-8', false);
$pa->LoadDict();                // 載入詞典(首次較慢,建議緩存)
$pa->SetSource($text);
$pa->StartAnalysis(false);      // false=不進行詞性標註,加快速度
$keywords = $pa->GetFinallyResult(); // 空格分隔的關鍵詞字符串
?>

資源下載

選型建議

維度SCWSPhpAnalysis
性能⭐⭐⭐⭐⭐ (C擴展)⭐⭐ (純PHP)
部署難度需編譯/安裝擴展引入文件即用
準確率90%~95%略低,依賴詞典覆蓋
適用場景高併發、大文本、生產核心服務低頻任務、共享主機、快速原型

進階:結合 Composer 管理

現代項目建議使用 Composer 封裝庫:

  • composer require hightman/scws (社區維護的 SCWS 封裝)
  • composer require fukuball/jieba-php (結巴分詞 PHP 移植版,純 PHP 且準確率極高,強烈推薦)

結語

若項目允許安裝擴展且追求極致性能,SCWS 是首選;受限於虛擬主機或需快速接入,PhpAnalysis 或 Jieba-PHP 更務實。實際上線前,請用業務真實語料測試分詞效果,必要時補充自定義詞典。

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