การจัดกลุ่มจุดข้อมูล
การทำคลัสเตอร์ของจุดข้อมูล
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() คืนค่าอินสแตนซ์คลัสเตอร์ว่างแบบแชร์, singleton แทนการจัดสรรใหม่ในทุกการเรียก.
การจัดกลุ่มคลัสเตอร์ในคอลเลกชัน
ClusterCollection ห่อหุ้มรายการตัวเลือกของอินสแตนซ์ Cluster เข้าเป็นคอลเลกชันเดียว ให้คุณมีอ็อบเจกต์หนึ่งอันเพื่อส่งต่อเมื่อฟังก์ชันต้องรับหรือคืนค่ามากกว่าหนึ่งคลัสเตอร์ในครั้งเดียว.
การคำนวณศูนย์กลางของคลัสเตอร์
DataPoint.get_centroid() หาค่าเฉลี่ยของพิกัดของแต่ละจุดข้อมูลใน Cluster ทีละตำแหน่ง และคืนค่า DataPoint ใหม่ที่แสดงถึงศูนย์กลาง จุดทุกจุดในคลัสเตอร์ต้องมีจำนวนมิติเดียวกันใน DataPoint.value เพื่อให้ค่าเฉลี่ยมีความหมาย.
เคล็ดลับและแนวทางปฏิบัติที่ดีที่สุด
- รักษาความยาวของรายการ
DataPoint.valueทุกรายการให้เท่ากันภายในคลัสเตอร์ —DataPoint.get_centroid()คำนวณค่าเฉลี่ยของพิกัดทีละตำแหน่ง ดังนั้นมิติที่ไม่ตรงกันจะทำให้ศูนย์กลางผิดพลาด. - ใช้
Cluster.empty()สำหรับคลัสเตอร์ว่างแบบแชร์และเป็นเอกลักษณ์แทนการสร้างคลัสเตอร์ว่างใหม่เมื่อคุณต้องการค่าเป็นเพียงตัวแทน. - เรียกใช้
Cluster.clone()ก่อนที่จะทำการเปลี่ยนแปลงคลัสเตอร์ที่คุณยังต้องการต้นฉบับไว้ที่อื่น — การโคลนจะคัดลอกรายการไอเท็มแทนการอ้างอิง. - ใช้
ClusterCollectionเมื่อฟังก์ชันต้องรับหรือคืนค่ามากกว่าหนึ่งClusterเป็นค่าเดียว. - คลาสเหล่านี้เป็นยูทิลิตี้ทั่วไป ไม่ใช่ฟีเจอร์การแยกข้อมูล PDF — ให้จับคู่กับตรรกะของคุณเองเพื่อสร้างค่า
DataPointจากข้อมูลเอกสาร.
ปัญหาทั่วไป
| ปัญหา | สาเหตุ | การแก้ไข |
|---|---|---|
DataPoint.get_centroid() สร้างศูนย์กลางที่มีจำนวนค่าที่ไม่คาดคิด | จุดข้อมูลในคลัสเตอร์มีรายการ DataPoint.value ที่มีความยาวต่างกัน | ตรวจสอบให้แน่ใจว่า DataPoint ทุกตัวที่เพิ่มเข้าไปใน Cluster มีมิติเดียวกัน |
Cluster.contains() คืนค่า False สำหรับค่าที่คุณคาดว่าจะมีอยู่ | การตรวจสอบสมาชิกทำโดยตรงกับวัตถุรายการที่จัดเก็บไว้ ดังนั้นสองอินสแตนซ์ DataPoint ที่สร้างแยกกันแต่มีชื่อและค่าเดียวกัน จะไม่ได้รับการพิจารณาให้เท่ากันโดยอัตโนมัติโดยการค้นหาตามอัตลักษณ์ | ใช้ instance DataPoint เดียวกันซ้ำ, หรือเปรียบเทียบโดย DataPoint.name และ DataPoint.value ก่อนสมมติว่ามีสมาชิก |
| การเปลี่ยนแปลงคลัสเตอร์ที่คัดลอกจะทำให้ต้นฉบับเปลี่ยนแปลงด้วย | Cluster.clone() ถูกข้ามและการอ้างอิง Cluster เดียวกันถูกแชร์แทนการคัดลอก | เรียก Cluster.clone() ก่อนเสมอเมื่อผู้เรียกต้องการสำเนาอิสระ |
FAQ
อะไรคือความแตกต่างระหว่าง Cluster และ ClusterCollection?
Cluster เก็บรายการของไอเท็ม — โดยทั่วไปเป็นอินสแตนซ์ของ DataPoint — ที่เป็นส่วนหนึ่งของกลุ่มเดียว ClusterCollection เก็บรายการของอ็อบเจ็กต์ Cluster: มันจัดกลุ่มคลัสเตอร์เข้าด้วยกัน ไม่ใช่จุดข้อมูลแบบเดี่ยว.
DataPoint.get_centroid() แก้ไขคลัสเตอร์ที่ได้รับหรือไม่?
ไม่. มันอ่านไอเท็มที่มีอยู่แล้วใน Cluster ที่ให้มาและคืนค่า DataPoint ใหม่สำหรับศูนย์กลาง; คลัสเตอร์ต้นทางและไอเท็มของมันจะไม่ถูกเปลี่ยนแปลง.
ฟังก์ชันการจัดกลุ่มนี้เป็นเฉพาะสำหรับเนื้อหา PDF หรือไม่?
No. DataPoint, Cluster และ ClusterCollection เป็น primitive การจัดกลุ่มตัวเลขทั่วไปที่มาพร้อมกับแพคเกจ aspose_pdf. พวกมันไม่ได้อ่านหน้า, ข้อความ, หรือโครงสร้าง PDF อื่นใดด้วยตนเอง — พวกมันทำงานเพียงบนค่าที่คุณสร้างให้เท่านั้น.
ทำไม Cluster.empty() ถึงคืนอินสแตนซ์เดียวกันทุกครั้ง?
Cluster.empty() คืนค่า singleton ที่แชร์กันเพื่อให้การเรียกซ้ำสำหรับ “no cluster” ไม่ได้จัดสรรอ็อบเจกต์ใหม่ในแต่ละครั้ง.
API Reference สรุป
| คลาส/เมธอด | คำอธิบาย |
|---|---|
DataPoint | จุดที่ตั้งชื่อและเก็บรายการพิกัดเชิงตัวเลข |
DataPoint.name | ชื่อที่ใช้ระบุจุด |
DataPoint.value | รายการพิกัดเชิงตัวเลขของจุด |
DataPoint.get_centroid() | คืนค่า DataPoint ใหม่ที่หาค่าเฉลี่ยพิกัดของทุกจุดในกลุ่ม |
Cluster | กลุ่มของรายการ โดยทั่วไปเป็นอินสแตนซ์ของ DataPoint |
Cluster.empty() | ส่งคืน singleton ของคลัสเตอร์ว่างที่แชร์ |
Cluster.contains() | ตรวจสอบว่ารายการอยู่ใน cluster หรือไม่ |
Cluster.clone() | ส่งคืนสำเนาอิสระของ cluster |
Cluster.count | จำนวนรายการที่อยู่ใน cluster ในปัจจุบัน |
ClusterCollection | ห่อหุ้มรายการของอินสแตนซ์ Cluster ให้เป็นคอลเลกชันเดียว |