欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

詞云簡介

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

準備工作

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

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

基本算法

算法主要步驟如下:

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

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

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

算法實現(xiàn)

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

/// <summary>
/// 從指定文本中抽取關鍵詞的同時得到其權重
/// </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("權重");
    sbr.AppendLine(",");
    foreach (var item in wordWeight)
    {
        sbr.Append(item.Word);
        sbr.Append(",");
        sbr.Append(item.Weight);
        sbr.AppendLine(",");
    }
    string filename = "關鍵詞權重統(tǒng)計.csv";
    File.WriteAllText(filename, sbr.ToString(), Encoding.UTF8);
    Console.WriteLine("關鍵詞提取完成:" + filename);
    return wordWeight.ToArray();
}

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

/// <summary>
/// 分詞并統(tǒng)計詞頻:默認為精確模式,同時也使用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)計結果.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);
}

運行測試

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

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

蒙版圖如下:

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

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

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

參考資料

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

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

Python生成詞云圖

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

相關文章

  • c#實現(xiàn)萬年歷示例分享 萬年歷農歷查詢

    c#實現(xiàn)萬年歷示例分享 萬年歷農歷查詢

    這篇文章主要介紹了c#實現(xiàn)萬年歷的方法,可以顯示農歷、節(jié)氣、節(jié)日、星座、星宿、屬相、生肖、閏年月、時辰,大家參考使用吧
    2014-01-01
  • C#中判斷本地系統(tǒng)的網絡連接狀態(tài)的方法

    C#中判斷本地系統(tǒng)的網絡連接狀態(tài)的方法

    C#中一般通過InternetGetConnectedState函數返回本地系統(tǒng)的網絡連接狀態(tài),下面簡單介紹下,需要的朋友可以參考下
    2013-10-10
  • Unity實現(xiàn)3D貪吃蛇的移動代碼

    Unity實現(xiàn)3D貪吃蛇的移動代碼

    這篇文章主要為大家詳細介紹了Unity實現(xiàn)3D貪吃蛇的移動代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • winform實現(xiàn)拖動文件到窗體上的方法

    winform實現(xiàn)拖動文件到窗體上的方法

    這篇文章主要介紹了winform實現(xiàn)拖動文件到窗體上的方法,以實例分析了C#中WinForm操作窗體及文件的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • C#控制圖像旋轉和翻轉的方法

    C#控制圖像旋轉和翻轉的方法

    這篇文章主要介紹了C#控制圖像旋轉和翻轉的方法,涉及C#圖像操作中RotateFlip方法的相關使用技巧,需要的朋友可以參考下
    2015-06-06
  • C#導出Excel的方法

    C#導出Excel的方法

    本文給大家分享的是基于.net 1.0開發(fā)的程序如何實現(xiàn)導出Excel的方法和示例,使用的是UltraWebGrid自帶導出Excel的控件,非常的簡單實用,有需要的小伙伴可以參考下。
    2015-06-06
  • C#適用于like語句的SQL格式化函數

    C#適用于like語句的SQL格式化函數

    這篇文章主要介紹了C#適用于like語句的SQL格式化函數,可實現(xiàn)對字符串進行sql格式化,并且符合like查詢的格式,非常實用,需要的朋友可以參考下
    2014-10-10
  • C#中調用命令行cmd開啟wifi熱點的實例代碼

    C#中調用命令行cmd開啟wifi熱點的實例代碼

    最近想在win7上開啟wifi熱點,于是就弄出下面這個小東西,里面涉及如何在控制臺上輸入命令,分享一下。首先在VS中創(chuàng)建一個window窗口,然后創(chuàng)建兩個四個button,兩個輸入框
    2013-04-04
  • 詳解WPF如何顯示具有層級關系的數據

    詳解WPF如何顯示具有層級關系的數據

    這篇文章主要為大家詳細介紹了在WPF中如何顯示具有層級關系的數據,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-04-04
  • 通過實例解析c# yield關鍵字使用方法

    通過實例解析c# yield關鍵字使用方法

    這篇文章主要介紹了通過實例解析c# yield關鍵字使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09

最新評論