c# tag-cloud

Tag Cloud en C#



tag-cloud (10)

Aquí hay un control de nube de ASP.NET , que podría ayudarle al menos a comenzar, fuente completa incluida.

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


Crear una nube de etiquetas es, como yo lo veo, un proceso de dos partes:

Primero, necesitas dividir y contar tus tokens. 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 una forma (etiqueta, conteo), podría usar algo similar al siguiente código:

(Searches es una lista de SearchRecordEntity, SearchRecordEntity contiene la etiqueta y su conteo, SearchTagElement es una subclase de SearchRecordEntity que tiene el atributo TagCategory, y ProcessedTags es una lista de SearchTagElements que contiene 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); }


Es posible que desee echar un vistazo a WordCloud , un proyecto en CodeProject. Incluye 430 palabras de detención (como, an , a , etc.) y utiliza el algoritmo de derivación de Porter, que reduce las palabras a su raíz para que el "tallo de tallo del tallo" se cuente 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.


No estoy seguro de si esto es exactamente lo que está buscando, pero puede ayudarlo a comenzar:

LINQ que cuenta la frecuencia de las palabras (en VB pero 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()


Puede almacenar una categoría y la cantidad de elementos que tiene en algún tipo de colección o tabla de base de datos.

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

Por lo tanto, si el recuento es> 10 y <20, aplique un estilo .CSS al enlace, que tendrá un determinado 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 en el que pensaría (no necesariamente el mejor).


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.




El Zoomable TagCloud Generator que extrae las palabras clave de una fuente determinada (archivo de texto y otras fuentes) y muestra TagCloud como Zooming User Interface (ZUI)