Récemment, j'ai vivement voulu savoir à quelle fréquence le mot "café" est trouvé dans le public de mon ami, ainsi que construire un beau nuage de mots, en fonction de la fréquence de leur apparition dans les messages.
Si vous êtes intéressé à savoir comment le faire littéralement à genoux en utilisant C #, alors s'il vous plaît, sous chat.
RemarqueParce que cette application a été écrite à genoux et la seule tâche était d'amuser ma curiosité, il a été décidé de la diviser en 2 étapes: récupérer les mots et les enregistrer dans un fichier, en nettoyer toutes les prépositions avec des stylos, puis construire un nuage à partir du fichier reçu.
Pour certaines tâches plus sérieuses, il vaut la peine d'utiliser des dictionnaires de prépositions, de terminaisons ou d'autres options alternatives.
Obtenir des données de VK
Tout d'abord, installez la
bibliothèque appropriée. Nous créons l'application VK.
var services = new ServiceCollection(); var vkApi = new VkApi(services);
Nous autoriserons, bien que cette étape puisse être ignorée, mais alors le nombre de "murs" disponibles dans VK diminuera fortement.
vkApi.Authorize(new ApiAuthParams { AccessToken = " ",Settings = Settings.All});
ou:
vkApi.Authorize(new ApiAuthParams { Login = "Login", Password = "Password", Settings = Settings.All });
Nous obtenons les 100 derniers messages sur le mur sélectionné.
var posts=vkApi.Wall.Get(new WallGetParams { OwnerId = (long)Id,
À partir de la collection existante, nous faisons une grande ligne.
foreach (var post in posts.WallPosts) { if (!string.IsNullOrEmpty(post.Text)) data += post.Text; }
De plus, vous pouvez effacer la ligne sélectionnée des signes de ponctuation.
data = Regex.Replace(data, "\\!|\\?|\\(|\\)|\"|\\#|\\,|»|«|-", string.Empty);
Eh bien, obtenons une collection de mots.
var words = data.Split(default(Char[]), StringSplitOptions.RemoveEmptyEntries).ToList();
À l'avant-dernière étape, nous composons un dictionnaire avec la fréquence des mots.
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); } }
À la fin, nous le trions et, si vous le souhaitez, l'enregistrez dans un fichier.
wordsDictionary = wordsDictionary.OrderByDescending(x => x.Value) .ToDictionary(x => x.Key, x => x.Value);
Passer à la création d'un nuage de mots
Pour ce faire, vous devez ajouter la dépendance System.Drawing au projet et à ce
package .
Ajoutez de la dépendance à notre application.
using WordCloudGen = WordCloud.WordCloud;
Et nous formons l'image.
var wc = new WordCloudGen(1024, 1024); wc.Draw(wordsDictionary.Keys.ToList(), wordsDictionary.Values.ToList()) .Save("cloudwords.jpg"); Console.WriteLine("pict create");
En conclusion, je veux dire merci à l'utilisateur
worldbeater et rappeler que la bibliothèque pour VK a un grand support en
tg . Soit dit en passant, le mot «café» pour 100 messages est apparu 142 fois.