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

PHPAnalysis 中文分詞核心類深度解析:配置、分詞、詞典管理

     編輯:PHP 綜合知識

PHPAnalysis 是 PHP 生態中廣泛使用的中文分詞庫,採用逆向最大匹配算法,兼容性強、無需擴展、純 PHP 實現。本文深度解析核心配置變量、分詞流程、詞典管理、關鍵 API。

核心配置變量

變量默認值說明設置方法
resultType1結果類型:1=全部,2=詞典詞+單字+英文,3=詞典詞+英文SetResultType()
notSplitLen5句子最小切分長度直接賦值
toLowerfalse英文轉小寫直接賦值
differMaxfalse最大切分模式消岐(二元詞)直接賦值
unitWordtrue嘗試合並單字(新詞識別)直接賦值
differFreqfalse高頻詞優先消岐直接賦值

核心 API 詳解

1. 構造函數

public function __construct(
    $source_charset = 'utf-8',   // 輸入編碼
    $target_charset = 'utf-8',   // 輸出編碼
    $load_all = true,            // 已廢棄
    $source = ''                 // 直接傳入文本
)

2. 設置源文本

public function SetSource($source, $source_charset = 'utf-8', $target_charset = 'utf-8')
// 返回 bool,建議使用此方法而非構造函數傳文本

3. 執行分詞

public function StartAnalysis($optimize = true)
// $optimize: 分詞後是否優化結果(合並數字、英文等)

4. 獲取結果:多種格式

// 關鍵詞提取(按頻率)
public function GetFinallyKeywords($num = 10)  // 返回 "詞1,詞2,詞3"

// 完整分詞結果(字符串)
public function GetFinallyResult($spword = ' ')  // 分隔符默認空格

// 簡單結果(陣列)
public function GetSimpleResult()  // array('詞1', '詞2', ...)

// 詳細結果(含詞性等屬性)
public function GetSimpleResultAll()  
// 返回 array(
//   array('word'=>'詞', 'attr'=>1),  // 1=中文詞, 2=英文, 3=標點, 4=數字, 5=未識別
//   ...
// )

// 索引陣列(詞=>頻率,按頻率降序)
public function GetFinallyIndex()  
// array('詞1'=>5, '詞2'=>3, ...)

5. 詞典管理

// 文本詞庫編譯為二進制詞典
public function MakeDict($source_file, $target_file = '')
// $target_file 為空則覆蓋默認詞典

// 導出當前詞典為文本
public function ExportDict($targetfile)

標準分詞流程

// 1. 實例化
$pa = new PhpAnalysis();

// 2. 設置文本
$pa->SetSource('PHPAnalysis 是一個優秀的中文分詞組件,支援 UTF-8 和 GBK 編碼。');

// 3. 配置屬性
$pa->resultType = 2;       // 獲取詞典詞+單字+英文
$pa->differMax = true;     // 開啟最大切分消岐
$pa->unitWord = true;      // 開啟新詞識別

// 4. 執行分詞
$pa->StartAnalysis(true);

// 5. 獲取結果
$keywords = $pa->GetFinallyKeywords(10);      // 關鍵詞
$index = $pa->GetFinallyIndex();              // 詞頻統計
$segments = $pa->GetFinallyResult(' | ');     // 分詞字符串
$detail = $pa->GetSimpleResultAll();          // 詳細屬性

// 輸出示例
echo "關鍵詞: $keywords\n";
echo "分詞: $segments\n";
print_r($index);

詞典文件格式

# 文本詞典格式 (每行一詞)
PHPAnalysis
中文分詞
組件
UTF-8
GBK
編碼
支援
優秀
的
是
一個

# 編譯後生成二進制詞典文件,載入速度提升 10x+

進階配置組合推薦

場景配置組合效果
搜索引擎索引resultType=2, differMax=true, unitWord=true覆蓋面廣、支持新詞
關鍵詞提取resultType=3, differFreq=true高頻詞優先、過濾單字
文本分類resultType=1, toLower=true保留所有信息、英文統一
高性能分詞resultType=3, differMax=false, unitWord=false速度最快、精度稍低

性能優化建議

  1. 詞典預編譯:生產環境必須使用 MakeDict() 編譯二進制詞典
  2. 單例模式:分詞對象重用,避免重複載入詞典
  3. 內存管理:大文本分塊處理,避免一次性載入超大字符串
  4. 緩存結果:相同文本分詞結果緩存(MD5 作為鍵)
// 單例封裝示例
class Segmenter {
    private static $instance;
    private $pa;
    
    private function __construct() {
        $this->pa = new PhpAnalysis();
        // 載入自定義詞典
        $this->pa->MakeDict('/path/custom_dict.txt');
    }
    
    public static function getInstance() {
        if (!self::$instance) {
            self::$instance = new self();
        }
        return self::$instance;
    }
    
    public function segment($text, $type = 2) {
        $this->pa->SetSource($text);
        $this->pa->resultType = $type;
        $this->pa->StartAnalysis();
        return $this->pa->GetFinallyResult(' ');
    }
}

常見問題排查

問題原因解決
分詞結果為空編碼不匹配確認 SetSource charset 與文本一致
英文單詞被拆分未識別為整體啟用 toLower 或檢查詞典
專有名詞識別失敗詞典缺失添加到自定義詞典並重新 MakeDict
內存耗盡文本過大分句處理、增加 memory_limit

更多 NLP 技術:《中文分詞算法原理》、《PHP 自然語言處理實戰》

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