盤古分詞 功能簡介

2021-09-08 08:07:02 字數 2961 閱讀 6986

posted on 2009-08-13 16:50

eaglet 閱讀(8474)

編輯收藏

盤古分詞--功能簡介

兩年前我開發了乙個ktdictseg 中文分詞元件,這個元件推出2年來受到很多朋友的喜愛。不過由於我當初開發ktdictseg時比較倉促,底子沒有打好,而且當時對分詞的理解也比較膚 淺,所以ktdictseg元件存在很多問題,我一直想重新開放乙個更好的開源分詞元件,但一直沒有抽出時間。上週我終於下定決心開始做這個事情,經過兩 周的開發(業餘時間),今天終於完成了盤古分詞的v1.0版本。盤古分詞和ktdictseg完全不同,幾乎所有的演算法我全部都推倒重寫了,其分詞速度大 概比ktdictseg快5倍左右(多執行緒下快10倍以上),記憶體占用只有ktdictseg的一半,分詞的準確度方面也比 ktdictseg 有顯著提高,功能也增加了很多。下面我就簡單介紹一下盤古分詞元件的基本功能,希望能對有這方面需求的朋友有所幫助。

盤古分詞 英文名 pangusegment

專案 logo:

專案首頁

盤古分詞專案首頁

開源協議 :

apache license 2.0

商業應用:免費

商業應用授權

盤古分詞可以對一些不在字典中的未登入詞自動識別

盤古分詞可以根據詞頻來解決分詞的歧義問題

盤古分詞提供多重輸出解決分詞粒度和分詞精度權衡的問題

詳見 盤古分詞版本功能介紹 - 多元分詞

盤古分詞在中文人名識別上較ktdictseg取得了較大突破,這裡簡單演示一下中文人名的識別效果

輸入: 「張三說的確實在理」

分詞結果:張三/說/的/確實/在理/

但是如果輸入 「李三買了一張三角桌子」

分詞結果:李三/買/了/一張/三角/桌子/

這裡可以在第乙個句子中盤古分詞識別出張三是乙個人名,從而按照人名輸出了這個詞,而第二句中盤古分詞識別出其句子中包含的張三並不是乙個人名,從而沒有按中文人名來輸出這個詞。

詳見 盤古分詞-中文人名識別

有的專案需要在輸出精確分詞結果的同時輸出單個漢字,從而保證搜尋元件可以按照任意顆粒度來搜尋文字。盤古分詞提供了這種功能,分詞結果中精確分詞的權值較高,單個漢字的權值較低,通過權值的設定可以知道搜尋元件找到最匹配的結果。

如 「張三說的確實在理」

分詞結果: 張(0,1)/張三(0,5)/三說的(1,1)/三(1,1)/說(2,5)/的(3,5)/確(4,1)/確實(4,5)/實(5,1)/在(6,1)/在理(6,5)/理(7,1)/

挎號裡面第乙個數字表示單詞在句子中的位置,第二個數字表示權值,下同

盤古分詞提供了對正體中文分詞的支援。國內很多站內搜尋對正體中文分詞支援不是特別好,這其中就包括的找找看。你可以在找找看中輸出 "我的選擇",你會發現只找到一條匹配的記錄,該匹配記錄匹配的是

"我的選擇" 這個整詞,但如果你輸入

"我的 選擇" 這時就能搜到包括"我的" 和 " 選擇" 的所有記錄。從這個測試中可以分析的找找看在處理正體中文時是簡單根據空格或者一些符號來分割的,無法分解連續的漢字。

盤古分詞可以實現正體中文的分詞

還是輸入

"我的選擇"

分詞結果是: 我/的/選擇/

這個功能也很有趣,如果你用google 搜

"我的選擇",你會發現它可以同時將簡體和繁體的

"我的選擇" 全部搜出來。要實現這個功能,就必須在分詞時同時將簡繁兩種漢字輸出。

還是輸入

"我的選擇"

分詞結果是:我(0,5)/的(1,5)/選擇(2,1)/選擇(2,5)/

盤古分詞可以將以登入詞的中文詞性輸出給使用者,以方便使用者做進一步處理。

盤古分詞可以識別全形的字母和數字

英文分詞

英文單詞通常都是靠空格等符號分割,這個比較簡單,盤古分詞分英文自然也沒有什麼問題。

一些英文簡寫是字母符號混合,或者是字母數字混合,這個分詞起來就不能按照空格符號這樣分割了,對於字母符號混合的如 u.s.a ,只要將這個詞錄入到字典中,盤古分詞就可以分出整詞。對於字母和數字混合的,盤古分詞會自動作為整詞輸出。

對於一些標點符號,連詞,助詞等有時候需要在分詞時過濾掉,盤古分詞提供乙個 stopword.txt 檔案,使用者只要將需要過濾的詞加入到這個檔案中,並將停用詞過濾開發開啟,就可以過濾掉這些詞。

盤古分詞可以讓使用者對如下特性設定自定義權值

未登入詞權值

最匹配詞權值

次匹配詞權值

再次匹配詞權值

強行輸出的單字的權值

數字的權值

英文詞彙權值

符號的權值

強制同時輸出簡繁漢字時,非原來文字的漢字輸出權值。

盤古分詞提供乙個字典管理工具 dictmanage 通過這個工具,你可以增加,修改,和刪除字典中的單詞

通過字典工具增加,修改,和刪除字典中的單詞後,保持字典,盤古分詞會自動將新的字典檔案載入進去,而不需要重新啟動。

在pangu4lucene 這個包裡面有我做的乙個盤古+lucene 的簡單新聞搜尋web示例程式,release 包裡面有使用說明。

效能指標

core duo 1.8 ghz 下單執行緒 分詞速度為 390k 字元每秒,2執行緒分詞速度為 690k 字元每秒。

其他說明

盤古分詞提供的字典包括17萬個中文常用單詞,但這個字典依然不夠完整,如果要分詞更準確,需要適當維護一下這個字典。

中文人名的識別能力取決於 chssinglename.txt, chsdoublename1.txt, chsdoublename2.txt 這

三個檔案,它們分別表示單子人名,雙字人名的首字和雙字人名的尾字,如果有的人名沒有分出來,需要維護這三個檔案。

v1.0.0.2 版本演示截圖

從這個測 試來看,盤古分詞在中文人名這塊的識別能力還是比較突出的,在未登入詞識別方面也有了一定的改進。不過這個分詞結果有一處有一點問題。就是一次**一百 元, 正常理解應該是一次性/交/一百/元 但盤古分詞分出來是 一次/**/一百/元 。雖然有點黃,但從語義上看也不是完全說不過去。

盤古分詞 多元分詞演算法

中文分詞按照分詞粒度來分,分成 一元分詞,二元分詞,多元分詞和精確分詞等型別。一元分詞就是最簡單的分詞,將所有的中文字元按照單字形式輸出。二元分詞按雙字形式輸出。多元分詞則是將一句話中可能的單詞組合按照一定規則輸出,允許輸出的詞有重疊。精確分詞則是將一句話中最準確的單詞組合輸出,不允許輸出的詞有重疊...

盤古分詞小測

編譯了以後,跟蹤了一下 應該是高手寫的,非常的清晰。只是因為沒有文件,時間有限,不能深入研究它的演算法。基本的演算法是這樣的 比如句子 盤古分詞 簡介 盤古分詞 是由eaglet 開發的一款基於字典的中英文分詞元件 先根據 非中文符號,對句子進行切分,如下 盤古分詞 簡介 盤古分詞 是由 eagle...

Lucene和PanGu(盤古分詞)

先用盤古分詞生成索引,然後對進行查詢語句進行分詞查詢。比較簡單。using system using system.collections.generic using system.linq using system.web using system.web.ui using system.web....