Recientemente, quería descubrir con qué frecuencia la palabra "café" se encuentra en el público de mi amigo, así como construir una hermosa nube de palabras, en función de la frecuencia de su aparición en las publicaciones.
Si está interesado en cómo hacerlo literalmente de rodillas usando C #, entonces, debajo de cat.
NotaPorque Esta aplicación fue escrita sobre mis rodillas y la única tarea era divertir mi curiosidad, se decidió dividirla en 2 etapas: obtener las palabras y guardarlas en un archivo, limpiar todas las preposiciones con bolígrafos y luego construir una nube a partir del archivo recibido.
Para alguna tarea más seria, vale la pena usar diccionarios de preposiciones, finales u otras opciones alternativas.
Obteniendo datos de VK
Primero, instale la
biblioteca apropiada. Creamos la aplicación VK.
var services = new ServiceCollection(); var vkApi = new VkApi(services);
Autorizaremos, aunque esta etapa se puede omitir, pero la cantidad de "muros" disponibles en VK disminuirá drásticamente.
vkApi.Authorize(new ApiAuthParams { AccessToken = " ",Settings = Settings.All});
o:
vkApi.Authorize(new ApiAuthParams { Login = "Login", Password = "Password", Settings = Settings.All });
Obtenemos las últimas 100 publicaciones en el muro seleccionado.
var posts=vkApi.Wall.Get(new WallGetParams { OwnerId = (long)Id,
De la colección existente hacemos una gran línea.
foreach (var post in posts.WallPosts) { if (!string.IsNullOrEmpty(post.Text)) data += post.Text; }
Además, puede borrar la línea seleccionada de los signos de puntuación.
data = Regex.Replace(data, "\\!|\\?|\\(|\\)|\"|\\#|\\,|»|«|-", string.Empty);
Bueno, consigamos una colección de palabras.
var words = data.Split(default(Char[]), StringSplitOptions.RemoveEmptyEntries).ToList();
En la penúltima etapa, componimos un diccionario con la frecuencia de las palabras.
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); } }
Al final, lo clasificamos y, si lo desea, lo guardamos en un archivo.
wordsDictionary = wordsDictionary.OrderByDescending(x => x.Value) .ToDictionary(x => x.Key, x => x.Value);
Pasando a crear una nube de palabras
Para hacer esto, debe agregar la dependencia System.Drawing al proyecto y este
paquete .
Agregue dependencia a nuestra aplicación.
using WordCloudGen = WordCloud.WordCloud;
Y formamos la imagen.
var wc = new WordCloudGen(1024, 1024); wc.Draw(wordsDictionary.Keys.ToList(), wordsDictionary.Values.ToList()) .Save("cloudwords.jpg"); Console.WriteLine("pict create");
En conclusión, quiero agradecer al usuario
worldbeater y recordar que la biblioteca para VK tiene un gran soporte en
tg . Por cierto, la palabra "café" para 100 publicaciones ocurrió 142 veces.