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

PHP 權重計算類:基於 Trie 樹的高效關鍵詞匹配與評分

     編輯:PHP 相關知識

內容審核、標籤推薦、垃圾訊息偵測等場景常需對文本進行關鍵詞匹配並計算權重。本文介紹一個基於 Trie 字典樹實作的 Weight 類別,支援多規則、多策略的靈活評分。

核心特性

  • Trie 字典樹:O(m) 時間複雜度匹配 (m 為關鍵詞長度)
  • 多規則支援:同一關鍵詞可對應不同分類/權重
  • 彈性評分策略:預設取最大權重,可擴展加權平均、TF-IDF 等
  • 記憶體高效:共用前綴節點,適合大規模關鍵詞庫

類別結構

class Weight {
    protected $dict = [[]];      // Trie 節點陣列
    protected $items = [];       // 待分析文本集合
    protected $matches = [];     // 匹配結果快取
    protected $show = [];        // 最終評分結果
    protected $lastRule = '';    // 最後使用的評分規則

    // 導入待分析文本
    public function newItems($items) { ... }

    // 導入規則表並建立字典
    public function newTable(array $table) { ... }

    // 取得評分結果
    public function getShow($rule = 'max') { ... }

    // 核心:建立字典樹
    private function genDict($word, $key) { ... }

    // 核心:匹配文本
    public function matchWord($line) { ... }
}

使用範例

$items = [
    'chinaisbig',
    'whichisnot',
    'totalyrightforme',
];

// 規則表:格式 "分類,關鍵詞|權重,關鍵詞|權重..."
$table = [
    'china,is|small',
    'china,big|me',
    'china,is|big,which|not,me',
    'totaly|right,for,me',
];

$weight = new Weight();
$weight->newItems($items);
$weight->newTable($table);

// 取得最大權重分類
$result = $weight->getShow('max');
print_r($result);
/*
Array
(
    [0] => Array ( [0] => me )        // china,big|me 命中
    [1] => Array ( [0] => not )       // which|not 命中
    [2] => Array ( [0] => right )     // totaly|right 命中
)
*/

擴充應用場景

效能優化建議

  1. 大規模詞庫 (10萬+) 建議序列化字典樹至檔案/Redis,避免每請求重建
  2. 使用 SplFixedArray 替換陣列節點,降低記憶體佔用
  3. 批次處理時複用 Weight 實例,僅呼叫 newItems() 更新文本
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
場景規則設計評分策略
敏感詞過濾分類: 關鍵詞|嚴重度max (最高嚴重度)
文章自動標籤標籤: 關鍵詞|關聯度加權平均 / Top-N
垃圾郵件偵測規則: 特徵詞|權重總分閾值判斷
搜尋排序加權欄位: 關鍵詞|Boost值BM25 + 自定義權重