jieba.NET是jieba中文分詞的.NET版本(C#實(shí)現(xiàn))。
當(dāng)前版本為0.38.2,基于jieba 0.38,提供與jieba一致的功能與接口,以后可能會(huì)在jieba基礎(chǔ)上提供其它擴(kuò)展功能。關(guān)于jieba的實(shí)現(xiàn)思路,可以看看這篇wiki里提到的資料。
如果您在開發(fā)中遇到與分詞有關(guān)的需求或困難,請(qǐng)?zhí)峤灰粋€(gè)Issue,I see u:)
當(dāng)前版本基于.NET Framework 4.5,可以手動(dòng)引用項(xiàng)目,也可以通過NuGet添加引用:
PM> Install-Package jieba.NET
安裝之后,在packages\jieba.net目錄下可以看到Resources目錄,這里面是jieba.Net運(yùn)行所需的詞典及其它數(shù)據(jù)文件,最簡(jiǎn)單的配置方法是將整個(gè)Resources目錄拷貝到程序集所在目錄,這樣jieba.NET會(huì)使用內(nèi)置的默認(rèn)配置值。如果希望將這些文件放在其它位置,則要在app.config或web.config中添加如下的配置項(xiàng):
<appSettings> <add key="JiebaConfigFileDir" value="C:\jiebanet\config" /></appSettings>
需要注意的是,這個(gè)路徑可以使用絕對(duì)路徑或相對(duì)路徑。如果使用相對(duì)路徑,那么jieba.NET會(huì)假設(shè)該路徑是相對(duì)于當(dāng)前應(yīng)用程序域的BaseDirectory。
配置示例:
JiebaSegmenter.Cut
方法接受三個(gè)輸入?yún)?shù),text為待分詞的字符串;cutAll指定是否采用全模式;hmm指定使用是否使用hmm模型切分未登錄詞;返回類型為IEnumerable<string>
JiebaSegmenter.CutForSearch
方法接受兩個(gè)輸入?yún)?shù),text為待分詞的字符串;hmm指定使用是否使用hmm模型;返回類型為IEnumerable<string>
代碼示例
var segmenter = new JiebaSegmenter();var segments = segmenter.Cut("我來(lái)到北京清華大學(xué)", cutAll: true);Console.WriteLine("【全模式】:{0}", string.Join("/ ", segments));segments = segmenter.Cut("我來(lái)到北京清華大學(xué)"); // 默認(rèn)為精確模式Console.WriteLine("【精確模式】:{0}", string.Join("/ ", segments));segments = segmenter.Cut("他來(lái)到了網(wǎng)易杭研大廈"); // 默認(rèn)為精確模式,同時(shí)也使用HMM模型Console.WriteLine("【新詞識(shí)別】:{0}", string.Join("/ ", segments));segments = segmenter.CutForSearch("小明碩士畢業(yè)于中國(guó)科學(xué)院計(jì)算所,后在日本京都大學(xué)深造"); // 搜索引擎模式Console.WriteLine("【搜索引擎模式】:{0}", string.Join("/ ", segments));segments = segmenter.Cut("結(jié)過婚的和尚未結(jié)過婚的");Console.WriteLine("【歧義消除】:{0}", string.Join("/ ", segments));
輸出
【全模式】:我/ 來(lái)到/ 北京/ 清華/ 清華大學(xué)/ 華大/ 大學(xué)【精確模式】:我/ 來(lái)到/ 北京/ 清華大學(xué)【新詞識(shí)別】:他/ 來(lái)到/ 了/ 網(wǎng)易/ 杭研/ 大廈【搜索引擎模式】:小明/ 碩士/ 畢業(yè)/ 于/ 中國(guó)/ 科學(xué)/ 學(xué)院/ 科學(xué)院/ 中國(guó)科學(xué)院/ 計(jì)算/ 計(jì)算所/ ,/ 后/ 在/ 日本/ 京都/ 大學(xué)/ 日本京都大學(xué)/ 深造【歧義消除】:結(jié)過婚/ 的/ 和/ 尚未/ 結(jié)過婚/ 的
JiebaSegmenter.LoadUserDict("user_dict_file_path")
如
創(chuàng)新辦 3 i云計(jì)算 5凱特琳 nz臺(tái)中機(jī)器學(xué)習(xí) 3
JiebaSegmenter.AddWord(word, freq=0, tag=null)
可添加一個(gè)新詞,或調(diào)整已知詞的詞頻;若freq
不是正整數(shù),則使用自動(dòng)計(jì)算出的詞頻,計(jì)算出的詞頻可保證該詞被分出來(lái)JiebaSegmenter.DeleteWord(word)
可移除一個(gè)詞,使其不能被分出來(lái)JiebaNet.Analyser.TfidfExtractor.ExtractTags(string text, int count = 20, IEnumerable<string> allowPos = null)
可從指定文本中抽取出關(guān)鍵詞。JiebaNet.Analyser.TfidfExtractor.ExtractTagsWithWeight(string text, int count = 20, IEnumerable<string> allowPos = null)
可從指定文本中抽取關(guān)鍵詞的同時(shí)得到其權(quán)重。JiebaNet.Analyser.TextRankExtractor
與TfidfExtractor
相同的接口。需要注意的是,TextRankExtractor
默認(rèn)情況下只提取名詞和動(dòng)詞。JiebaNet.Segmenter.PosSeg.PosSegmenter
類可以在分詞的同時(shí),為每個(gè)詞添加詞性標(biāo)注。var posSeg = new PosSegmenter();var s = "一團(tuán)碩大無(wú)朋的高能離子云,在遙遠(yuǎn)而神秘的太空中迅疾地飄移";var tokens = posSeg.Cut(s);Console.WriteLine(string.Join(" ", tokens.Select(token => string.Format("{0}/{1}", token.Word, token.Flag))));
一團(tuán)/m 碩大無(wú)朋/i 的/uj 高能/n 離子/n 云/ns ,/x 在/p 遙遠(yuǎn)/a 而/c 神秘/a 的/uj 太空/n 中/f 迅疾/z 地/uv 飄移/v
var segmenter = new JiebaSegmenter();var s = "永和服裝飾品有限公司";var tokens = segmenter.Tokenize(s);foreach (var token in tokens){ Console.WriteLine("word {0,-12} start: {1,-3} end: {2,-3}", token.Word, token.StartIndex, token.EndIndex);}
word 永和 start: 0 end: 2word 服裝 start: 2 end: 4word 飾品 start: 4 end: 6word 有限公司 start: 6 end: 10
var segmenter = new JiebaSegmenter();var s = "永和服裝飾品有限公司";var tokens = segmenter.Tokenize(s, TokenizerMode.Search);foreach (var token in tokens){ Console.WriteLine("word {0,-12} start: {1,-3} end: {2,-3}", token.Word, token.StartIndex, token.EndIndex);}
word 永和 start: 0 end: 2word 服裝 start: 2 end: 4word 飾品 start: 4 end: 6word 有限 start: 6 end: 8word 公司 start: 8 end: 10word 有限公司 start: 6 end: 10
jiebaForLuceneNet項(xiàng)目提供了與Lucene.NET的簡(jiǎn)單集成,更多信息請(qǐng)看:jiebaForLuceneNet
jieba分詞亦提供了其它的詞典文件:
Segmenter.Cli項(xiàng)目build之后得到j(luò)iebanet.ext,它的選項(xiàng)和實(shí)例用法如下:
-f --file the file name, (必要的).-d --delimiter the delimiter between tokens, default: / .-a --cut-all use cut_all mode.-n --no-hmm don't use HMM.-p --pos enable POS tagging.-v --version show version info.-h --help show help details.sample usages:$ jiebanet -f input.txt > output.txt$ jiebanet -d | -f input.txt > output.txt$ jiebanet -p -f input.txt > output.txt
https://github.com/anderscui/jieba.NET
聯(lián)系客服