Phân cụm các điểm dữ liệu
Phân cụm Các Điểm Dữ liệu
DataPoint, Cluster, và ClusterCollection là một bộ công cụ nhỏ, đa mục đích cho việc phân cụm hợp nhất phân cấp (hierarchical-agglomerative-clustering) được đóng gói cùng với Aspose.PDF FOSS cho Python. Chúng là các nguyên thủy nhóm dữ liệu chung — một điểm có tọa độ và nhãn, một nhóm các mục, và một tập hợp các nhóm — chứ không phải tính năng tài liệu đặc thù cho PDF; không có gì trong mô-đun này đọc hoặc ghi nội dung PDF. Hãy sử dụng chúng khi mã của bạn cần nhóm các giá trị số (ví dụ, các đo lường mà bạn đã trích xuất từ một tài liệu) thành các cụm và tóm tắt một cụm bằng centroid của nó.
Biểu diễn Một Điểm Dữ liệu
DataPoint ghép một name nhận dạng với một danh sách value các tọa độ số. Cả hai đều được phơi bày dưới dạng DataPoint.name và DataPoint.value sau khi khởi tạo.
Xây dựng và Sao chép Các Cụm
Cluster gói một danh sách tùy chọn các mục vào một nhóm duy nhất. Cluster.count báo cáo số lượng mục mà cụm hiện đang chứa, Cluster.contains() kiểm tra xem một mục cụ thể có phải là thành viên hay không, và Cluster.clone() trả về một bản sao độc lập được hỗ trợ bởi danh sách mục riêng của nó. Cluster.empty() trả về một thể hiện empty-cluster singleton chia sẻ thay vì cấp phát một thể hiện mới mỗi lần gọi.
Nhóm Các Cụm trong Một Bộ Sưu Tập
ClusterCollection gói một danh sách tùy chọn các thể hiện Cluster thành một bộ sưu tập duy nhất, cung cấp cho bạn một đối tượng để truyền đi khi một hàm cần nhận hoặc trả về hơn một cụm cùng một lúc.
Tính toán Trung tâm Cụm
DataPoint.get_centroid() tính trung bình các tọa độ của mọi điểm dữ liệu trong một Cluster, vị trí theo vị trí, và trả về một DataPoint mới đại diện cho trung tâm. Mỗi điểm trong cụm phải có cùng số chiều trong DataPoint.value để phép trung bình có ý nghĩa.
Mẹo và Thực hành Tốt nhất
- Giữ cho mọi danh sách
DataPoint.valuecó cùng độ dài trong một cụm —DataPoint.get_centroid()tính trung bình các tọa độ vị trí theo vị trí, vì vậy các chiều không khớp sẽ tạo ra một trung tâm gây hiểu lầm. - Sử dụng
Cluster.empty()cho một cụm rỗng chung, đơn thể thay vì tạo một cụm rỗng mới khi bạn chỉ cần một giá trị giữ chỗ. - Gọi
Cluster.clone()trước khi thay đổi một cụm mà bạn vẫn cần bản gốc ở nơi khác — việc sao chép tạo một bản sao danh sách mục thay vì tham chiếu tới nó. - Hãy dùng
ClusterCollectionkhi một hàm cần nhận hoặc trả về hơn mộtClusterdưới dạng một giá trị duy nhất. - Các lớp này là các tiện ích chung, không phải tính năng phân tích PDF — hãy kết hợp chúng với logic của bạn để tạo ra các giá trị
DataPointtừ dữ liệu tài liệu.
Các vấn đề thường gặp
| Vấn đề | Nguyên nhân | Sửa |
|---|---|---|
DataPoint.get_centroid() tạo ra một centroid có số lượng giá trị không mong đợi | Các điểm dữ liệu trong cụm có các danh sách DataPoint.value có độ dài khác nhau | Đảm bảo mọi DataPoint được thêm vào Cluster đều có cùng số chiều |
Cluster.contains() trả về False cho một giá trị mà bạn mong đợi tồn tại | Thành viên được kiểm tra trực tiếp đối chiếu với các đối tượng mục đã lưu, vì vậy hai thể hiện DataPoint được tạo riêng biệt nhưng có cùng tên và giá trị sẽ không tự động được coi là bằng nhau trong các tra cứu dựa trên danh tính | Tái sử dụng cùng một thể hiện DataPoint, hoặc so sánh bằng DataPoint.name và DataPoint.value trước khi giả định thành viên |
| Thay đổi một cụm đã sao chép cũng làm thay đổi bản gốc | Cluster.clone() đã bị bỏ qua và cùng một tham chiếu Cluster đã được chia sẻ thay vì sao chép | Gọi Cluster.clone() trước khi người gọi cần một bản sao độc lập |
FAQ
Sự khác biệt giữa Cluster và ClusterCollection là gì?
Cluster chứa một danh sách các mục — thường là các thể hiện DataPoint — thuộc một nhóm. ClusterCollection chứa một danh sách các đối tượng Cluster: nó nhóm các cụm lại với nhau, không phải các điểm dữ liệu riêng lẻ.
Liệu DataPoint.get_centroid() có thay đổi cụm được cung cấp không?
Không. Nó đọc các mục đã có trong Cluster được cung cấp và trả về một DataPoint mới cho trung tâm; cụm nguồn và các mục của nó được giữ nguyên.
Chức năng cụm này có dành riêng cho nội dung PDF không?
No. DataPoint, Cluster, và ClusterCollection là các primitive phân cụm số chung được cung cấp trong gói aspose_pdf. Chúng không tự đọc các trang, văn bản, hay bất kỳ cấu trúc PDF nào khác — chúng chỉ hoạt động trên các giá trị mà bạn tạo ra cho chúng.
Tại sao Cluster.empty() lại trả về cùng một thể hiện mỗi lần?
Cluster.empty() trả về một singleton chia sẻ để các lần gọi lặp lại cho “no cluster” không cấp phát một đối tượng mới mỗi lần gọi.
API Reference Tóm tắt
| Lớp/Phương thức | Mô tả |
|---|---|
DataPoint | Một điểm có tên chứa danh sách các tọa độ số |
DataPoint.name | Tên nhận dạng của điểm |
DataPoint.value | Danh sách các tọa độ số của điểm |
DataPoint.get_centroid() | Trả về một DataPoint mới trung bình các tọa độ của mọi điểm trong một cụm |
Cluster | Một nhóm các mục, thường là các thể hiện DataPoint |
Cluster.empty() | Trả về singleton cụm trống chia sẻ |
Cluster.contains() | Kiểm tra xem một mục có nằm trong cụm không |
Cluster.clone() | Trả về một bản sao độc lập của cụm |
Cluster.count | Số lượng mục hiện có trong cụm |
ClusterCollection | Đóng gói một danh sách các thể hiện Cluster thành một bộ sưu tập |