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.
NotaPorque 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,
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.