2008-12-10 4 views
13

Ich mache eine kleine C# Anwendung und möchte eine Tag Cloud aus einem einfachen Text extrahieren. Gibt es eine Funktion, die das für mich tun könnte?Tag Cloud in C#

Antwort

0

Ich bin mir nicht sicher, ob dies ist genau das, was Sie suchen, aber es kann Ihnen den Einstieg erleichtern:

LINQ, die Wortfrequenz zählt (in VB, aber ich bin der Umstellung auf C# jetzt) ​​

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

Hier ist eine ASP.NET Cloud COntrol, die Ihnen vielleicht helfen könnte, zumindest anzufangen, vollständige Quelle enthalten.

+0

Der von Ihnen angegebene Link ist jetzt tot. –

+0

Immer noch tot. Soll es auf http://www.codeproject.com/Articles/14661/Cloud-Control-for-ASP-NET verweisen? –

11

Aufbau einer Cloud-Tag ist, wie ich es sehe, ein zweiteiliges Verfahren:

Zuerst müssen Sie teilen und Ihre Token zu zählen. Je nachdem, wie das Dokument strukturiert ist, sowie in der Sprache, in der es geschrieben ist, könnte dies so einfach sein wie das Zählen der durch Leerzeichen getrennten Wörter. Dies ist jedoch eine sehr naive Herangehensweise, da Wörter wie der, of, a, etc ... die größte Wortanzahl haben und als Tags nicht sehr nützlich sind. Ich würde vorschlagen, eine Art schwarze Liste zu implementieren, um die häufigsten und bedeutungslosesten Tags auszuschließen.

Sobald Sie das Ergebnis in einem haben (Tag, count) Art und Weise, Sie etwas ähnliches wie dem folgenden Code verwenden:

(Suchen Sie eine Liste von SearchRecordEntity, SearchRecordEntity hält den Tag und seine Zählung, SearchTagElement ist eine Unterklasse von SearchRecordEntity, die das TagCategory Attribut hat, und ProcessedTags ist eine Liste der SearchTagElements, die das Ergebnis)

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

Sie hält eine Kategorie und die Menge der Artikel speichern könnte es in einer Art Sammlung hat, oder Datenbanktabelle .

Daraus können Sie die Anzahl für eine bestimmte Kategorie erhalten und bestimmte Grenzen haben. Also ist Ihr Parameter die Kategorie und Ihr Rückgabewert ist eine Anzahl.

Wenn also die Anzahl> 10 & < 20 ist, wenden Sie einen CSS-Stil auf den Link an, der eine bestimmte Größe hat.

Sie können diese Zähler als Schlüssel in einer Auflistung speichern und erhalten dann den Wert, wo der Schlüssel mit Ihrem Rückgabewert übereinstimmt (wie oben erwähnt).

Ich habe keinen Quellcode für diesen Prozess zur Hand, aber Sie werden keine einfache Funktion finden, um all dies für Sie zu tun. Eine Kontrolle, ja (wie oben).

Dies ist ein sehr konventioneller Ansatz und der Standard Weg, es zu tun, was ich in Magazin Tutorials, etc, und die erste Annäherung, die ich denke (nicht unbedingt die beste) gesehen habe.

3

Vielleicht möchten Sie einen Blick auf WordCloud, ein Projekt auf CodeProject. Es enthält 430 Stoppwörter (wie the, , a usw.) und verwendet den Porter-Stemming-Algorithmus, der Wörter auf ihre Wurzel reduziert, so dass "Stammstammstamm" alle als 1 Vorkommen desselben Wortes gezählt werden.

Es ist alles in C# - das einzige, was Sie tun müssen, um es HTML-Ausgabe anstelle der Visualisierung zu ändern, die es erstellt.

9

Ich würde wirklich empfehlen, zu verwenden. Es ist eine sehr saubere Implementierung, die sich um das Gruppieren, Zählen und Rendern von Tags kümmert. Es bietet auch Filterfunktionen.

+1

Abgestellt, ich habe es gerade implementiert und es tut alles, was ich brauche out of the box. – Simon

-1

The Zoomable TagCloud Generator die Schlüsselwörter aus einer bestimmten Quelle (Textdatei und anderen Quellen) extrahiert und zeigt die TagCloud als Zooming User Interface (ZUI)

0

Werfen Sie einen Blick darauf. Es hat für mich funktioniert. Es gibt ein Projekt im Examples-Ordner namens WebExample, das Ihnen bei der Lösung dieses Problems behilflich sein wird. https://github.com/chrisdavies/Sparc.TagCloud