Hogyan dolgozzunk a klaszterezéssel a Python
Aspose.PDF FOSS for Python egy kis, általános célú hierarchikus agglomeratív klaszterező segédprogramot csomagol — amely független bármely egyedi PDF művelettől — a kapcsolódó DataPoint objektumok Cluster példányokba csoportosításához és egy klaszter középpontjának kiszámításához. Ön dönti el, hogy egy adatpont mit jelent, és saját maga adja meg a koordinátáit; a segédprogram nem tölti ki őket automatikusan. A könyvtár a lenti parancs segítségével telepíthető.
Lépésről lépésre útmutató
1. lépés: A csomag telepítése
Telepítsd a Aspose.PDF FOSS csomagot:
git clone https://github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python.git
cd Aspose-PDF-FOSS-for-Python
pip install -e .Ellenőrizd a telepítést a Cluster importálásával és egy megerősítő üzenet kiírásával:
from aspose_pdf import Cluster
print("aspose-pdf-foss-for-python is ready.")2. lépés: A szükséges osztályok importálása
Importálja a három osztályt, amelyek a klaszterező segédeszközt alkotják:
from aspose_pdf import Cluster, ClusterCollection, DataPoint3. lépés: Adatpontok létrehozása
A DataPoint egy name karakterláncot párosít egy value lebegőpontos listával — a koordinátákat vagy jellemzővektort, amelyet az Ön saját csoportosítási logikájához jelentősnek tart:
from aspose_pdf import DataPoint
point_a = DataPoint("item-1", [12.0, 45.0])
point_b = DataPoint("item-2", [13.5, 44.0])
point_c = DataPoint("item-3", [98.0, 5.0])
print(point_a.name, point_a.value)DataPoint nem köti össze a value-t semmilyen konkrét PDF koncepcióval — az oldalkordináták, betűméretek vagy bármely más numerikus jellemzővektor egyaránt jól működik.
4. lépés: Adatpontok csoportosítása egy klaszterbe
Adja át a teljes tagsági listát a Cluster konstruktorának. Nincs módszer elemek hozzáadására egy Cluster-hez, miután az létrejött, ezért először döntse el a tagságot:
from aspose_pdf import Cluster
nearby = Cluster([point_a, point_b])
print(nearby.count) # 2
print(nearby.contains(point_a)) # Truecontains() egyenlőséggel egyezik — a DataPoint határozza meg az egyenlőséget a name és a value együtt, így egy másik DataPoint példány, amelynek ugyanaz a neve és értéke, szintén tartalmazottként jelentkezik.
5. lépés: A klaszter középpontjának kiszámítása
DataPoint.get_centroid(cluster) egy statikus metódus, amely a klaszterben lévő minden DataPoint.value minden dimenzióját átlagolja, és az eredményt egy új, "centroid" nevű DataPointként adja vissza:
from aspose_pdf import DataPoint
centroid = DataPoint.get_centroid(nearby)
print(centroid.name) # "centroid"
print(centroid.value) # per-dimension average across the clusterMinden DataPoint.value lista a klaszterben ugyanazzal a hosszal kell, hogy rendelkezzen — a get_centroid pozícióról pozícióra átlagol, és nem ellenőrzi, hogy a hosszok egyeznek-e. Ha Cluster.empty()-on vagy bármely olyan klaszteren hívják, amely count == 0 tartalmaz, ValueError keletkezik.
6. lépés: Klaszter klónozása vagy a megosztott üres példány újrahasználata
clone() egy független Cluster-t ad vissza, amely ugyanazokat az elemeket tartalmazza; Cluster.empty() mindig ugyanazt a gyorsítótárazott üres klaszter példányt adja vissza, ahelyett, hogy újat hozna létre:
from aspose_pdf import Cluster
backup = nearby.clone()
print(backup is nearby) # False -- independent copy
print(backup.contains(point_a)) # True -- same items
placeholder = Cluster.empty()
print(placeholder.count) # 07. lépés: Több klaszter csoportosítása egy ClusterCollection ba
ClusterCollection több Cluster objektumot csomagol egyetlen len()-tudatos tároló mögé:
from aspose_pdf import Cluster, ClusterCollection
outliers = Cluster([point_c])
collection = ClusterCollection([nearby, outliers])
print(len(collection)) # 2ClusterCollection nem biztosít módszert a klaszterek visszakeresésére — tarts egy hivatkozást a konstruktorba átadott listára, ha később iterálni szeretnéd a klasztereket.
Általános problémák és megoldások
Nincs módszer egy elem hozzáadására egy meglévő Cluster
Cluster csak a taglistát fogadja el a létrehozáskor (Cluster(items)). Először építsd fel a teljes DataPoint objektumok listáját, majd hozd létre a Cluster-t — nincs add() vagy append() hívás után.
DataPoint.get_centroid() raises ValueError
Ez akkor fordul elő, amikor a megadott klaszter üres (count == 0), beleértve a Cluster.empty() is. Ellenőrizd a cluster.count-t a get_centroid meghívása előtt, vagy kezeld a kivételt, ha egy üres klaszter érvényes bemenet a munkafolyamatodban.
A centroid értékek hibásnak tűnnek
get_centroid minden DataPoint.value pozíciót pozícióra összead és elosztja a pontok számával — nem ellenőrzi, hogy a klaszter minden value listája ugyanazzal a hosszal rendelkezzen. A DataPoint objektumok dimenzióinak keverése hibás átlagot eredményez csendben, ahelyett, hogy hibát dobna.
Expecting Cluster.empty() új, üres klasztert létrehozni minden alkalommal
Cluster.empty() egy singleton hozzáférő — minden hívás ugyanazt a gyorsítótárazott példányt adja vissza. Használd helyette a Cluster() (argumentumok nélkül), ha különálló, független üres klaszterre van szükség.
Azt várva, hogy a könyvtár automatikusan csoportosítsa a pontokat
DataPoint, Cluster és ClusterCollection adatstruktúrák a pontok, klaszterek és egy centroid kiszámításának ábrázolására — a modul nem tartalmaz kapcsolódási vagy távolságfüggvényt, amely meghatározza, mely pontok tartoznak együtt. A saját kódod határozza meg a klaszterhez tartozást, mielőtt Cluster-t felépítenéd.
Gyakran Ismételt Kérdések
A modul automatikusan csoportosítja a adatpontokat távolság alapján?
Nem. Cluster, DataPoint és ClusterCollection építőelemek a már eldöntött csoportosítások és egy centroid kiszámításának ábrázolására — nincs beépített agglomerációs vagy távolság-alapú hozzárendelési lépés.
Mi a különbség a Cluster() és a Cluster.empty() között?
Cluster(items=None) minden híváskor új példányt hoz létre. Cluster.empty() egy classmethod, amely minden híváskor ugyanazt a gyorsítótárazott, megosztott üres klaszter példányt adja vissza.
Hozzáadhatok elemeket egy Cluster objektumhoz a létrehozása után?
Nem. Cluster csak a contains(), clone() és a count tulajdonságot teszi elérhetővé a konstrukció után – a tagság rögzített, amint a konstruktor lefut.
Működik a get_centroid() bármennyi dimenzióval?
Igen, amíg minden DataPoint.value lista a klaszterben ugyanazzal a hosszal rendelkezik. get_centroid minden dimenziót önállóan átlagol, és az eredményt új DataPointként adja vissza.
Mit ad hozzá a ClusterCollection egy egyszerű Python klaszterlistához?
Elsősorban egy típusos tároló len() támogatással. Nem ad hozzá iterációt, keresést vagy összefésülési viselkedést azon kívül, amit már a listában megtalálsz, amelyből létrehoztad.