2008-12-10 23 views
13

Estoy haciendo una pequeña aplicación C# y me gustaría extraer una nube de etiquetas desde un simple texto plano. ¿Hay alguna función que pueda hacer eso por mí?Nube de etiquetas en C#

Respuesta

0

no estoy seguro de si esto es exactamente lo que busca pero puede ayudar a empezar:

LINQ que cuenta la frecuencia de palabras (en VB pero yo estoy convirtiendo a C# ahora)

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

Aquí hay un ASP.NET Cloud COntrol, que podría ayudarlo al menos a comenzar, fuente completa incluida.

+0

El enlace que proporcionó está ahora muerto. –

+0

Todavía muerto. ¿Se supone que apunta a http://www.codeproject.com/Articles/14661/Cloud-Control-for-ASP-NET? –

11

La construcción de una nube de etiquetas es, en mi opinión, un proceso de dos partes:

En primer lugar, es necesario dividir y contar sus fichas. Dependiendo de cómo está estructurado el documento, así como del idioma en el que está escrito, esto podría ser tan fácil como contar las palabras separadas por espacios. Sin embargo, este es un enfoque muy ingenuo, ya que las palabras como,, de, a, etc. tendrán el mayor número de palabras y no son muy útiles como etiquetas. Sugiero implementar algún tipo de lista negra de palabras para excluir las etiquetas más comunes y sin sentido.

Una vez que tenga el resultado en un (etiqueta, count) forma, se podría usar algo similar al siguiente código:

(Búsquedas hay una lista de SearchRecordEntity, SearchRecordEntity sostiene la etiqueta y su recuento, SearchTagElement es una subclase de SearchRecordEntity que tiene el atributo TagCategory y ProcessedTags es una lista de SearchTagElements que mantiene el resultado)

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

se puede almacenar una categoría y la cantidad de artículos que tiene en algún tipo de colección, o una tabla de base de datos .

De eso, puede obtener el conteo de cierta categoría y tener ciertos límites. Entonces su parámetro es la categoría, y su valor de retorno es un conteo.

Así que si el recuento es> 10 & < 20, luego aplique un estilo .CSS al enlace que tendrá un cierto tamaño.

Puede almacenar estos recuentos como claves en una colección, y luego obtener el valor donde la clave coincide con su valor de retorno (como mencioné anteriormente).

No tengo el código fuente a mano para este proceso, pero tampoco encontrará una función simple para hacer todo esto por usted. Un control, sí (como arriba).

Este es un enfoque muy convencional y la forma estándar de hacerlo a partir de lo que he visto en los tutoriales de revistas, etc., y el primer enfoque que pensaría (no necesariamente el mejor).

3

Es posible que desee echar un vistazo a WordCloud, un proyecto en CodeProject. Incluye 430 palabras de detención (como the, an, a, etc.) y utiliza el algoritmo de derivación Porter, que reduce las palabras a su raíz para que "raíz madre derivada" se cuenten como 1 ocurrencia de la misma palabra.

Todo está en C#: lo único que tendría que hacer es modificarlo para generar HTML en lugar de la visualización que crea.

9

Realmente recomendaría usar http://thetagcloud.codeplex.com/. Es una implementación muy limpia que se encarga de agrupar, contar y representar etiquetas. También proporciona capacidades de filtrado.

+1

Secundado, lo acabo de implementar y hace todo lo que necesito de fábrica. – Simon

-1

El Zoomable TagCloud Generator que extrae palabras clave de una determinada fuente (archivo de texto y otras fuentes) y muestra el TagCloud como zoom interfaz de usuario (ZUI)

Cuestiones relacionadas