Недавно мне резко захотелось узнать, как часто слово «кофе» встречается в паблике моей знакомой, а так же построить красивое облако слов, опираясь на частоту их появления в постах.
Если вас заинтересовало, как это сделать буквально на колене, используя C#, то прошу под кат.

Для начала устанавливаем соответствующую библиотеку. Создаем приложение VK.
Авторизуемся, хотя этот этап можно пропустить, но тогда количество доступных «стен» в вк резко уменьшится.
или:
Получаем 100 последних постов на выбранной стене.
Из имеющейся коллекции составим одну большую строку.
Дальше, можно очистить выбранную строку от знаков препинания.
Ну и извлечем коллекцию слов.
На предпоследнем этапе составим словарь с частотностью слов.
В конце отсортируем его и при желании сохраним в файл.
Для этого нужно обязательно добавить в проект зависимость System.Drawing и вот этот пакет.
Добавляем зависимость в наше приложение.
И формируем изображение.
В заключение хочется сказать спасибо пользователю worldbeater и напомнить, что у библиотеки для вк есть замечательная поддержка в тг. Кстати, слово «кофе» за 100 постов встретилось 142 раза.
Если вас заинтересовало, как это сделать буквально на колене, используя C#, то прошу под кат.

Примечание
Т.к. данное приложение писалось на коленочке и единственной задачей было потешить мое любопытство, то было решено разделить его на 2 этапа: получить слова и сохранить в файл, вычистить из него все предлоги ручками, а после по полученному файлу построить облако.
Для какой-то более серьезной задачи стоит использовать словари предлогов, окончаний или какие-либо еще альтернативные варианты.
Для какой-то более серьезной задачи стоит использовать словари предлогов, окончаний или какие-либо еще альтернативные варианты.
Получение данных из вк
Для начала устанавливаем соответствующую библиотеку. Создаем приложение VK.
var services = new ServiceCollection(); var vkApi = new VkApi(services);
Авторизуемся, хотя этот этап можно пропустить, но тогда количество доступных «стен» в вк резко уменьшится.
vkApi.Authorize(new ApiAuthParams { AccessToken = "ваш токен",Settings = Settings.All});
или:
vkApi.Authorize(new ApiAuthParams { Login = "Login", Password = "Password", Settings = Settings.All });
Получаем 100 последних постов на выбранной стене.
var posts=vkApi.Wall.Get(new WallGetParams { OwnerId = (long)IdНужнойСтены,// для сообществ id должно начинаться с - Count = 100 });
Из имеющейся коллекции составим одну большую строку.
foreach (var post in posts.WallPosts) { if (!string.IsNullOrEmpty(post.Text)) data += post.Text; }
Дальше, можно очистить выбранную строку от знаков препинания.
data = Regex.Replace(data, "\\!|\\?|\\(|\\)|\"|\\#|\\,|»|«|-", string.Empty);
Ну и извлечем коллекцию слов.
var words = data.Split(default(Char[]), StringSplitOptions.RemoveEmptyEntries).ToList();
На предпоследнем этапе составим словарь с частотностью слов.
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); } }
В конце отсортируем его и при желании сохраним в файл.
wordsDictionary = wordsDictionary.OrderByDescending(x => x.Value) .ToDictionary(x => x.Key, x => x.Value);
Переходим к созданию облака слов
Для этого нужно обязательно добавить в проект зависимость System.Drawing и вот этот пакет.
Добавляем зависимость в наше приложение.
using WordCloudGen = WordCloud.WordCloud;
И формируем изображение.
var wc = new WordCloudGen(1024, 1024); wc.Draw(wordsDictionary.Keys.ToList(), wordsDictionary.Values.ToList()) .Save("cloudwords.jpg"); Console.WriteLine("pict create");
В заключение хочется сказать спасибо пользователю worldbeater и напомнить, что у библиотеки для вк есть замечательная поддержка в тг. Кстати, слово «кофе» за 100 постов встретилось 142 раза.
