Kata cloud VC di atas lutut

Baru-baru ini, saya dengan tajam ingin mengetahui seberapa sering kata "kopi" ditemukan di publik teman saya, serta membangun awan kata-kata yang indah, berdasarkan frekuensi kemunculannya dalam posting.
Jika Anda tertarik untuk melakukannya dengan berlutut menggunakan C #, silakan, di bawah kucing.

Catatan
Karena aplikasi ini ditulis di atas lutut saya dan satu-satunya tugas adalah untuk menghibur rasa ingin tahu saya, diputuskan untuk membaginya menjadi 2 tahap: mendapatkan kata-kata dan menyimpan ke file, membersihkan semua preposisi dari itu dengan pena, dan kemudian membangun awan dari file yang diterima.
Untuk beberapa tugas yang lebih serius, ada baiknya menggunakan kamus preposisi, akhiran atau beberapa opsi alternatif lainnya.

Mendapatkan data dari VK


Pertama, instal perpustakaan yang sesuai. Kami membuat aplikasi VK.

var services = new ServiceCollection(); var vkApi = new VkApi(services); 

Kami akan mengesahkan, meskipun tahap ini dapat dilewati, tetapi kemudian jumlah "dinding" yang tersedia di VK akan menurun tajam.

  vkApi.Authorize(new ApiAuthParams { AccessToken = " ",Settings = Settings.All}); 

atau:

 vkApi.Authorize(new ApiAuthParams { Login = "Login", Password = "Password", Settings = Settings.All }); 

Kami mendapatkan 100 posting terakhir di dinding yang dipilih.

 var posts=vkApi.Wall.Get(new WallGetParams { OwnerId = (long)Id,//   id    - Count = 100 }); 

Dari koleksi yang ada kami membuat satu garis besar.

 foreach (var post in posts.WallPosts) { if (!string.IsNullOrEmpty(post.Text)) data += post.Text; } 

Selanjutnya, Anda dapat menghapus garis yang dipilih dari tanda baca.

  data = Regex.Replace(data, "\\!|\\?|\\(|\\)|\"|\\#|\\,|ยป|ยซ|-", string.Empty); 

Baiklah, mari kita dapatkan kumpulan kata-kata.

  var words = data.Split(default(Char[]), StringSplitOptions.RemoveEmptyEntries).ToList(); 

Pada tahap kedua dari belakang, kami menyusun kamus dengan frekuensi kata.

 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); } } 

Pada akhirnya, kami mengurutkannya dan, jika diinginkan, menyimpannya ke file.

 wordsDictionary = wordsDictionary.OrderByDescending(x => x.Value) .ToDictionary(x => x.Key, x => x.Value); 

Pindah ke membuat kata cloud


Untuk melakukan ini, Anda harus menambahkan dependensi System.Drawing ke proyek dan paket ini.

Tambahkan ketergantungan pada aplikasi kita.

 using WordCloudGen = WordCloud.WordCloud; 

Dan kami membentuk gambar.

  var wc = new WordCloudGen(1024, 1024); wc.Draw(wordsDictionary.Keys.ToList(), wordsDictionary.Values.ToList()) .Save("cloudwords.jpg"); Console.WriteLine("pict create"); 

Sebagai kesimpulan, saya ingin mengucapkan terima kasih kepada pengguna dunia dan ingat bahwa perpustakaan untuk VK memiliki dukungan besar di tg . By the way, kata "kopi" untuk 100 posting terjadi 142 kali.

Source: https://habr.com/ru/post/id458524/


All Articles