小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

jieba.NET是jieba中文分詞的.NET版本(C#實現(xiàn))。

 株野 2017-08-04

 jieba.NETjieba中文分詞的.NET版本(C#實現(xiàn))。

當前版本為0.38.2,基于jieba 0.38,提供與jieba一致的功能與接口,以后可能會在jieba基礎上提供其它擴展功能。關(guān)于jieba的實現(xiàn)思路,可以看看這篇wiki里提到的資料。

如果您在開發(fā)中遇到與分詞有關(guān)的需求或困難,請?zhí)峤灰粋€Issue,I see u:)

特點

  • 支持三種分詞模式:
    • 精確模式,試圖將句子最精確地切開,適合文本分析
    • 全模式,把句子中所有的可以成詞的詞語都掃描出來, 速度非常快,但是不能解決歧義。具體來說,分詞過程不會借助于詞頻查找最大概率路徑,亦不會使用HMM;
    • 搜索引擎模式,在精確模式的基礎上,對長詞再次切分,提高召回率,適合用于搜索引擎分詞。
  • 支持繁體分詞
  • 支持添加自定義詞典和自定義詞
  • MIT 授權(quán)協(xié)議

算法

  • 基于前綴詞典實現(xiàn)高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構(gòu)成的有向無環(huán)圖 (DAG)
  • 采用了動態(tài)規(guī)劃查找最大概率路徑, 找出基于詞頻的最大切分組合
  • 對于未登錄詞,采用了基于漢字成詞能力的HMM模型,使用了Viterbi算法

安裝和配置

當前版本基于.NET Framework 4.5,可以手動引用項目,也可以通過NuGet添加引用:

PM> Install-Package jieba.NET

安裝之后,在packages\jieba.net目錄下可以看到Resources目錄,這里面是jieba.Net運行所需的詞典及其它數(shù)據(jù)文件,最簡單的配置方法是將整個Resources目錄拷貝到程序集所在目錄,這樣jieba.NET會使用內(nèi)置的默認配置值。如果希望將這些文件放在其它位置,則要在app.config或web.config中添加如下的配置項:

<appSettings>
    <add key="JiebaConfigFileDir" value="C:\jiebanet\config" />
</appSettings>

需要注意的是,這個路徑可以使用絕對路徑或相對路徑。如果使用相對路徑,那么jieba.NET會假設該路徑是相對于當前應用程序域的BaseDirectory。

配置示例:

  • 采用絕對路徑時,比如配置項為C:\jiebanet\config,那么主詞典的路徑會拼接為:C:\jiebanet\config\dict.txt。
  • 采用相對路徑時(或未添加任何配置項,那么將會使用默認的相對路徑:Resources),比如配置項為..\config(可通過..來調(diào)整相對路徑),若當前應用程序域的BaseDirectory是C:\myapp\bin\,那么主詞典的路徑會拼接為:C:\myapp\config\dict.txt。

主要功能

1. 分詞

  • JiebaSegmenter.Cut方法接受三個輸入?yún)?shù),text為待分詞的字符串;cutAll指定是否采用全模式;hmm指定使用是否使用hmm模型切分未登錄詞;返回類型為IEnumerable<string>
  • JiebaSegmenter.CutForSearch方法接受兩個輸入?yún)?shù),text為待分詞的字符串;hmm指定使用是否使用hmm模型;返回類型為IEnumerable<string>

代碼示例

var segmenter = new JiebaSegmenter();
var segments = segmenter.Cut("我來到北京清華大學", cutAll: true);
Console.WriteLine("【全模式】:{0}", string.Join("/ ", segments));

segments = segmenter.Cut("我來到北京清華大學");  // 默認為精確模式
Console.WriteLine("【精確模式】:{0}", string.Join("/ ", segments));

segments = segmenter.Cut("他來到了網(wǎng)易杭研大廈");  // 默認為精確模式,同時也使用HMM模型
Console.WriteLine("【新詞識別】:{0}", string.Join("/ ", segments));

segments = segmenter.CutForSearch("小明碩士畢業(yè)于中國科學院計算所,后在日本京都大學深造"); // 搜索引擎模式
Console.WriteLine("【搜索引擎模式】:{0}", string.Join("/ ", segments));

segments = segmenter.Cut("結(jié)過婚的和尚未結(jié)過婚的");
Console.WriteLine("【歧義消除】:{0}", string.Join("/ ", segments));

輸出

【全模式】:我/ 來到/ 北京/ 清華/ 清華大學/ 華大/ 大學
【精確模式】:我/ 來到/ 北京/ 清華大學
【新詞識別】:他/ 來到/ 了/ 網(wǎng)易/ 杭研/ 大廈
【搜索引擎模式】:小明/ 碩士/ 畢業(yè)/ 于/ 中國/ 科學/ 學院/ 科學院/ 中國科學院/ 計算/ 計算所/ ,/ 后/ 在/ 日本/ 京都/ 大學/ 日本京都大學/ 深造
【歧義消除】:結(jié)過婚/ 的/ 和/ 尚未/ 結(jié)過婚/ 的

2. 添加自定義詞典

加載詞典

  • 開發(fā)者可以指定自定義的詞典,以便包含jieba詞庫里沒有的詞。雖然jieba有新詞識別能力,但是自行添加新詞可以保證更高的正確率
  • JiebaSegmenter.LoadUserDict("user_dict_file_path")
  • 詞典格式與主詞典格式相同,即一行包含:詞、詞頻(可省略)、詞性(可省略),用空格隔開
  • 詞頻省略時,分詞器將使用自動計算出的詞頻保證該詞被分出

創(chuàng)新辦 3 i
云計算 5
凱特琳 nz
臺中
機器學習 3

調(diào)整詞典

  • 使用JiebaSegmenter.AddWord(word, freq=0, tag=null)可添加一個新詞,或調(diào)整已知詞的詞頻;若freq不是正整數(shù),則使用自動計算出的詞頻,計算出的詞頻可保證該詞被分出來
  • 使用JiebaSegmenter.DeleteWord(word)可移除一個詞,使其不能被分出來

3. 關(guān)鍵詞提取

基于TF-IDF算法的關(guān)鍵詞提取

  • 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)鍵詞的同時得到其權(quán)重。
  • 關(guān)鍵詞抽取基于逆向文件頻率(IDF),組件內(nèi)置一個IDF語料庫,可以配置為其它自定義的語料庫。
  • 關(guān)鍵詞抽取會過濾停用詞(Stop Words),組件內(nèi)置一個停用詞語料庫,這個語料庫合并了NLTK的英文停用詞和哈工大的中文停用詞。

基于TextRank算法的關(guān)鍵詞抽取

  • JiebaNet.Analyser.TextRankExtractorTfidfExtractor相同的接口。需要注意的是,TextRankExtractor默認情況下只提取名詞和動詞。
  • 以固定窗口大小(默認為5,通過Span屬性調(diào)整)和詞之間的共現(xiàn)關(guān)系構(gòu)建圖

4. 詞性標注

  • JiebaNet.Segmenter.PosSeg.PosSegmenter類可以在分詞的同時,為每個詞添加詞性標注。
  • 詞性標注采用和ictclas兼容的標記法,關(guān)于ictclas和jieba中使用的標記法列表,請參考:詞性標記。
var posSeg = new PosSegmenter();
var s = "一團碩大無朋的高能離子云,在遙遠而神秘的太空中迅疾地飄移";

var tokens = posSeg.Cut(s);
Console.WriteLine(string.Join(" ", tokens.Select(token => string.Format("{0}/{1}", token.Word, token.Flag))));
一團/m 碩大無朋/i 的/uj 高能/n 離子/n 云/ns ,/x 在/p 遙遠/a 而/c 神秘/a 的/uj 太空/n 中/f 迅疾/z 地/uv 飄移/v

5. Tokenize:返回詞語在原文的起止位置

  • 默認模式
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: 2
word 服裝           start: 2   end: 4
word 飾品           start: 4   end: 6
word 有限公司         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: 2
word 服裝           start: 2   end: 4
word 飾品           start: 4   end: 6
word 有限           start: 6   end: 8
word 公司           start: 8   end: 10
word 有限公司         start: 6   end: 10

6. 并行分詞(暫未實現(xiàn))

7. 與Lucene.NET的集成

jiebaForLuceneNet項目提供了與Lucene.NET的簡單集成,更多信息請看:jiebaForLuceneNet

8. 其它詞典

jieba分詞亦提供了其它的詞典文件:

9. 分詞速度

  • 全模式:2.5 MB/s
  • 精確模式:1.1 MB/s
  • 測試環(huán)境: Intel(R) Core(TM) i3-2120 CPU @ 3.30GHz;圍城.txt(734KB)

10. 命令行分詞

Segmenter.Cli項目build之后得到jiebanet.ext,它的選項和實例用法如下:

-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

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多