不錯的php分詞系統-PHPAnalysis無組件分詞系統

来源:http://www.cnblogs.com/yangjiyue/archive/2017/11/16/7847141.html
-Advertisement-
Play Games

採集美女模特圖片庫時,需要對標題進行分詞,找了好久,終於找到了一個不錯的分詞庫 分詞系統簡介:PHPAnalysis分詞程式使用居於unicode的詞庫,使用反向匹配模式分詞,理論上相容編碼更廣泛,並且對utf-8編碼尤為方便。 由於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

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 引言 MVC概念最早出現在二十世紀八十年代的施樂帕克實驗室中 MVC的定義 MVC是一種使用MVC(Model View Controller 模型--視圖--控制器)設計創建Web應用程式的設計模式。 Model 是應用程式中用於處理應用程式數據邏輯部分 • 通常模型對象負責在資料庫中存取數據 V ...
  • 1 /// <summary> 2 /// 數據表轉換類 3 /// </summary> 4 /// <typeparam name="T"></typeparam> 5 public class DbTableConvertor<T> where T : new() 6 { 7 /// <sum ...
  • 在[Asp.Net Core](https://www.asp.net)中,我們的web application 其實是運行在Kestrel服務上,它是一個基於libuv開源的跨平臺可運行 Asp.Net Core 的web伺服器。 ...
  • 今天做了幾個小小的練習,和大家分享一下. 1.用*列印出等腰三角形,代碼如下: 由於等腰三角形是1,3,5,7....,找規律就好了 2. 編寫一個程式,輸入一個整數,判斷其為幾位數(例如100是三位,-99是兩位) 3.編寫一個通用的人員類(Person),該類具有姓名(Name)、年齡(Age) ...
  • 返回總目錄 十四、Temporary Field(令人迷惑的暫時欄位) 1、某個實例變數僅為某種特定的情況而設 2、某些實例欄位僅為某個函數的複雜演算法少傳參數而設 將這些變數和相關函數提煉到一個獨立的類中。 十五、Message Chains(過度耦合的消息鏈) 如果你看到用戶向一個對象請求另一個對 ...
  • 一般情況下我們將tomcat做成服務時都會指定服務的名稱:service install ywbase 安裝後, 服務名稱是ywbase. 這時候用tomcat7w.exe配置jdk記憶體會出現指定的服務未安裝. 解決的方案: 將tomcat7w.exe 改成 ywbasew.exe 執行就OK了 ...
  • 題目描述: Find the sum of all left leaves in a given binary tree. 例子: 解題思路: 用遞推對二叉樹進行遍歷,判斷是否為末枝的左子葉,然後將所有的末枝的左子葉相加(不要忘了考慮空指針的情況) 代碼: 解題收穫: 對於C語言鏈表的使用還是有些不 ...
  • 1.http://blog.csdn.net/zhangchaoyi1a2b/article/details/77510138 2.use Mavn 3.on the pom.xml <dependencies> <dependency> <groupId>org.apache.logging.lo ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...