KnowledgePicker.WordCloud
adalah perpustakaan modern (.NET Standard 2.0) dan cepat untuk mengatur dan menggambar awan kata (alias tag cloud atau wordle). Ia menggunakan Quadtrees untuk kinerja sangat cepat. Itu dikelola oleh tim KnowledgePicker.
Instal paket NuGet KnowledgePicker.WordCloud
.
Catatan Saat ini hanya ada satu mesin gambar berdasarkan SkiaSharp. Pada beberapa platform, dependensi tambahan perlu diinstal agar SkiaSharp berfungsi dengan benar. Misalnya, di Linux, tambahkan SkiaSharp.NativeAssets.Linux; untuk Blazor WebAssembly, tambahkan SkiaSharp.Views.Blazor.
Dapatkan koleksi WordCloudEntry
s. Misalnya, kita memiliki kamus frekuensi kata:
var frekuensi = Kamus baru<string, int>();// ...mengumpulkan frekuensi kata entah bagaimana...IEnumerable<WordCloudEntry> wordEntries = frekuensi.Select(p => new WordCloudEntry(p.Key, p.Value)) ;
Buat konfigurasi cloud dunia:
var wordCloud = new WordCloudInput(wordEntries){Lebar = 1024,Tinggi = 256,MinFontSize = 8,MaxFontSize = 32};
Kita perlu membuat mesin gambar, ukuran font dan tata letak. Saat ini, kami menggunakan SkiaSharp untuk pengukuran (dan gambar) font lintas platform dengan cepat. Kami juga hanya mendukung ukuran font logaritmik dan tata letak spiral. Semua hal ini diterapkan secara umum dan dapat diperluas dengan mudah (kontribusi dipersilahkan).
var sizer = LogSizer baru(wordCloud);menggunakan var engine = SkGraphicEngine baru(sizer, wordCloud);var layout = new SpiralLayout(wordCloud);var colorizer = new RandomColorizer(); // opsionalvar wcg = WordCloudGenerator baru<SKBitmap>(wordCloud, mesin, tata letak, pewarna);
Anda juga dapat menggunakan SpecificColorizer
untuk mewarnai kata-kata tertentu dengan warna yang dipilih:
var colorizer = new SpesifikColorizer(Kamus baru<string, Color>{["KnowledgePicker"] = Color.FromArgb(0x0f3057),["WordCloud"] = Color.FromArgb(0xe25a5a)},fallback: new RandomColorizer()); // argumen fallback bersifat opsional
Anda juga dapat memasukkan font ke dalam mesin grafis secara opsional:
var jenis huruf = SKTypeface.FromFamilyName("DejaVu Serif", SKFontStyle.Normal);menggunakan var engine = new SkGraphicEngine(sizer, wordCloud, jenis huruf);
Sekarang kita dapat mengatur topik cloud:
IEnumerable<(Item Tata Letak, Ukuran Font ganda)> item = wcg.Arrange();
Dan jika kita berada dalam tampilan Razor pada aplikasi ASP.NET Core, misalnya, kita dapat menghasilkan SVG dari items
:
<svg viewBox="0,0,@wordCloud.Width,@wordCloud.Height">@foreach (var (item, fontSize) dalam item){const string format = "0.##"; // Gunakan maksimal 2 tempat desimal. var x = (item.Location.X - item.Measured.Left).ToString(format);var y = (item.Location.Y - item.Measured.Top).ToString(format);var fs = fontSize.ToString (format);var warna = wcg.GetColorHexString(item); <text transform="translate(@x, @y)" font-size="@fs" fill="@color">@item.Entry.Word</text>}</svg>
Alternatifnya, kita dapat menggambar topik cloud (lihat juga contoh WordFrequencies.ConsoleApp
):
menggunakan var final = new SKBitmap(wordCloud.Width, wordCloud.Height);menggunakan var canvas = new SKCanvas(final);// Menggambar di latar belakang putih.canvas.Clear(SKColors.White);menggunakan var bitmap = wcg.Draw( );canvas.DrawBitmap(bitmap, 0, 0);// Simpan ke PNG.menggunakan var data = final.Encode(SKEncodedImageFormat.Png, 100);menggunakan var writer = File.Create("output.png");data.SaveTo(writer);
Algoritme cloud dunia awalnya di-porting dari SourceCodeCloud. Ia menggunakan Quadtrees, oleh karena itu kecepatannya seharusnya cukup cepat. Ini terinspirasi oleh implementasi Wordle (algoritma yang dulu terkenal digunakan di situs Wordle.net yang sekarang sudah tidak berfungsi).
Aplikasi konsol sederhana yang menggambar kata cloud PNG untuk kata-kata yang diberikan pada input standarnya adalah WordFrequencies.ConsoleApp
.
Pustaka ini juga digunakan dalam produksi oleh KnowledgePicker. Mereka menggunakannya untuk menggambar awan topik untuk profil pengguna.
Seperti disebutkan di atas, saat ini hanya sebagian fungsi yang diterapkan, namun semua kontribusi diterima. Jangan ragu untuk membuka masalah dan menarik permintaan.
Pengujian saat ini hanya didukung di Linux, karena merupakan pengujian snapshot (menghasilkan gambar cloud kata dan membandingkannya byte demi byte dengan snapshot) dan diperlukan lebih banyak upaya untuk memastikan ini bersifat lintas platform (misalnya, gunakan yang sama persis huruf). Di Windows, pengujian dapat dijalankan di WSL (Visual Studio mendukung ini secara langsung). Pengujian juga dijalankan secara otomatis di GitHub Actions.
Setelah memasukkan tag, alur kerja GitHub release.yml
dipicu yang membangun dan menerbitkan paket NuGet.