採集美女模特圖片庫時,需要對標題進行分詞,找了好久,終於找到了一個不錯的分詞庫 分詞系統簡介:PHPAnalysis分詞程式使用居於unicode的詞庫,使用反向匹配模式分詞,理論上相容編碼更廣泛,並且對utf-8編碼尤為方便。 由於PHPAnalysis是無組件的系統,因此速度會比有組件的稍慢,不 ...
採集美女模特圖片庫時,需要對標題進行分詞,找了好久,終於找到了一個不錯的分詞庫
分詞系統簡介:PHPAnalysis分詞程式使用居於unicode的詞庫,使用反向匹配模式分詞,理論上相容編碼更廣泛,並且對utf-8編碼尤為方便。 由於PHPAnalysis是無組件的系統,因此速度會比有組件的稍慢,不過在大量分詞中,由於邊分詞邊完成詞庫載入,因此內容越多,反而會覺得速度越快,這是正常現象,PHPAnalysis的詞庫是用一種類似哈希(Hash)的數據結構進行存儲的,因此對於比較短的字元串分詞,只需要占極小的資源,比那種一次性載入所有詞條的實際性要高得多,並且詞庫容量大小不會影響分詞執行的速度。
PHPAnalysis分詞系統是基於字元串匹配的分詞方法進行分詞的,這種方法又叫做機械分詞方法,它是按照一定的策略將待分析的漢字串與 一個“充分大的”機器詞典中的詞條進行配,若在詞典中找到某個字元串,則匹配成功(識別出一個詞)。按照掃描方向的不同,串匹配分詞方法可以分為正向匹配 和逆向匹配;按照不同長度優先匹配的情況,可以分為最大(最長)匹配和最小(最短)匹配;按照是否與詞性標註過程相結合,又可以分為單純分詞方法和分詞與 標註相結合的一體化方法。常用的幾種機械分詞方法如下:
1)正向最大匹配法(由左到右的方向);
2)逆向最大匹配法(由右到左的方向);
3)最少切分(使每一句中切出的詞數最小)。
還可以將上述各種方法相互組合,例如,可以將正向最大匹配方法和逆向最大匹配方法結合起來構成雙向匹配法。由於漢語單字成詞的特點,正向最小匹配和逆向 最小匹配一般很少使用。一般說來,逆向匹配的切分精度略高於正向匹配,遇到的歧義現象也較少。統計結果表明,單純使用正向最大匹配的錯誤率為1/169, 單純使用逆向最大匹配的錯誤率為1/245。但這種精度還遠遠不能滿足實際的需要。實際使用的分詞系統,都是把機械分詞作為一種初分手段,還需通過利用各 種其它的語言信息來進一步提高切分的準確率。另一種方法是改進掃描方式,稱為特征掃描或標誌切分,優先在待分析字元串中識別和切分出一些帶有明 顯特征的詞,以這些詞作為斷點,可將原字元串分為較小的串再來進機械分詞,從而減少匹配的錯誤率。另一種方法是將分詞和詞類標註結合起來,利用豐富的詞類 信息對分詞決策提供幫助,並且在標註過程中又反過來對分詞結果進行檢驗、調整,從而極大地提高切分的準確率。
PHPAnalysis分詞先對需要分詞的詞進行粗分,然後對粗分的短句子進行二次逆向最大匹配法(RMM)的方法進行分詞,分詞後對分詞結果進行優化,然後才得到最終的分詞結果。
一、比較重要的成員變數 $resultType = 1 生成的分詞結果數據類型(1 為全部, 2為 詞典辭彙及單個中日韓簡繁字元及英文, 3 為詞典辭彙及英文) 這個變數一般用 SetResultType( $rstype ) 這方法進行設置。 $notSplitLen = 5 切分句子最短長度 $toLower = false 把英文單詞全部轉小寫 $differMax = false 使用最大切分模式對二元詞進行消岐 $unitWord = true 嘗試合併單字(即是新詞識別) $differFreq = false 使用熱門詞優先模式進行消岐 二、主要成員函數列表 1、public function __construct($source_charset='utf-8', $target_charset='utf-8', $load_all=true, $source='') 函數說明:構造函數 參數列表: $source_charset 源字元串編碼 $target_charset 目錄字元串編碼 $load_all 是否完全載入詞典(此參數已經作廢) $source 源字元串 如果輸入輸出都是utf-8,實際上可以不必使用任何參數進行初始化,而是通過 SetSource 方法設置要操作的文本 2、public function SetSource( $source, $source_charset='utf-8', $target_charset='utf-8' ) 函數說明:設置源字元串 參數列表: $source 源字元串 $source_charset 源字元串編碼 $target_charset 目錄字元串編碼 返回值:bool 3、public function StartAnalysis($optimize=true) 函數說明:開始執行分詞操作 參數列表: $optimize 分詞後是否嘗試優化結果 返回值:void 一個基本的分詞過程: ////////////////////////////////////// $pa = new PhpAnalysis(); $pa->SetSource('需要進行分詞的字元串'); //設置分詞屬性 $pa->resultType = 2; $pa->differMax = true; $pa->StartAnalysis(); //獲取你想要的結果 $pa->GetFinallyIndex(); //////////////////////////////////////// 4、public function SetResultType( $rstype ) 函數說明:設置返回結果的類型 實際是對成員變數$resultType的操作 參數 $rstype 值為: 1 為全部, 2為 詞典辭彙及單個中日韓簡繁字元及英文, 3 為詞典辭彙及英文 返回值:void 5、public function GetFinallyKeywords( $num = 10 ) 函數說明:獲取出現頻率最高的指定詞條數(通常用於提取文檔關鍵字) 參數列表: $num = 10 返回詞條個數 返回值:用","分隔的關鍵字列表 6、public function GetFinallyResult($spword=' ') 函數說明:獲得最終分詞結果 參數列表: $spword 詞條之間的分隔符 返回值:string 7、public function GetSimpleResult() 函數說明:獲得粗分結果 返回值:array 8、public function GetSimpleResultAll() 函數說明:獲得包含屬性信息的粗分結果 屬性(1中文詞句、2 ANSI辭彙(包括全形),3 ANSI標點符號(包括全形),4數字(包括全形),5 中文標點或無法識別字元) 返回值:array 9、public function GetFinallyIndex() 函數說明:獲取hash索引數組 返回值:array('word'=>count,...) 按出現頻率排序 10、public function MakeDict( $source_file, $target_file='' ) 函數說明:把文本文件詞庫編譯成詞典 參數列表: $source_file 源文本文件 $target_file 目標文件(如果不指定,則為當前詞典) 返回值:void 11、public function ExportDict( $targetfile ) 函數說明:導出當前詞典全部詞條為文本文件 參數列表: $targetfile 目標文件 返回值:void