Python में क्लस्टरिंग के साथ कैसे काम करें
Aspose.PDF FOSS for 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 फ्लोट्स की सूची के साथ जोड़ता है — वह कोऑर्डिनेट्स या फीचर वेक्टर जिसे आप अपनी समूह बनाने की लॉजिक के लिए अर्थपूर्ण मानते हैं:
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 के प्रत्येक आयाम का औसत निकालती है और परिणाम को "centroid" नामक नए DataPoint के रूप में लौटाती है:
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() हमेशा एक नया आवंटित करने के बजाय वही कैश किया हुआ खाली-क्लस्टर इंस्टेंस लौटाता है:
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()-सजग कंटेनर के पीछे बंडल करता है:
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() एक सिंगलटन एक्सेसर है — प्रत्येक कॉल में वही कैश्ड इंस्टेंस लौटाया जाता है। यदि आपको अलग, स्वतंत्र खाली क्लस्टर चाहिए तो Cluster() (बिना किसी आर्ग्यूमेंट के) का उपयोग करें।
लाइब्रेरी से बिंदुओं को स्वचालित रूप से समूहित करने की अपेक्षा
DataPoint, Cluster, और ClusterCollection क्रमशः बिंदुओं, क्लस्टर और सेंट्रॉइड गणना को दर्शाने वाली डेटा स्ट्रक्चर हैं — इस मॉड्यूल में ऐसा कोई लिंकज या दूरी फ़ंक्शन नहीं है जो तय करे कि कौन से बिंदु एक साथ आते हैं। आपका अपना कोड क्लस्टर सदस्यता तय करता है, उसके बाद आप Cluster बनाते हैं।
अक्सर पूछे जाने वाले प्रश्न
क्या यह मॉड्यूल डेटा पॉइंट्स को दूरी के आधार पर स्वचालित रूप से समूहित करता है?
नहीं। Cluster, DataPoint, और ClusterCollection पहले से तय समूहों को दर्शाने और सेंट्रॉइड गणना करने के बिल्डिंग ब्लॉक्स हैं — इसमें कोई इनबिल्ट एग्लोमेरेशन या दूरी-आधारित असाइनमेंट चरण नहीं है।
Cluster() और Cluster.empty() में क्या अंतर है?
Cluster(items=None) को हर बार बुलाए जाने पर एक नया इंस्टेंस बनाता है। Cluster.empty() एक क्लासमेथड है जो हर कॉल पर वही कैश्ड, साझा खाली-क्लस्टर इंस्टेंस लौटाता है।
क्या मैं Cluster बनाने के बाद उसमें आइटम जोड़ सकता हूँ?
नहीं। Cluster केवल contains(), clone(), और count प्रॉपर्टी को निर्माण के बाद उजागर करता है — सदस्यता निर्माण के बाद स्थिर रहती है।
क्या get_centroid() किसी भी संख्या में आयामों के साथ काम करता है?
हाँ, बशर्ते क्लस्टर में प्रत्येक DataPoint.value सूची की लंबाई समान हो। get_centroid प्रत्येक आयाम को स्वतंत्र रूप से औसत करता है और परिणाम को एक नए DataPoint के रूप में लौटाता है।
सामान्य Python क्लस्टरों की सूची के अलावा ClusterCollection क्या जोड़ता है?
मुख्यतः len() समर्थन वाला एक टाइप्ड कंटेनर। यह इटरेशन, लुकअप, या मर्जिंग व्यवहार नहीं जोड़ता, सिवाय इसके जो आपने उस सूची से पहले ही बना रखा है जिससे इसे बनाया गया था।