دستهبندی نقاط داده
خوشهبندی نقاط داده
DataPoint، Cluster و ClusterCollection یک جعبهابزار کوچک و عمومی برای خوشهبندی سلسلهمراتبی-چسباندنی هستند که همراه با Aspose.PDF FOSS برای Python ارائه میشوند. اینها Primitiveهای عمومی گروهبندی دادهاند — یک نقطهٔ مختصات-و-برچسب، یک گروه از آیتمها، و مجموعهای از گروهها — نه یک ویژگی خاص سند PDF؛ هیچکدام از این ماژول محتویات PDF را میخوانند یا مینویسند. از آنها زمانی استفاده کنید که کد شما نیاز دارد مقادیر عددی (مثلاً اندازهگیریهایی که قبلاً از یک سند استخراج کردهاید) را به خوشهها تقسیم کند و یک خوشه را با مرکز جرم آن خلاصه کند.
نمایش یک نقطه داده
DataPoint یک name شناساییکننده را با یک فهرست value از مختصات عددی جفت میکند. هر دو پس از ساخت به عنوان DataPoint.name و DataPoint.value در دسترس قرار میگیرند.
ساخت و کپی کردن خوشهها
Cluster یک فهرست اختیاری از آیتمها را در یک گروه واحد میپیچد. Cluster.count گزارش میدهد که خوشه هماکنون چند آیتم دارد، Cluster.contains() بررسی میکند آیا آیتم دادهشده عضو است یا خیر، و Cluster.clone() یک کپی مستقل که توسط فهرست آیتمهای خود پشتیبانی میشود برمیگرداند. Cluster.empty() به جای ایجاد یک نمونه جدید در هر فراخوانی، یک نمونهٔ خوشهٔ خالی مشترک و تکنفره برمیگرداند.
گروهبندی خوشهها در یک مجموعه
ClusterCollection یک لیست اختیاری از نمونههای Cluster را در یک مجموعه واحد میپیچد و یک شیء میدهد که میتوانید هنگام نیاز تابع به پذیرش یا بازگرداندن بیش از یک خوشه بهصورت همزمان، آن را پاس کنید.
محاسبهی مرکز خوشه
DataPoint.get_centroid() مختصات هر نقطه داده در یک Cluster را موقعیت به موقعیت میانگین میگیرد و یک DataPoint جدید که نمایانگر مرکز خوشه است، برمیگرداند. هر نقطه در خوشه باید همان تعداد بعد را در DataPoint.value داشته باشد تا میانگین معنای داشته باشد.
نکات و بهترین شیوهها
- هر لیست
DataPoint.valueرا درون یک خوشه با طول یکسان نگه دارید —DataPoint.get_centroid()مختصات را موقعیت به موقعیت میانگین میگیرد، بنابراین ابعاد نامتناسب یک مرکز خوشه گمراهکننده تولید میکنند. - از
Cluster.empty()برای یک خوشهٔ خالی بهاشتراکگذاریشده و تکنمونه استفاده کنید بهجای ساختن یک خوشهٔ خالی جدید وقتی فقط به یک مقدار جایگزین نیاز دارید. - قبل از تغییر یک خوشه که هنوز نسخهٔ اصلی آن را در جای دیگری نیاز دارید،
Cluster.clone()را فراخوانی کنید — کلون کردن فهرست آیتمها را کپی میکند نه اینکه به آن ارجاع دهد. - وقتی یک تابع لازم دارد بیش از یک
Clusterرا بهعنوان یک مقدار واحد بپذیرد یا برگرداند، ازClusterCollectionاستفاده کنید. - این کلاسها ابزارهای عمومی هستند، نه ویژگیای برای تجزیه PDF — آنها را با منطق خود برای تولید مقادیر
DataPointاز دادههای سند ترکیب کنید.
مسائل رایج
| مشکل | علت | راهحل |
|---|---|---|
DataPoint.get_centroid() یک centroid با تعداد مقادیر غیرمنتظره تولید میکند | نقاط داده در خوشه DataPoint.value لیستهای با طولهای متفاوت دارند | اطمینان حاصل کنید که هر DataPoint اضافهشده به یک Cluster همان بعدیت را داشته باشد |
Cluster.contains() برای مقداری که انتظار دارید موجود باشد، False باز میگرداند | عضویت مستقیماً در برابر اشیای ذخیرهشده مورد بررسی قرار میگیرد، بنابراین دو نمونه DataPoint که به صورت جداگانه ساخته شدهاند و دارای نام و مقدار یکسان هستند، بهصورت خودکار توسط جستجوهای مبتنی بر هویت بهعنوان برابر در نظر گرفته نمیشوند | از همان نمونهٔ DataPoint استفاده مجدد کنید، یا قبل از فرض عضویت، با DataPoint.name و DataPoint.value مقایسه کنید |
| تغییر یک کلاستر کلونشده همچنین نسخهٔ اصلی را تغییر میدهد | Cluster.clone() نادیده گرفته شد و به جای کپی شدن، همان مرجع Cluster به اشتراک گذاشته شد | هرگاه فراخوانیکننده به یک نسخهٔ مستقل نیاز داشته باشد، ابتدا Cluster.clone() را صدا بزنید |
FAQ
تفاوت بین Cluster و ClusterCollection چیست؟
Cluster یک فهرست از آیتمها را نگه میدارد — معمولاً نمونههای DataPoint — که به یک گروه تعلق دارند. ClusterCollection فهرستی از اشیای Cluster را نگه میدارد: این اشیاء خوشهها را همراه هم میسازد، نه نقاط دادهی منفرد.
آیا DataPoint.get_centroid() خوشهای که به آن داده میشود را تغییر میدهد؟
خیر. این موارد موجود در Cluster ارائه شده را میخواند و یک DataPoint جدید برای مرکز خوشه برمیگرداند؛ خوشه منبع و آیتمهای آن دست نخورده میمانند.
آیا این عملکرد خوشهبندی مختص محتوای PDF است؟
شماره DataPoint، Cluster و ClusterCollection پرمیتیهای عمومی خوشهبندی عددی هستند که داخل بسته aspose_pdf گنجانده شدهاند. آنها خودشان صفحات، متن یا هر ساختار دیگری از PDF را نمیخوانند — صرفاً بر روی مقادیری که با آنها میسازید عمل میکنند.
چرا Cluster.empty() هر بار همان نمونه را برمیگرداند؟
Cluster.empty() یک تکنمونهٔ مشترک را برمیگرداند تا تماسهای مکرر برای “بدون خوشه” در هر فراخوانی شیء جدیدی تخصیص ندهند.
API Reference خلاصه
| کلاس/متد | توضیح |
|---|---|
DataPoint | یک نقطهٔ نامدار که شامل فهرستی از مختصات عددی است |
DataPoint.name | نام شناسایی نقطه |
DataPoint.value | لیست مختصات عددی نقطه |
DataPoint.get_centroid() | یک DataPoint جدید را باز میگرداند که مختصات هر نقطه در یک خوشه را بهصورت میانگین میگیرد |
Cluster | گروهی از موارد، که معمولاً نمونههای DataPoint هستند |
Cluster.empty() | نمونه تکتن خوشهی خالی مشترک را باز میگرداند |
Cluster.contains() | بررسی میکند که آیا یک مورد در خوشه موجود است یا خیر |
Cluster.clone() | یک نسخه مستقل از خوشه را برمیگرداند |
Cluster.count | تعداد آیتمهای موجود در خوشه |
ClusterCollection | یک لیست از نمونههای Cluster را در یک مجموعه میپیچد |