KnowledgePicker.WordCloud
عبارة عن مكتبة حديثة (.NET Standard 2.0) وسريعة لترتيب ورسم سحب الكلمات (المعروفة أيضًا باسم Tag Clouds أو Wordle). يستخدم Quadtrees لأداء فائق السرعة. تتم صيانته بواسطة فريق KnowledgePicker.
قم بتثبيت حزمة NuGet KnowledgePicker.WordCloud
.
ملاحظة: يوجد حاليًا محرك رسم واحد فقط يعتمد على SkiaSharp. في بعض الأنظمة الأساسية، يلزم تثبيت تبعيات إضافية حتى يعمل SkiaSharp بشكل صحيح. على سبيل المثال، في Linux، قم بإضافة SkiaSharp.NativeAssets.Linux؛ بالنسبة إلى Blazor WebAssembly، قم بإضافة SkiaSharp.Views.Blazor.
احصل على مجموعة من WordCloudEntry
s. على سبيل المثال، لنفترض أن لدينا قاموسًا لترددات الكلمات:
ترددات فار = قاموس جديد<string, int>();// ... اجمع ترددات الكلمات بطريقة ما...IEnumerable<WordCloudEntry> wordEntries = frequeency.Select(p => new WordCloudEntry(p.Key, p.Value)) ;
إنشاء التكوين السحابي العالمي:
var wordCloud = new WordCloudInput(wordEntries){Width = 1024,Height = 256,MinFontSize = 8,MaxFontSize = 32};
نحن بحاجة إلى إنشاء محرك الرسم وحجم الخط والتخطيط. حاليًا، نستخدم SkiaSharp لقياس الخطوط (والرسم) بسرعة عبر الأنظمة الأساسية. نحن ندعم أيضًا أحجام الخطوط اللوغاريتمية والتخطيط الحلزوني فقط. يتم تنفيذ كل هذه الأشياء بطريقة عامة ويمكن توسيعها بسهولة (نرحب بالمساهمات).
var sizer = new LogSizer(wordCloud);باستخدام محرك var = new SkGraphicEngine(sizer, wordCloud);var Layout = new SpiralLayout(wordCloud);var colorizer = new RandomColorizer(); // Optionalvar wcg = new WordCloudGenerator<SKBitmap>(wordCloud, Engine, Layout, colorizer);
يمكنك أيضًا استخدام SpecificColorizer
لتلوين كلمات معينة بالألوان المختارة:
var colorizer = new SpecifiqueColorizer(new Dictionary<string, Color>{["KnowledgePicker"] = Color.FromArgb(0x0f3057),["WordCloud"] = Color.FromArgb(0xe25a5a)},fallback: new RandomColorizer()); // الوسيطة الاحتياطية اختيارية
يمكنك أيضًا تمرير خط بشكل اختياري إلى محرك الرسوم:
var typeface = SKTypeface.FromFamilyName("DejaVu Serif", SKFontStyle.Normal);using var Engine = new SkGraphicEngine(sizer, wordCloud, typeface);
الآن يمكننا ترتيب سحابة الموضوع:
IEnumerable<(LayoutItem Item, double FontSize)> items = wcg.Arrange();
وإذا كنا في عرض Razor لتطبيق ASP.NET Core، على سبيل المثال، فيمكننا إنشاء SVG من items
:
<svg viewBox="0,0,@wordCloud.Width,@wordCloud.Height">@foreach (var (item,fontSize) in items){const string format = "0.##"; // استخدم منزلتين عشريتين على الأكثر. var x = (item.Location.X - item.Measured.Left).ToString(format);var y = (item.Location.Y - item.Measured.Top).ToString(format);var fs = FontSize.ToString (تنسيق)؛فار اللون = wcg.GetColorHexString(item); <text Transform="translate(@x, @y)"font-size="@fs" fill="@color">@item.Entry.Word</text>}</svg>
بدلًا من ذلك، يمكننا رسم سحابة الموضوع (انظر أيضًا مثال WordFrequencies.ConsoleApp
):
باستخدام var Final = new SKBitmap(wordCloud.Width, wordCloud.Height);using var Canvas = new SKCanvas(final);// ارسم على خلفية بيضاء.canvas.Clear(SKColors.White);using var bitmap = wcg.Draw( );canvas.DrawBitmap(bitmap, 0, 0);// احفظ إلى PNG.using var data = Final.Encode(SKEncodedImageFormat.Png, 100);using varwriter = File.Create("output.png");data.SaveTo(writer);
تم نقل خوارزمية السحابة العالمية في البداية من SourceCodeCloud. ويستخدم Quadtrees، وبالتالي ينبغي أن يكون سريعا إلى حد معقول. إنه مستوحى من تنفيذ Wordle (خوارزمية مشهورة كانت تستخدم على موقع wordle.net الذي لم يعد موجودًا الآن).
تطبيق وحدة التحكم البسيط الذي يرسم سحابة الكلمات PNG للكلمات الواردة في الإدخال القياسي الخاص به هو WordFrequencies.ConsoleApp
.
تُستخدم هذه المكتبة أيضًا في الإنتاج بواسطة KnowledgePicker. يستخدمونه لرسم سحب الموضوع لملفات تعريف المستخدمين.
كما ذكر أعلاه، يتم الآن تنفيذ مجموعة فرعية فقط من الوظائف، ولكن جميع المساهمات مرحب بها. لا تتردد في فتح القضايا وسحب الطلبات.
الاختبارات مدعومة حاليًا على نظام التشغيل Linux فقط، لأنها عبارة عن اختبارات لقطة (إنشاء صورة سحابة كلمات ومقارنتها بايت بايت مع لقطة) وهناك حاجة إلى مزيد من العمل للتأكد من أنها مشتركة بين الأنظمة الأساسية (على سبيل المثال، استخدام نفس الشيء تمامًا الخط). على نظام التشغيل Windows، يمكن إجراء الاختبارات في WSL (يدعم Visual Studio هذا مباشرة). يتم أيضًا تشغيل الاختبارات تلقائيًا في إجراءات GitHub.
بعد دفع العلامة، يتم تشغيل release.yml
سير عمل GitHub.yml الذي يقوم بإنشاء حزمة NuGet ونشرها.