[C#] 盤古分詞,尋找句子中的分詞+詞性
2017-04-10
很久很久以前寫過一篇文章 [C#] 盤古分詞,尋找句子中的分詞 ,今天這邊用新版的盤古,然後加上分詞的屬性,首先透過nuget 下載一個 PanGu.Segment 來輔助,因為這包裝的還不錯
nuget 網址 : https://www.nuget.org/packages/PanGu.Segment/
因為這很方便他連字典檔都下來了,這時候,你需要做一個小動作,將專案下的Dict檔案夾讓他編譯時候含進去
輸出時改一律複製,這樣執行起來就不會出錯接下來是 C# sample code :
ltlResult.Text = ""; var segment = new PanGu.Segment(); var words = segment.DoSegment(txtContent.Text); foreach (var word in words) { ltlResult.Text += (word + "," + word.Pos + "<br />"); }
後面那就是詞性,跟我之前文章敘述到的那個編輯器有對應,但是那些詞性是啥鬼阿,我找了一下,終於在這裡: http://blog.sina.com.cn/s/blog_42bea1a801019jeh.html ,有找到其他大大的整理,感謝大大的無私貢獻。
private string GetChsPos(POS pos) { switch (pos) { case POS.POS_UNK: return "未知詞性"; case POS.POS_D_K: return "後接成分"; case POS.POS_D_H: return "前接成分"; case POS.POS_A_NZ: return "其他專名"; case POS.POS_A_NX: return "外文字符"; case POS.POS_A_NR: return "人名"; case POS.POS_D_Z: return "狀態詞"; case POS.POS_A_NT: return "機構團體"; case POS.POS_A_NS: return "地名"; case POS.POS_D_Y: return "語氣詞 語氣語素"; case POS.POS_D_X: return "非語素字"; case POS.POS_D_W: return "標點符號"; case POS.POS_D_T: return "時間詞"; case POS.POS_D_S: return "處所詞"; case POS.POS_D_V: return "動詞 動語素"; case POS.POS_D_U: return "助詞 助語素"; case POS.POS_D_R: return "代詞 代語素"; case POS.POS_A_Q: return "量詞 量語素"; case POS.POS_D_P: return "介詞"; case POS.POS_D_MQ: return "數量詞"; case POS.POS_A_M: return "數詞 數語素"; case POS.POS_D_O: return "擬聲詞"; case POS.POS_D_N: return "名詞 名語素"; case POS.POS_D_F: return "方位詞 方位語素"; case POS.POS_D_E: return "嘆詞 嘆語素"; case POS.POS_D_L: return "習語"; case POS.POS_D_I: return "成語"; case POS.POS_D_D: return "副詞 副語素"; case POS.POS_D_C: return "連詞 連語素"; case POS.POS_D_B: return "區別詞 區別語素"; case POS.POS_D_A: return "形容詞 形語素"; } return "未知詞性"; }
之後code 修改成 :
var segment = new PanGu.Segment(); var words = segment.DoSegment(txtContent.Text); foreach (var word in words) { ltlResult.Text+=(word + "," + GetChsPos(word.Pos) + "<br />"); }
這樣是不是一切好多了,遇到坑分享一下給大家。
程式碼: https://github.com/donma/PenguSegmentPartOfSpeech
標籤:
ASP.net
,
C#
,
Lucene.net
-- Yesterday I wrote down the code. I bet I could be your hero. I am a mighty little programmer. 如果這篇文章有幫助到您,簡單留個言,或是幫我按個讚,讓我有寫下去的動力...