Gegevenspunten clusteren
Clusteren van gegevenspunten
DataPoint, Cluster en ClusterCollection vormen een kleine, algemene hiërarchisch-agglomeratieve clustering-toolkit die wordt meegeleverd met Aspose.PDF FOSS voor Python. Het betreft generieke primitive voor het groeperen van data — een coördinaat-en-labelpunt, een groep items en een verzameling groepen — en geen PDF-specifieke documentfunctie; deze module leest of schrijft geen PDF-inhoud. Gebruik ze wanneer je eigen code numerieke waarden moet groeperen (bijvoorbeeld metingen die je al uit een document hebt gehaald) in clusters en een cluster wilt samenvatten met zijn centroid.
Een gegevenspunt weergeven
DataPoint koppelt een identificerende name aan een value lijst van numerieke coördinaten. Beide worden na constructie beschikbaar gesteld als DataPoint.name en DataPoint.value.
Clustergroepen bouwen en kopiëren
Cluster verpakt een optionele lijst van items in één groep. Cluster.count geeft aan hoeveel items de cluster momenteel bevat, Cluster.contains() controleert of een bepaald item lid is, en Cluster.clone() levert een onafhankelijke kopie die zijn eigen itemlijst gebruikt. Cluster.empty() levert een gedeelde, singleton-empty-cluster-instantie in plaats van bij elke aanroep een nieuw exemplaar te maken.
Clustergroepen groeperen in een collectie
ClusterCollection verpakt een optionele lijst van Cluster-instanties in één collectie, waardoor je één object krijgt om rond te geven wanneer een functie meer dan één cluster tegelijk moet accepteren of retourneren.
Berekenen van een Clustercentroid
DataPoint.get_centroid() gemiddeld de coördinaten van elk datapunt in een Cluster, positie per positie, en retourneert een nieuw DataPoint dat de centroid vertegenwoordigt. Elk punt in de cluster moet in DataPoint.value hetzelfde aantal dimensies hebben zodat het gemiddelde betekenisvol is.
Tips en best practices
- Zorg dat elke
DataPoint.value-lijst dezelfde lengte heeft binnen een cluster —DataPoint.get_centroid()gemiddeld coördinaten positie per positie, waardoor niet-overeenkomende dimensies een misleidende centroid opleveren. - Gebruik
Cluster.empty()voor een gedeelde, enkele lege cluster in plaats van een nieuw lege cluster te construeren wanneer je alleen een tijdelijke waarde nodig hebt. - Roep
Cluster.clone()aan voordat je een cluster wijzigt waarvan je de originele elders nog nodig hebt — klonen kopieert de itemslijst in plaats van een alias te maken. - Gebruik
ClusterCollectionwanneer een functie meer dan éénClustermoet accepteren of retourneren als één enkele waarde. - Deze klassen zijn generieke hulpprogramma’s, geen PDF-parsefunctie — combineer ze met je eigen logica om de
DataPoint-waarden uit documentgegevens te genereren.
Veelvoorkomende problemen
| Probleem | Oorzaak | Oplossing |
|---|---|---|
DataPoint.get_centroid() produceert een centroid met een onverwacht aantal waarden | Datapunten in de cluster hebben DataPoint.value lijsten met verschillende lengtes | Zorg ervoor dat elke DataPoint die aan een Cluster wordt toegevoegd dezelfde dimensionaliteit heeft |
Cluster.contains() geeft False terug voor een waarde waarvan je verwacht dat deze aanwezig is | Lidmaatschap wordt direct gecontroleerd tegen de opgeslagen itemobjecten, zodat twee afzonderlijk geconstrueerde DataPoint-instanties met dezelfde naam en waarde niet automatisch als gelijk worden beschouwd bij identiteitsgebaseerde zoekopdrachten | Herbruik dezelfde DataPoint instantie, of vergelijk op DataPoint.name en DataPoint.value voordat je lidmaatschap aanneemt |
| Het muteren van een gekloonde cluster wijzigt ook het origineel | Cluster.clone() werd overgeslagen en dezelfde Cluster-referentie werd gedeeld in plaats van gekopieerd | Roep Cluster.clone() eerst aan wanneer een aanroeper een onafhankelijke kopie nodig heeft |
FAQ
Wat is het verschil tussen Cluster en ClusterCollection?
Cluster bevat een lijst met items — meestal DataPoint-instanties — die tot één groep behoren. ClusterCollection bevat een lijst met Cluster-objecten: het groepeert clusters, niet individuele datapunten.
Wijzigt DataPoint.get_centroid() de cluster die het krijgt?
Nee. Het leest de items die al in de opgegeven Cluster staan en retourneert een nieuwe DataPoint voor het centroid; de broncluster en zijn items blijven ongewijzigd.
Is deze clusteringfunctionaliteit specifiek voor PDF-inhoud?
Nr. DataPoint, Cluster en ClusterCollection zijn generieke numerieke-clustering-primitieven die worden meegeleverd in het aspose_pdf-pakket. Ze lezen zelf geen pagina’s, tekst of andere PDF-structuren — ze werken uitsluitend met de waarden waarmee je ze aanmaakt.
Waarom geeft Cluster.empty() elke keer dezelfde instantie terug?
Cluster.empty() geeft een gedeelde singleton terug zodat herhaalde oproepen voor “no cluster” niet bij elke oproep een nieuw object toewijzen.
API Reference Samenvatting
| Klasse/Methode | Beschrijving |
|---|---|
DataPoint | Een benoemd punt dat een lijst met numerieke coördinaten bevat |
DataPoint.name | De identificerende naam van het punt |
DataPoint.value | De lijst met numerieke coördinaten van het punt |
DataPoint.get_centroid() | Retourneert een nieuwe DataPoint die de coördinaten van elk punt in een cluster gemiddeld |
Cluster | Een groep items, meestal DataPoint-instanties |
Cluster.empty() | Retourneert de gedeelde lege-cluster singleton |
Cluster.contains() | Controleert of een item zich in de cluster bevindt |
Cluster.clone() | Retourneert een onafhankelijke kopie van de cluster |
Cluster.count | Het aantal items dat zich momenteel in de cluster bevindt |
ClusterCollection | Verpakt een lijst van Cluster-instanties in één collectie |