2008-12-10 101 views
13

我正在製作一個小的C#應用程序並希望從簡單的純文本中提取標籤雲。有沒有可以爲我做的功能?C中的標籤雲#

回答

0

我不知道如果這正是你尋找,但它可以幫助您開始:

LINQ算數詞頻(在VB,但我轉換爲C#現在)

Dim Words = "Hello World))))) This is a test Hello World" 
Dim CountTheWords = From str In Words.Split(" ") _ 
        Where Char.IsLetter(str) _ 
        Group By str Into Count() 
4

這是一個ASP.NET Cloud COntrol,這可能會幫助您至少開始使用,包括全部源代碼。

+0

您提供的鏈接現已停止。 – 2011-08-21 15:30:04

+0

仍然死亡。它應該指向http://www.codeproject.com/Articles/14661/Cloud-Control-for-ASPNET嗎? – 2013-09-21 14:55:41

11

建立一個標籤雲,在我看來,一個兩部分的過程:

首先,你需要分割和計數您的令牌。根據文檔的結構和寫入語言的不同,這可能與計算空格分隔單詞一樣簡單。然而,這是一種非常幼稚的方法,因爲像a,a等這樣的詞將具有最大的單詞數量,並且作爲標籤並不是很有用。我會建議實施某種黑名單,以排除最常見和無意義的標籤。

一旦有結果的(標記,計數)的方式,你可以使用類似於下面的代碼的東西:

(搜索是SearchRecordEntity的列表,SearchRecordEntity持有標記及其計數,SearchTagElement是SearchRecordEntity的子類,具有TagCategory屬性,ProcessedTags是SearchTagElements的名單持有結果)

double max = Searches.Max(x => (double)x.Count); 
List<SearchTagElement> processedTags = new List<SearchTagElement>(); 

foreach (SearchRecordEntity sd in Searches) 
{ 
    var element = new SearchTagElement();      

    double count = (double)sd.Count; 
    double percent = (count/max) * 100;      

    if (percent < 20) 
    { 
     element.TagCategory = "smallestTag"; 
    } 
    else if (percent < 40) 
    { 
     element.TagCategory = "smallTag"; 
    } 
    else if (percent < 60) 
    { 
     element.TagCategory = "mediumTag"; 
    } 
    else if (percent < 80) 
    { 
     element.TagCategory = "largeTag"; 
    } 
    else 
    { 
     element.TagCategory = "largestTag"; 
    } 

    processedTags.Add(element); 
} 
0

你可以存儲一個類別,它在某種集合的項目的數量,或數據庫表。

由此,您可以獲得某個類別的計數並具有一定的界限。所以你的參數是類別,你的返回值是一個計數。

因此,如果計數> 10 & < 20,則將.CSS樣式應用於具有特定大小的鏈接。

您可以將這些計數存儲爲集合中的鍵,然後獲取鍵與您的返回值匹配的值(如上所述)。

我還沒有手頭的源代碼,但你不會找到一個簡單的函數來爲你做這一切。控制,是的(如上)。

這是一個非常傳統的方法和從雜誌教程等中看到的標準方式,以及我會想到的第一種方法(不一定是最好的)。

3

你可能想看看WordCloud CodeProject上的一個項目。它包含430個停用詞(如the,an,a等),並使用Porter詞幹算法,該算法將詞彙縮減到其根,以便「詞幹詞幹」全部計爲同一詞的1次出現。

這一切都在C#中 - 你必須做的唯一一件事情就是修改它來輸出HTML,而不是它創建的可視化。