KnowledgePicker.WordCloud
เป็นไลบรารีที่ทันสมัย (.NET Standard 2.0) และรวดเร็วสำหรับการจัดเรียงและวาด word cloud (aka tag cloud หรือ wordle) ใช้ Quadtrees เพื่อประสิทธิภาพที่รวดเร็วเป็นพิเศษ ได้รับการดูแลโดยทีมงาน KnowledgePicker
ติดตั้งแพ็คเกจ NuGet KnowledgePicker.WordCloud
หมายเหตุ ขณะนี้มีเอ็นจิ้นการวาดเพียงตัวเดียวที่ใช้ SkiaSharp ในบางแพลตฟอร์ม จำเป็นต้องติดตั้งการขึ้นต่อกันเพิ่มเติมเพื่อให้ SkiaSharp ทำงานได้อย่างถูกต้อง ตัวอย่างเช่น บน Linux ให้เพิ่ม SkiaSharp.NativeAssets.Linux; สำหรับ Blazor WebAssembly ให้เพิ่ม SkiaSharp.Views.Blazor
รับคอลเลกชันของ WordCloudEntry
ตัวอย่างเช่น สมมติว่าเรามีพจนานุกรมความถี่ของคำ:
var frequencies = new Dictionary<string, int>();// ...รวบรวมความถี่ของคำอย่างใด...IEnumerable<WordCloudEntry> wordEntries = frequencies.Select(p => new WordCloudEntry(p.Key, p.Value)) ;
สร้างการกำหนดค่าคลาวด์โลก:
var wordCloud = WordCloudInput ใหม่ (wordEntries) {ความกว้าง = 1,024, ความสูง = 256, MinFontSize = 8, MaxFontSize = 32};
เราจำเป็นต้องสร้างเครื่องมือวาดภาพ ขนาดตัวอักษร และเค้าโครง ปัจจุบัน เราใช้ SkiaSharp เพื่อการวัดแบบอักษรข้ามแพลตฟอร์มที่รวดเร็ว (และการวาด) นอกจากนี้เรายังสนับสนุนเฉพาะขนาดแบบอักษรลอการิทึมและรูปแบบเกลียวเท่านั้น สิ่งเหล่านี้ทั้งหมดถูกนำไปใช้ในลักษณะทั่วไปและสามารถขยายออกไปได้อย่างง่ายดาย (ยินดีรับการสนับสนุน)
var sizer = LogSizer ใหม่ (wordCloud); การใช้ var engine = SkGraphicEngine ใหม่ (sizer, wordCloud); varlayout = SpiralLayout ใหม่ (wordCloud); var colorizer = new RandomColorizer(); // optionvar wcg = new WordCloudGenerator<SKBitmap>(wordCloud, engine,layout, colorizer);
คุณยังสามารถใช้ SpecificColorizer
เพื่อทำให้คำเฉพาะมีสีสันด้วยสีที่เลือก:
var colorizer = new specificColorizer(new Dictionary<string, Color>{["KnowledgePicker"] = Color.FromArgb(0x0f3057),["WordCloud"] = Color.FromArgb(0xe25a5a)},ทางเลือก: new RandomColorizer()); // อาร์กิวเมนต์ทางเลือกเป็นทางเลือก
คุณยังสามารถส่งแบบอักษรไปยังเอ็นจิ้นกราฟิกได้อีกด้วย:
var typeface = SKTypeface.FromFamilyName("DejaVu Serif", SKFontStyle.Normal);using var engine = new SkGraphicEngine(sizer, wordCloud, แบบอักษร);
ตอนนี้เราสามารถ จัด หัวข้อคลาวด์ได้:
IEnumerable<(LayoutItem Item, double FontSize)> items = wcg.Arrange();
และถ้าเราอยู่ในมุมมอง Razor ของแอปพลิเคชัน ASP.NET Core เราสามารถสร้าง SVG จาก items
:
<svg viewBox="0,0,@wordCloud.Width,@wordCloud.Height">@foreach (var (รายการ, ขนาดตัวอักษร) ในรายการ){const string format = "0.##"; // ใช้ทศนิยมไม่เกิน 2 ตำแหน่ง var x = (item.Location.X - item.Measured.Left).ToString(รูปแบบ);var y = (item.Location.Y - item.Measured.Top).ToString(รูปแบบ);var fs = fontSize.ToString (รูปแบบ);var color = wcg.GetColorHexString(รายการ); <text Transformer="translate(@x, @y)" font-size="@fs" fill="@color">@item.Entry.Word</text>}</svg>
อีกทางหนึ่ง เราสามารถ วาด หัวข้อคลาวด์ (ดูตัวอย่าง WordFrequencies.ConsoleApp
):
การใช้ var สุดท้าย = new SKBitmap(wordCloud.Width, wordCloud.Height);การใช้ var canvas = new SKCanvas(final);// วาดบนพื้นหลังสีขาว.canvas.Clear(SKColors.White);การใช้ var bitmap = wcg.Draw( );canvas.DrawBitmap(bitmap, 0, 0);// บันทึกเป็น PNG.using var data = Final.Encode(SKEncodedImageFormat.Png, 100);การใช้ var write = File.Create("output.png");data.SaveTo(writer);
อัลกอริธึมคลาวด์โลกได้รับการย้ายจาก SourceCodeCloud ในตอนแรก มันใช้ Quadtrees ดังนั้นจึงควรจะเร็วพอสมควร ได้รับแรงบันดาลใจจากการนำ Wordle ไปใช้ (ซึ่งครั้งหนึ่งเคยใช้อัลกอริทึมที่มีชื่อเสียงใน wordle.net ของไซต์ที่เลิกใช้งานแล้ว)
แอปพลิเคชันคอนโซลอย่างง่ายซึ่งดึง word cloud PNG สำหรับคำที่ให้ไว้ในอินพุตมาตรฐานคือ WordFrequencies.ConsoleApp
ไลบรารีนี้ยังใช้ในการผลิตโดย KnowledgePicker พวกเขาใช้มันเพื่อวาดกลุ่มหัวข้อสำหรับโปรไฟล์ผู้ใช้
ตามที่กล่าวไว้ข้างต้น ขณะนี้มีเพียงฟังก์ชันย่อยบางส่วนเท่านั้นที่ถูกนำมาใช้ แต่ยินดีรับการสนับสนุนทั้งหมด รู้สึกอิสระที่จะเปิดประเด็นและดึงคำขอ
ขณะนี้การทดสอบได้รับการสนับสนุนบน Linux เท่านั้น เนื่องจากเป็นการทดสอบสแน็ปช็อต (สร้างอิมเมจเวิร์ดคลาวด์และเปรียบเทียบแบบไบต์ต่อไบต์กับสแน็ปช็อต) และจำเป็นต้องมีการทำงานเพิ่มเติมเพื่อให้แน่ใจว่านี่เป็นข้ามแพลตฟอร์ม (เช่น ใช้แบบเดียวกันทุกประการ) แบบอักษร) บน Windows การทดสอบสามารถทำได้ใน WSL (Visual Studio รองรับสิ่งนี้โดยตรง) การทดสอบจะดำเนินการโดยอัตโนมัติใน GitHub Actions
หลังจากพุชแท็กแล้ว ระบบจะทริกเกอร์เวิร์กโฟลว์ GitHub release.yml
ซึ่งจะสร้างและเผยแพร่แพ็คเกจ NuGet