VC palavra nuvem no joelho

Recentemente, eu queria muito descobrir com que frequência a palavra "café" é encontrada no público do meu amigo, além de criar uma bela nuvem de palavras, com base na frequência de sua aparição nas postagens.
Se você estiver interessado em fazê-lo literalmente de joelhos usando C #, então por favor, em cat.

Nota
Porque esse aplicativo foi escrito de joelhos e a única tarefa era divertir minha curiosidade, decidiu-se dividi-lo em 2 etapas: obter as palavras e salvar em um arquivo, limpar todas as preposições com canetas e criar uma nuvem a partir do arquivo recebido.
Para alguma tarefa mais séria, vale a pena usar dicionários de preposições, finais ou outras opções alternativas.

Obtendo dados do VK


Primeiro, instale a biblioteca apropriada. Criamos o aplicativo VK.

var services = new ServiceCollection(); var vkApi = new VkApi(services); 

Autorizaremos, embora este estágio possa ser pulado, mas o número de "paredes" disponíveis no VK diminuirá acentuadamente.

  vkApi.Authorize(new ApiAuthParams { AccessToken = " ",Settings = Settings.All}); 

ou:

 vkApi.Authorize(new ApiAuthParams { Login = "Login", Password = "Password", Settings = Settings.All }); 

Recebemos as últimas 100 postagens no mural selecionado.

 var posts=vkApi.Wall.Get(new WallGetParams { OwnerId = (long)Id,//   id    - Count = 100 }); 

A partir da coleção existente, criamos uma linha grande.

 foreach (var post in posts.WallPosts) { if (!string.IsNullOrEmpty(post.Text)) data += post.Text; } 

Além disso, você pode limpar a linha selecionada dos sinais de pontuação.

  data = Regex.Replace(data, "\\!|\\?|\\(|\\)|\"|\\#|\\,|»|«|-", string.Empty); 

Bem, vamos pegar uma coleção de palavras.

  var words = data.Split(default(Char[]), StringSplitOptions.RemoveEmptyEntries).ToList(); 

No penúltimo estágio, compomos um dicionário com a frequência das palavras.

 var wordsDictionary = new Dictionary<string, int>(); foreach (var word in words) { if (wordsDictionary.ContainsKey(word.ToLower())) wordsDictionary[word.ToLower()] += 1; else { wordsDictionary.Add(word.ToLower(),1); } } 

No final, classificamos e, se desejado, salvamos em um arquivo.

 wordsDictionary = wordsDictionary.OrderByDescending(x => x.Value) .ToDictionary(x => x.Key, x => x.Value); 

Passando para a criação de uma nuvem de palavras


Para fazer isso, você deve adicionar a dependência System.Drawing ao projeto e a este pacote .

Adicione dependência ao nosso aplicativo.

 using WordCloudGen = WordCloud.WordCloud; 

E nós formamos a imagem.

  var wc = new WordCloudGen(1024, 1024); wc.Draw(wordsDictionary.Keys.ToList(), wordsDictionary.Values.ToList()) .Save("cloudwords.jpg"); Console.WriteLine("pict create"); 

Concluindo, quero agradecer ao usuário worldbeater e lembrar que a biblioteca do VK tem um grande suporte em tg . A propósito, a palavra "café" para 100 postagens ocorreu 142 vezes.

Source: https://habr.com/ru/post/pt458524/


All Articles