溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

.NET Core中文分詞組件jieba.NET Core

發(fā)布時(shí)間:2020-07-06 09:32:54 來源:網(wǎng)絡(luò) 閱讀:1050 作者:jjjyyy66 欄目:編程語言

特點(diǎn)

  • 支持三種分詞模式:

    • 精確模式,試圖將句子最精確地切開,適合文本分析;

    • 全模式,把句子中所有的可以成詞的詞語都掃描出來, 速度非常快,但是不能解決歧義。具體來說,分詞過程不會(huì)借助于詞頻查找最大概率路徑,亦不會(huì)使用HMM;

    • 搜索引擎模式,在精確模式的基礎(chǔ)上,對(duì)長(zhǎng)詞再次切分,提高召回率,適合用于搜索引擎分詞。

  • 支持繁體分詞

  • 支持添加自定義詞典和自定義詞

jieba.NET Core 用法

下載代碼使用VS 2017 打開,或者使用VS Code 打開項(xiàng)目。

選擇jieba.NET 為起始項(xiàng)目,Program.cs 代碼如下:

.NET Core中文分詞組件jieba.NET Core

    class Program
    {        static void Main(string[] args)
        {
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);            var segmenter = new JiebaSegmenter();            var segments = segmenter.Cut("我來到北京清華大學(xué)", cutAll: true);
            Console.WriteLine("【全模式】:{0}", string.Join("/ ", segments));

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

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

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

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

.NET Core中文分詞組件jieba.NET Core

運(yùn)行程序結(jié)果如下:

.NET Core中文分詞組件jieba.NET Core

 

JiebaSegmenter.Cut方法可通過cutAll來支持兩種模式,精確模式和全模式。精確模式是最基礎(chǔ)和自然的模式,試圖將句子最精確地切開,適合文本分析;而全模式,把句子中所有的可以成詞的詞語都掃描出來, 速度更快,但是不能解決歧義,因?yàn)樗粫?huì)掃描最大概率路徑,也不會(huì)通過HMM去發(fā)現(xiàn)未登錄詞。

CutForSearch采用的是搜索引擎模式,在精確模式的基礎(chǔ)上對(duì)長(zhǎng)詞再次切分,提高召回率,適合用于搜索引擎分詞

詞性標(biāo)注

詞性標(biāo)注采用和ictclas兼容的標(biāo)記法,關(guān)于ictclas和jieba中使用的標(biāo)記法列表,請(qǐng)參考:詞性標(biāo)記。

在TestDemo.cs 中PosCutDemo 方法為詞性標(biāo)注。

.NET Core中文分詞組件jieba.NET Core

        public void PosCutDemo()
        {            var posSeg = new PosSegmenter();            var s = "一團(tuán)碩大無朋的高能離子云,在遙遠(yuǎn)而神秘的太空中迅疾地飄移";            var tokens = posSeg.Cut(s);
            Console.WriteLine(string.Join(" ", tokens.Select(token => string.Format("{0}/{1}", token.Word, token.Flag))));
        }

.NET Core中文分詞組件jieba.NET Core

調(diào)用結(jié)果如下:

.NET Core中文分詞組件jieba.NET Core

關(guān)鍵詞提取

現(xiàn)在來嘗試提取其中的關(guān)鍵詞。jieba.NET提供了TF-IDF和TextRank兩種算法來提取關(guān)鍵詞,TF-IDF對(duì)應(yīng)的類是JiebaNet.Analyser.TfidfExtractor,TextRank的是JiebaNet.Analyser.TextRankExtractor。

.NET Core中文分詞組件jieba.NET Core

        public void ExtractTagsDemo()
        {            var text =                "程序員(英文Programmer)是從事程序開發(fā)、維護(hù)的專業(yè)人員。一般將程序員分為程序設(shè)計(jì)人員和程序編碼人員,但兩者的界限并不非常清楚,特別是在中國(guó)。軟件從業(yè)人員分為初級(jí)程序員、高級(jí)程序員、系統(tǒng)分析員和項(xiàng)目經(jīng)理四大類。";            var extractor = new TfidfExtractor();            var keywords = extractor.ExtractTags(text);            foreach (var keyword in keywords)
            {
                Console.WriteLine(keyword);
            }
        }        public void ExtractTagsDemo2()
        {            var text = @"在數(shù)學(xué)和計(jì)算機(jī)科學(xué)/算學(xué)之中,算法/算則法(Algorithm)為一個(gè)計(jì)算的具體步驟,常用于計(jì)算、數(shù)據(jù)處理和自動(dòng)推理。精確而言,算法是一個(gè)表示為有限長(zhǎng)列表的有效方法。算法應(yīng)包含清晰定義的指令用于計(jì)算函數(shù)。
                         算法中的指令描述的是一個(gè)計(jì)算,當(dāng)其運(yùn)行時(shí)能從一個(gè)初始狀態(tài)和初始輸入(可能為空)開始,經(jīng)過一系列有限而清晰定義的狀態(tài)最終產(chǎn)生輸出并停止于一個(gè)終態(tài)。一個(gè)狀態(tài)到另一個(gè)狀態(tài)的轉(zhuǎn)移不一定是確定的。隨機(jī)化算法在內(nèi)的一些算法,包含了一些隨機(jī)輸入。
                         形式化算法的概念部分源自嘗試解決希爾伯特提出的判定問題,并在其后嘗試定義有效計(jì)算性或者有效方法中成形。這些嘗試包括庫爾特·哥德爾、雅克·埃爾布朗和斯蒂芬·科爾·克萊尼分別于1930年、1934年和1935年提出的遞歸函數(shù),阿隆佐·邱奇于1936年提出的λ演算,1936年Emil Leon Post的Formulation 1和艾倫·圖靈1937年提出的圖靈機(jī)。即使在當(dāng)前,依然常有直覺想法難以定義為形式化算法的情況。";            var extractor = new TfidfExtractor();            var keywords = extractor.ExtractTags(text, 10, Constants.NounAndVerbPos);            foreach (var keyword in keywords)
            {
                Console.WriteLine(keyword);
            }
        }

.NET Core中文分詞組件jieba.NET Core

ExtractTagsDemo 方法為提取所有關(guān)鍵詞。

.NET Core中文分詞組件jieba.NET Core

 

ExtractTagsDemo2 方法為提取前十個(gè)僅包含名詞和動(dòng)詞的關(guān)鍵詞

.NET Core中文分詞組件jieba.NET Core

ExtractTagsWithWeight方法的返回結(jié)果中除了包含關(guān)鍵詞,還包含了相應(yīng)的權(quán)重值。

返回詞語在原文的起止位置

.NET Core中文分詞組件jieba.NET Core

        public void TokenizeDemo()
        {            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);
            }
        }

.NET Core中文分詞組件jieba.NET Core

調(diào)用 TokenizeDemo 方法會(huì)返回對(duì)應(yīng)位置

.NET Core中文分詞組件jieba.NET Core

 

新詞加入

代碼加入

.NET Core中文分詞組件jieba.NET Core

            var segmenter = new JiebaSegmenter();            var segments = segmenter.Cut(@".NETCore2.0的發(fā)布時(shí)間,.NET Core 2.0預(yù)覽版及.NET Standard 2.0 Preview大概在5月中旬或下旬發(fā)布。");
            Console.WriteLine("【精確模式】:{0}", string.Join("/ ", segments));
            segmenter.AddWord("發(fā)布時(shí)間");
            segmenter.AddWord(".NETCore2.0");
            segments = segmenter.Cut(@".NETCore2.0的發(fā)布時(shí)間,.NET Core 2.0預(yù)覽版及.NET Standard 2.0 Preview大概在5月中旬或下旬發(fā)布。");
            Console.WriteLine("【精確模式】:{0}", string.Join("/ ", segments));

.NET Core中文分詞組件jieba.NET Core

調(diào)用 segmenter.AddWord添加新詞,這里添加了發(fā)布時(shí)間及.NETCore2.0

.NET Core中文分詞組件jieba.NET Core

可以看到新加入的詞被識(shí)別出來。

詞典加入

詞典格式如下:詞典格式與主詞典格式相同,即一行包含:詞、詞頻(可省略)、詞性(可省略),用空格隔開。詞頻省略時(shí),分詞器將使用自動(dòng)計(jì)算出的詞頻保證該詞被分出。

.NET Core中文分詞組件jieba.NET Core

創(chuàng)新辦 3 i
云計(jì)算 5凱特琳 nz
臺(tái)中
機(jī)器學(xué)習(xí) 3深度學(xué)習(xí) 8linezero 2

.NET Core中文分詞組件jieba.NET Core

然后使用segmenter.LoadUserDict() 方法,傳入詞典路徑。

更多詳細(xì)內(nèi)容,可以查看代碼及readme.md


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI