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