Πώς να εργαστείτε με την ομαδοποίηση στο Python
Aspose.PDF FOSS για Python περιλαμβάνει ένα μικρό, γενικού σκοπού, ιεραρχικό συγκεντρωτικό εργαλείο ομαδοποίησης — ανεξάρτητο από οποιαδήποτε μεμονωμένη λειτουργία PDF — για την ομαδοποίηση σχετικών DataPoint αντικειμένων σε Cluster περιπτώσεις και τον υπολογισμό του κεντροειδούς ενός συγκρότηματος. Εσείς αποφασίζετε τι αντιπροσωπεύει κάθε σημείο δεδομένων και παρέχετε τις συντεταγμένες του εσείς· το εργαλείο δεν τις συμπληρώνει αυτόματα. Η βιβλιοθήκη εγκαθίσταται με την παρακάτω εντολή.
Οδηγός βήμα προς βήμα
Βήμα 1: Εγκατάσταση του πακέτου
Εγκαταστήστε το πακέτο Aspose.PDF FOSS:
git clone https://github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python.git
cd Aspose-PDF-FOSS-for-Python
pip install -e .Επαληθεύστε την εγκατάσταση εισάγοντας το Cluster και εκτυπώνοντας ένα μήνυμα επιβεβαίωσης:
from aspose_pdf import Cluster
print("aspose-pdf-foss-for-python is ready.")Βήμα 2: Εισαγωγή Απαιτούμενων Κλάσεων
Εισάγετε τις τρεις κλάσεις που συνθέτουν το εργαλείο ομαδοποίησης:
from aspose_pdf import Cluster, ClusterCollection, DataPointΒήμα 3: Δημιουργία Σημείων Δεδομένων
Ένα DataPoint ζεύγει μια συμβολοσειρά name με μια λίστα value float — τις συντεταγμένες ή το διάνυσμα χαρακτηριστικών που εσείς θεωρείτε σημαντικές για τη δική σας λογική ομαδοποίησης:
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 δεν συνδέει το value με κάποια συγκεκριμένη έννοια PDF — οι συντεταγμένες σελίδας, οι μετρικές γραμματοσειράς ή οποιοδήποτε άλλο αριθμητικό διάνυσμα χαρακτηριστικών λειτουργούν εξίσου καλά.
Βήμα 4: Ομαδοποίηση Σημείων Δεδομένων σε Σύμπλεγμα
Περάστε τη πλήρη λίστα μελών στον κατασκευαστή Cluster. Δεν υπάρχει μέθοδος για προσθήκη αντικειμένων σε ένα Cluster μετά τη δημιουργία του, επομένως αποφασίστε τη συμμετοχή πρώτα:
from aspose_pdf import Cluster
nearby = Cluster([point_a, point_b])
print(nearby.count) # 2
print(nearby.contains(point_a)) # Truecontains() ταιριάζει με βάση την ισότητα — το DataPoint ορίζει την ισότητα πάνω στα name και value μαζί, έτσι ένα διαφορετικό στιγμιότυπο DataPoint με το ίδιο όνομα και τιμή επίσης αναφέρεται ως περιλαμβανόμενο.
Βήμα 5: Υπολογίστε το Κέντρο του Συμπλέγματος
DataPoint.get_centroid(cluster) είναι μια στατική μέθοδος που υπολογίζει το μέσο όρο κάθε διάστασης κάθε DataPoint.value στο σύμπλεγμα και επιστρέφει το αποτέλεσμα ως νέο DataPoint με όνομα "centroid":
from aspose_pdf import DataPoint
centroid = DataPoint.get_centroid(nearby)
print(centroid.name) # "centroid"
print(centroid.value) # per-dimension average across the clusterΚάθε λίστα DataPoint.value στο σύμπλεγμα πρέπει να έχει το ίδιο μήκος — το get_centroid υπολογίζει το μέσο όρο θέση προς θέση και δεν ελέγχει αν τα μήκη ταιριάζουν. Η κλήση του σε Cluster.empty(), ή σε οποιοδήποτε σύμπλεγμα με count == 0, προκαλεί ValueError.
Βήμα 6: Κλωνοποιήστε ένα Σύμπλεγμα ή Επαναχρησιμοποιήστε το Κοινό Κενό Αντίγραφο
clone() επιστρέφει ένα ανεξάρτητο Cluster που περιέχει τα ίδια στοιχεία· Cluster.empty() πάντα επιστρέφει το ίδιο αποθηκευμένο empty-cluster αντί να δημιουργεί ένα νέο:
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) # 0Βήμα 7: Ομαδοποιήστε Πολλά Συμπλέγματα σε ένα ClusterCollection
ClusterCollection συγκεντρώνει αρκετά αντικείμενα Cluster πίσω από ένα μοναδικό len()-aware κοντέινερ:
from aspose_pdf import Cluster, ClusterCollection
outliers = Cluster([point_c])
collection = ClusterCollection([nearby, outliers])
print(len(collection)) # 2ClusterCollection δεν εκθέτει μέθοδο για την ανάκτηση των συμπλεγμάτων του — κρατήστε μια αναφορά στη λίστα που περνάτε στον κατασκευαστή αν χρειαστεί να επαναλάβετε τα συμπλέγματα μετά.
Κοινά ζητήματα και διορθώσεις
Δεν υπάρχει μέθοδος για την προσθήκη ενός στοιχείου σε ένα υπάρχον Cluster
Cluster δέχεται τη λίστα μελών μόνο κατά τη δημιουργία (Cluster(items)). Δημιουργήστε πρώτα την πλήρη λίστα των αντικειμένων DataPoint, στη συνέχεια κατασκευάστε το Cluster — δεν υπάρχει add() ή append() για να κληθεί μετά.
DataPoint.get_centroid() raises ValueError
Αυτό συμβαίνει όταν το σύμπλεγμα που παρέχεται είναι κενό (count == 0), συμπεριλαμβανομένου του Cluster.empty(). Ελέγξτε το cluster.count πριν καλέσετε το get_centroid, ή χειριστείτε την εξαίρεση εάν ένα κενό σύμπλεγμα είναι έγκυρη είσοδος στη ροή εργασίας σας.
Οι τιμές του κεντρικού σημείου φαίνονται λανθασμένες
get_centroid αθροίζει κάθε θέση DataPoint.value θέση-προς-θέση και διαιρεί με τον αριθμό των σημείων — δεν ελέγχει ότι κάθε λίστα value στο σύμπλεγμα έχει το ίδιο μήκος. Η ανάμειξη αντικειμένων DataPoint με ασυμφωνία διαστάσεων παράγει έναν λανθασμένο μέσο όρο σιωπηρά αντί να εγείρει.
Expecting Cluster.empty() για τη δημιουργία ενός φρέσκου κενού συμπλέγματος κάθε φορά
Cluster.empty() είναι ένας πρόσβασης singleton — κάθε κλήση επιστρέφει το ίδιο αποθηκευμένο αντικείμενο. Χρησιμοποιήστε το Cluster() (χωρίς ορίσματα) αν χρειάζεστε ένα ξεχωριστό, ανεξάρτητο κενό σύμπλεγμα.
Αναμένοντας η βιβλιοθήκη να ομαδοποιεί τα σημεία αυτόματα
DataPoint, Cluster και ClusterCollection είναι δομές δεδομένων για την αναπαράσταση σημείων, συμπλεγμάτων και υπολογισμό κέντρου μάζας — η μονάδα δεν περιλαμβάνει συνάρτηση σύνδεσης ή απόστασης που να αποφασίζει ποια σημεία ανήκουν μαζί. Ο δικός σας κώδικας καθορίζει τη συμμετοχή στα συμπλέγματα πριν δημιουργήσετε ένα Cluster.
Συχνές Ερωτήσεις
Αυτή η μονάδα ομαδοποιεί αυτόματα τα σημεία δεδομένων βάσει απόστασης;
Όχι. Cluster, DataPoint και ClusterCollection είναι δομικά στοιχεία για την αναπαράσταση ήδη αποφασισμένων ομαδοποιήσεων και τον υπολογισμό κέντρου μάζας — δεν υπάρχει ενσωματωμένο βήμα συγκόλλησης ή ανάθεσης βάσει απόστασης.
Ποια είναι η διαφορά μεταξύ Cluster() και Cluster.empty();
Cluster(items=None) δημιουργεί ένα νέο αντικείμενο κάθε φορά που καλείται. Cluster.empty() είναι μια μέθοδος κλάσης που επιστρέφει την ίδια αποθηκευμένη, κοινόχρηστη instance του empty-cluster σε κάθε κλήση.
Μπορώ να προσθέσω στοιχεία σε ένα Cluster μετά τη δημιουργία του;
Όχι. Το Cluster εκθέτει μόνο τα contains(), clone() και την ιδιότητα count πέρα από τη δημιουργία — η συμμετοχή είναι σταθερή μόλις εκτελεστεί ο κατασκευαστής.
Λειτουργεί το get_centroid() με οποιονδήποτε αριθμό διαστάσεων;
Ναι, εφόσον κάθε DataPoint.value list στο σύμπλεγμα έχει το ίδιο μήκος. Το get_centroid υπολογίζει το μέσο όρο κάθε διάστασης ανεξάρτητα και επιστρέφει το αποτέλεσμα ως ένα νέο DataPoint.
Τι προσθέτει το ClusterCollection πέρα από μια απλή Python list of clusters;
Κυρίως ένας typed container με υποστήριξη len(). Δεν προσθέτει λειτουργίες επανάληψης, αναζήτησης ή συγχώνευσης πέρα από ό,τι έχετε ήδη στη λίστα από την οποία το κατασκευάσατε.