Недавно мне резко захотелось узнать, как часто слово «кофе» встречается в паблике моей знакомой, а так же построить красивое облако слов, опираясь на частоту их появления в постах.
Если вас заинтересовало, как это сделать буквально на колене, используя 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 раза.