最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中使用jieba.NET、WordCloudSharp制作詞云圖的步驟

 更新時間:2021年07月25日 08:45:46   作者:time-flies  
之前一篇文章介紹的是使用Python的jieba、wordcloud的庫生成詞云圖,本文則介紹在C#中如何使用jieba.NET、WordCloudSharp庫生成詞云圖,感興趣的朋友一起看看吧

詞云簡介

“詞云”由美國西北大學(xué)新聞學(xué)副教授、新媒體專業(yè)主任里奇·戈登(Rich Gordon)于2006年最先使用,是通過形成“關(guān)鍵詞云層”或“關(guān)鍵詞渲染”,對文本中出現(xiàn)頻率較高的“關(guān)鍵詞”的視覺上的突出。
網(wǎng)上大部分文章介紹的是使用Python的jieba、wordcloud的庫生成詞云圖,本文則介紹在C#中如何使用jieba.NET、WordCloudSharp庫生成詞云圖,后者是前者的.NET實現(xiàn)。

準(zhǔn)備工作

創(chuàng)建一個C#的控制臺項目,通過NuGet添加引用對jieba.NET、WordCloudSharp的引用,使用方法可以參考以下鏈接:

安裝之后,在packages\jieba.NET目錄下找到Resources目錄,將整個Resources目錄拷貝到程序集所在目錄,這里面是jieba.NET運(yùn)行所需的詞典及其它數(shù)據(jù)文件。

基本算法

算法主要步驟如下:

  • 提取關(guān)鍵詞:基于TF-IDF算法、TextRank算法提取文本的關(guān)鍵詞,按權(quán)重大小選取部分關(guān)鍵詞。
  • 統(tǒng)計關(guān)鍵詞詞頻:先將文本分詞,統(tǒng)計每個詞的詞頻,再篩選出關(guān)鍵詞的詞頻。
  • 生成詞云圖:根據(jù)關(guān)鍵詞及其詞頻信息在蒙版圖片的基礎(chǔ)上生成詞圖。

注:本文采用TF-IDF算法提取關(guān)鍵詞,蒙版圖目前只支持黑白圖片。

TF-IDF(詞頻-逆文檔頻率)算法是一種統(tǒng)計方法,用以評估一字詞對于一個文件集或一個語料庫中的其中一份文件的重要程度。字詞的重要性隨著它在文件中出現(xiàn)的次數(shù)成正比增加,但同時會隨著它在語料庫中出現(xiàn)的頻率成反比下降。

算法實現(xiàn)

使用JiebaNet.Analyser.TfidfExtractor.ExtractTagsWithWeight(string text, int count = 20, IEnumerable allowPos = null)從指定文本中抽取關(guān)鍵詞的同時得到其權(quán)重,代碼如下:

/// <summary>
/// 從指定文本中抽取關(guān)鍵詞的同時得到其權(quán)重
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
static WordWeightPair[] ExtractTagsWithWeight(string text)
{
    var extractor = new TfidfExtractor();
    var wordWeight = extractor.ExtractTagsWithWeight(text, 50);
    StringBuilder sbr = new StringBuilder();
    sbr.Append("詞語");
    sbr.Append(",");
    sbr.Append("權(quán)重");
    sbr.AppendLine(",");
    foreach (var item in wordWeight)
    {
        sbr.Append(item.Word);
        sbr.Append(",");
        sbr.Append(item.Weight);
        sbr.AppendLine(",");
    }
    string filename = "關(guān)鍵詞權(quán)重統(tǒng)計.csv";
    File.WriteAllText(filename, sbr.ToString(), Encoding.UTF8);
    Console.WriteLine("關(guān)鍵詞提取完成:" + filename);
    return wordWeight.ToArray();
}

使用JiebaNet.Segmenter.Common下的Counter類統(tǒng)計詞頻,其實現(xiàn)來自Python標(biāo)準(zhǔn)庫的Counter類(具體接口和實現(xiàn)細(xì)節(jié)略有不同),代碼如下:

/// <summary>
/// 分詞并統(tǒng)計詞頻:默認(rèn)為精確模式,同時也使用HMM模型
/// </summary>
/// <param name="text"></param>
/// <param name="wordWeightAry"></param>
/// <returns></returns>
static KeyValuePair<string, int>[] Counter(string text, WordWeightPair[] wordWeightAry)
{
    var segmenter = new JiebaSegmenter();
    var segments = segmenter.Cut(text);
    var freqs = new Counter<string>(segments);
    KeyValuePair<string, int>[] countAry = new KeyValuePair<string, int>[wordWeightAry.Length];
    for (int i = 0; i < wordWeightAry.Length; i++)
    {
        string key = wordWeightAry[i].Word;
        countAry[i] = new KeyValuePair<string, int>(key, freqs[key]);
    }
    StringBuilder sbr = new StringBuilder();
    sbr.Append("詞語");
    sbr.Append(",");
    sbr.Append("詞頻");
    sbr.AppendLine(",");
    foreach (var pair in countAry)
    {
        sbr.Append(pair.Key);
        sbr.Append(",");
        sbr.Append(pair.Value);
        sbr.AppendLine(",");
    }
    string filename = "詞頻統(tǒng)計結(jié)果.csv";
    File.WriteAllText(filename, sbr.ToString(), Encoding.UTF8);
    Console.WriteLine("詞頻統(tǒng)計完成:" + filename);
    return countAry;
}

使用WordCloudSharp生成詞云圖,蒙版圖必須使用黑白圖片,記得手動引用System.Drawing,代碼如下:

/// <summary>
/// 創(chuàng)建詞云圖
/// </summary>
/// <param name="countAry"></param>
static void CreateWordCloud(KeyValuePair<string, int>[] countAry)
{            
    string markPath = "mask.jpg";
    string resultPath = "result.jpg";
    Console.WriteLine("開始生成圖片,讀取蒙版:" + markPath);
    Image mask = Image.FromFile(markPath);
    //使用蒙版圖片
    var wordCloud = new WordCloud(mask.Width, mask.Height, mask: mask, allowVerical: true, fontname: "YouYuan");
    //不使用蒙版圖片
    //var wordCloud = new WordCloud(1000, 1000,false, null,-1,1,null, false);
    var result = wordCloud.Draw(countAry.Select(it => it.Key).ToList(), countAry.Select(it => it.Value).ToList());
    result.Save(resultPath);
    Console.WriteLine("圖片生成完成,保存圖片:" + resultPath);
}

運(yùn)行測試

以本文為分析文本生成詞云圖,代碼如下:

static void Main(string[] args)
{
    string text = File.ReadAllText("待處理數(shù)據(jù).txt");
    var wordWeight = ExtractTagsWithWeight(text);
    var wordFreqs = Counter(text, wordWeight);
    CreateWordCloud(wordFreqs);
    Console.Read();
}

蒙版圖如下:

詞云圖如下(使用蒙版):

詞云圖如下(不使用蒙版):

在得到關(guān)鍵詞的詞頻信息后,通過在線工具網(wǎng)站生成詞云圖片會更加方便一點,如詞云文字圖悅等。

參考資料

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

TF-IDF算法和TextRank算法的分析比較

Python生成詞云圖

到此這篇關(guān)于C#中使用jieba.NET、WordCloudSharp制作詞云圖的文章就介紹到這了,更多相關(guān)C#制作詞云圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#中查找Dictionary中的重復(fù)值的方法

    C#中查找Dictionary中的重復(fù)值的方法

    這篇文章主要介紹了C#中查找Dictionary中的重復(fù)值的方法,需要的朋友可以參考下
    2015-09-09
  • C語言使用getch()讀取方向鍵

    C語言使用getch()讀取方向鍵

    getch()是編程中所用的函數(shù),這個函數(shù)是一個不回顯函數(shù),當(dāng)用戶按下某個字符時,函數(shù)自動讀取,無需按回車,有的C語言命令行程序會用到此函數(shù)做游戲,但是這個函數(shù)并非標(biāo)準(zhǔn)函數(shù),要注意移植性
    2021-07-07
  • 基于WPF實現(xiàn)一個簡單的音頻播放動畫控件

    基于WPF實現(xiàn)一個簡單的音頻播放動畫控件

    這篇文章主要介紹了如何利用WPF實現(xiàn)一個簡單的音頻播放動畫控件,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)或工作有一定幫助,需要的可以參考一下
    2022-07-07
  • c#?如何將字符串轉(zhuǎn)換為大寫或小寫

    c#?如何將字符串轉(zhuǎn)換為大寫或小寫

    這篇文章主要介紹了c#?如何將字符串轉(zhuǎn)換為大寫或小寫,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • C#中如何轉(zhuǎn)換十進(jìn)制、十六進(jìn)制、八進(jìn)制和二進(jìn)制基數(shù)

    C#中如何轉(zhuǎn)換十進(jìn)制、十六進(jìn)制、八進(jìn)制和二進(jìn)制基數(shù)

    文章介紹了如何使用Convert類的ToInt64和ToString方法進(jìn)行不同進(jìn)制之間的轉(zhuǎn)換,并提供了具體的代碼示例,通過將16替換為其他進(jìn)制數(shù),可以實現(xiàn)八進(jìn)制和二進(jìn)制的轉(zhuǎn)換
    2025-01-01
  • C#中的序列化與反序列化方式

    C#中的序列化與反序列化方式

    本文介紹了C#中的序列化和反序列化概念、目的及其在不同場景中的應(yīng)用,文章詳細(xì)講解了二進(jìn)制序列化、XML序列化和JSON序列化的方法和特點,并提供了一些示例代碼
    2024-12-12
  • C#利用Aspose.PDF實現(xiàn)PDF轉(zhuǎn)EPUB的完整指南

    C#利用Aspose.PDF實現(xiàn)PDF轉(zhuǎn)EPUB的完整指南

    在 .NET 開發(fā)中,Aspose.PDF 是一個強(qiáng)大的庫,能夠幫助我們處理 PDF 文件的各種任務(wù),包括將 PDF 轉(zhuǎn)換為其他格式,如 EPUB,本文將介紹如何使用 Aspose.PDF 在 C# 中實現(xiàn)將 PDF 轉(zhuǎn)換為 EPUB 的功能,需要的朋友可以參考下
    2025-02-02
  • C#開發(fā)微信門戶及應(yīng)用(3) 文本消息和圖文消息應(yīng)答

    C#開發(fā)微信門戶及應(yīng)用(3) 文本消息和圖文消息應(yīng)答

    這篇文章主要為大家詳細(xì)介紹了C#開發(fā)微信門戶及應(yīng)用第二篇,微信文本消息和圖文消息的應(yīng)答,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • C#實現(xiàn)折半查找算法

    C#實現(xiàn)折半查找算法

    這篇文章介紹了C#實現(xiàn)折半查找的算法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • C#實現(xiàn)獲取MAC地址的方法

    C#實現(xiàn)獲取MAC地址的方法

    這篇文章主要介紹了C#實現(xiàn)獲取MAC地址的方法,很實用的功能,需要的朋友可以參考下
    2014-08-08

最新評論

阿拉善盟| 彰化县| 丹巴县| 仁寿县| 信阳市| 保德县| 浠水县| 绥江县| 五台县| 瑞安市| 柳州市| 云南省| 安达市| 高州市| 沐川县| 康定县| 水富县| 横山县| 双辽市| 同江市| 大城县| 富平县| 图木舒克市| 乌兰察布市| 临潭县| 元谋县| 伊吾县| 水城县| 怀化市| 瑞昌市| 江源县| 青浦区| 留坝县| 沅陵县| 太仆寺旗| 玛沁县| 金阳县| 衢州市| 乌鲁木齐市| 丹凤县| 闽清县|