一個很好的php分詞類庫


  PHPAnalysis源程序下載與演示: PHP分詞系統 V2.0 版下載 | PHP分詞系統演示 | PHPAnalysis類API文檔

 

  原文連接地址:http://www.phpbone.com/phpanalysis/

 

分詞系統簡介:PHPAnalysis分詞程序使用居於unicode的詞庫,使用反向匹配模式分詞,理論上兼容編碼 更廣泛,並且對utf-8編碼尤為方便。 由於PHPAnalysis是無組件的系統,因此速度會比有組件的稍慢,不過在大量分詞中,由於邊分詞邊完成詞庫載入,因此內容越多,反而會覺得速度越 快,這是正常現象,PHPAnalysis的詞庫是用一種類似哈希(Hash)的數據結構進行存儲的,因此對於比較短的字符串分詞,只需要占極小的資源, 比那種一次性載入所有詞條的實際性要高得多,並且詞庫容量大小不會影響分詞執行的速度。
    PHPAnalysis分詞系統是基於字符串匹配的分詞方法進行分詞的,這種方法又叫做機械分詞方法,它是按照一定的策略將待分析的漢字串與 一個“充分大的”機器詞典中的詞條進行配,若在詞典中找到某個字符串,則匹配成功(識別出一個詞)。按照掃描方向的不同,串匹配分詞方法可以分為正向匹配 和逆向匹配;按照不同長度優先匹配的情況,可以分為最大(最長)匹配和最小(最短)匹配;按照是否與詞性標注過程相結合,又可以分為單純分詞方法和分詞與 標注相結合的一體化方法。常用的幾種機械分詞方法如下:
1)正向最大匹配法(由左到右的方向);
2)逆向最大匹配法(由右到左的方向);
3)最少切分(使每一句中切出的詞數最小)。
    還可以將上述各種方法相互組合,例如,可以將正向最大匹配方法和逆向最大匹配方法結合起來構成雙向匹配法。由於漢語單字成詞的特點,正向最小匹配 和逆向 最小匹配一般很少使用。一般說來,逆向匹配的切分精度略高於正向匹配,遇到的歧義現象也較少。統計結果表明,單純使用正向最大匹配的錯誤率為1/169, 單純使用逆向最大匹配的錯誤率為1/245。但這種精度還遠遠不能滿足實際的需要。實際使用的分詞系統,都是把機械分詞作為一種初分手段,還需通過利用各 種其它的語言信息來進一步提高切分的准確率。另一種方法是改進掃描方式,稱為特征掃描或標志切分,優先在待分析字符串中識別和切分出一些帶有明 顯特征的詞,以這些詞作為斷點,可將原字符串分為較小的串再來進機械分詞,從而減少匹配的錯誤率。另一種方法是將分詞和詞類標注結合起來,利用豐富的詞類 信息對分詞決策提供幫助,並且在標注過程中又反過來對分詞結果進行檢驗、調整,從而極大地提高切分的准確率。
    PHPAnalysis分詞先對需要分詞的詞進行粗分,然后對粗分的短句子進行二次逆向最大匹配法(RMM)的方法進行分詞,分詞后對分詞結果進行優化,然后才得到最終的分詞結果。


PHPAnalysis類API文檔

一、比較重要的成員變量
$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

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM