Nuvem de etiquetas em C #

votos
13

Eu estou fazendo um pequeno C # aplicativo e gostaria de extrair uma nuvem de tags a partir de um texto simples simples. Existe uma função que poderia fazer isso por mim?

Publicado 10/12/2008 em 01:34
fonte usuário
Em outras línguas...                            


10 respostas

votos
11

Construir uma tag cloud é, a meu ver, um processo de duas partes:

Primeiro, você precisa para dividir e contar suas fichas. Dependendo de como o documento está estruturado, bem como a língua está escrito, este poderia ser tão fácil como contar as palavras separadas por espaço. No entanto, esta é uma abordagem muito ingênuo, como palavras como o, de, um, etc ... terá o maior número de palavras e não são muito úteis como tags. Eu sugeriria implementar algum tipo de palavra lista negra, a fim de excluir as tags mais comuns e sem sentido.

Uma vez que você tem o resultado de uma forma (tag, count), você poderia usar algo semelhante ao seguinte código:

(Pesquisas é uma lista de SearchRecordEntity, SearchRecordEntity detém a marca e sua contagem, SearchTagElement é uma subclasse de SearchRecordEntity que tem o atributo TagCategory e ProcessedTags é uma lista de SearchTagElements que guarda o 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);
}
Respondeu 10/12/2008 em 01:54
fonte usuário

votos
9

Eu realmente recomendo o uso http://thetagcloud.codeplex.com/ . É uma implementação muito limpo que cuida de agrupamento, contagem e prestação de tags. Ele também fornece capacidades de filtragem.

Respondeu 10/06/2009 em 13:10
fonte usuário

votos
4

Aqui é uma nuvem COntrol ASP.NET , que pode ajudá-lo, pelo menos, começar, fonte completo incluído.

Respondeu 10/12/2008 em 01:47
fonte usuário

votos
3

Dê uma olhada em http://sourcecodecloud.codeplex.com/ digite descrição da imagem aqui

Respondeu 08/02/2012 em 15:03
fonte usuário

votos
3

Você pode querer dar uma olhada em WordCloud , um projeto sobre CodeProject. Ele inclui pára 430 palavras (como the, an, a, etc.) e utiliza o algoritmo resultante Porter, o que reduz a sua raiz palavras de modo a que "provindo resultante haste" são todos contados como uma ocorrência da mesma palavra.

É tudo em C # - a única coisa que você tem que fazer isso modificá-lo para saída HTML em vez da visualização que ele cria.

Respondeu 10/12/2008 em 02:21
fonte usuário

votos
0

Dê uma olhada neste. Ela trabalhou para mim. Há um projeto sob Exemplos pasta chamada WebExample que irá ajudá-lo para resolver isso. https://github.com/chrisdavies/Sparc.TagCloud

Respondeu 21/08/2013 em 12:21
fonte usuário

votos
0

Ter um olhar para esta resposta para um algoritmo:

Algoritmo para implementar uma nuvem da palavra como Wordle

O "Disorganizer" mencionado nas respostas poderiam servir o seu propósito. Com um pouco de mudança, você pode deixar este "Disorganizer" para servir uma imagem, do jeito que você queria. PS: O código é escrito em C # https://github.com/chandru9279/zasz.me/blob/master/zasz.me/

Respondeu 19/06/2012 em 13:18
fonte usuário

votos
0

Você pode armazenar uma categoria e a quantidade de itens que ele tem em algum tipo de coleção, ou uma tabela de banco de dados.

A partir daí, você pode começar a contagem para uma determinada categoria e ter certos limites. Portanto, o seu parâmetro é a categoria e seu valor de retorno é uma contagem.

Então, se a contagem for> 10 & <20, em seguida, aplicar um estilo .CSS para o link que será de um determinado tamanho.

Você pode armazenar essas contagens como chaves em uma coleção, e, em seguida, obter o valor, onde a chave corresponde ao seu valor de retorno (como mencionei acima).

Eu não tenho o código fonte na mão para este processo, mas você não vai encontrar uma função simples para fazer tudo isso para você também. Um controlo, sim (como acima).

Esta é uma abordagem muito convencional e a maneira padrão de fazer isso do que eu já vi em tutoriais de revistas, etc, ea primeira abordagem que eu poderia pensar de (não necessariamente o melhor).

Respondeu 10/12/2008 em 02:17
fonte usuário

votos
0

Eu não tenho certeza se isso é exatamente o que você está procurando, mas pode ajudar você a começar:

LINQ que conta a frequência das palavras (em VB, mas eu estou convertendo para C # agora)

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()
Respondeu 10/12/2008 em 01:44
fonte usuário

votos
-1

O Generator TagCloud Zoomable que extrai palavras-chave de uma determinada fonte (arquivo de texto e outras fontes) e exibe o TagCloud de Zooming User Interface (ZUI)

Respondeu 13/06/2012 em 20:52
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more