Python içinde Clustering ile Nasıl Çalışılır
Aspose.PDF FOSS for Python, tek bir PDF işlemiyle ilişkili olmayan, ilgili DataPoint nesnelerini Cluster örneklerine gruplamak ve bir kümenin merkezini hesaplamak için küçük, genel amaçlı bir hiyerarşik birleşik kümeleme yardımcı programı içerir — her veri noktasının neyi temsil ettiğine siz karar verirsiniz ve koordinatlarını kendiniz sağlarsınız; yardımcı program bunları otomatik olarak doldurmaz. Kütüphane aşağıdaki komutla kurulur.
Adım Adım Kılavuz
Adım 1: Paketi Kurun
Aspose.PDF FOSS paketini kurun:
git clone https://github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python.git
cd Aspose-PDF-FOSS-for-Python
pip install -e .Kurulumu, Cluster içe aktararak ve bir onay mesajı yazdırarak doğrulayın:
from aspose_pdf import Cluster
print("aspose-pdf-foss-for-python is ready.")Adım 2: Gerekli Sınıfları İçe Aktar
Kümeleme yardımcı aracını oluşturan üç sınıfı içe aktar:
from aspose_pdf import Cluster, ClusterCollection, DataPointAdım 3: Veri Noktaları Oluştur
Bir DataPoint, bir name dizesini value float listesiyle eşleştirir — kendi gruplama mantığınız için anlamlı olduğunu düşündüğünüz koordinatlar veya özellik vektörü:
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‘i belirli bir PDF kavramına bağlamaz — sayfa koordinatları, yazı tipi metrikleri veya başka herhangi bir sayısal özellik vektörü aynı derecede işe yarar.
Adım 4: Veri Noktalarını Bir Küme İçine Grupla
Tam üyelik listesini Cluster yapıcıya iletin. Oluşturulduktan sonra bir Cluster‘e öğe eklemek için bir yöntem yoktur, bu yüzden önce üyeliği belirleyin:
from aspose_pdf import Cluster
nearby = Cluster([point_a, point_b])
print(nearby.count) # 2
print(nearby.contains(point_a)) # Truecontains(), eşitlik üzerinden eşleşir — DataPoint, name ve value birlikte eşitliği tanımlar, bu yüzden aynı ada ve değere sahip farklı bir DataPoint örneği de içerildiği rapor edilir.
Adım 5: Küme Merkezini Hesapla
DataPoint.get_centroid(cluster) bir statik metottur ve kümedeki her DataPoint.value‘in her boyutunu ortalar ve sonucu "centroid" adlı yeni bir DataPoint olarak döndürür:
from aspose_pdf import DataPoint
centroid = DataPoint.get_centroid(nearby)
print(centroid.name) # "centroid"
print(centroid.value) # per-dimension average across the clusterKümedeki her DataPoint.value listesinin aynı uzunlukta olması gerekir — get_centroid, konum konum ortalama yapar ve uzunlukların eşleştiğini doğrulamaz. Cluster.empty() üzerinde veya count == 0 içeren herhangi bir kümede çağrıldığında ValueError hatası yükseltilir.
Adım 6: Bir Küme Kopyala veya Paylaşılan Boş Örneği Yeniden Kullan
clone(), aynı öğeleri tutan bağımsız bir Cluster döndürür; Cluster.empty() ise her zaman yeni bir tane ayırmak yerine aynı önbelleğe alınmış empty-cluster örneğini döndürür:
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) # 0Adım 7: Birden Çok Küme’yi ClusterCollection içinde Gruplandır
ClusterCollection, birkaç Cluster nesnesini tek bir len()-farkında konteynerin arkasına paketler:
from aspose_pdf import Cluster, ClusterCollection
outliers = Cluster([point_c])
collection = ClusterCollection([nearby, outliers])
print(len(collection)) # 2ClusterCollection, kümelerini geri almak için bir yöntem sunmaz — ardından kümeleri yinelemek ihtiyacınız olursa, yapıcıya gönderdiğiniz listenin bir referansını saklayın.
Yaygın Sorunlar ve Çözümler
Mevcut bir öğeye bir öğe eklemenin bir yöntemi yok Cluster
Cluster yalnızca üyelik listesini oluşturma zamanında (Cluster(items)) kabul eder. Önce DataPoint nesnelerinin tam listesini oluşturun, ardından Cluster‘ı oluşturun — daha sonra çağıracak bir add() veya append() yoktur.
DataPoint.get_centroid() raises ValueError
Bu, verilen küme boş olduğunda (count == 0), Cluster.empty() dahil, gerçekleşir. cluster.count‘yi get_centroid‘i çağırmadan önce kontrol edin, ya da iş akışınızda boş bir küme geçerli bir girdi ise istisnayı yakalayın.
Merkez değerleri yanlış görünüyor
get_centroid, her DataPoint.value konumunu konumuna toplar ve nokta sayısına böler — kümedeki her value listesinin aynı uzunlukta olduğunu kontrol etmez. Uyumsuz boyutlardaki DataPoint nesnelerini karıştırmak, hatalı bir ortalama üretir ve hata fırlatmaz.
Expecting Cluster.empty() her seferinde yeni boş bir küme oluşturmak için
Cluster.empty() bir singleton erişicisidir — her çağrı aynı önbelleğe alınmış örneği döndürür. Ayrı, bağımsız bir boş küme gerekiyorsa, Cluster()‘i (argümansız) kullanın.
Kütüphanenin noktaları otomatik olarak gruplamasını bekliyor
DataPoint, Cluster ve ClusterCollection, noktaları, kümeleri ve bir centroid hesabını temsil eden veri yapılarıdır — modül, noktaların birlikte olup olmadığını belirleyen bir bağlantı veya mesafe işlevi içermez. Kendi kodunuz, bir Cluster oluşturulmadan önce küme üyeliğini belirler.
Sıkça Sorulan Sorular
Bu modül verileri mesafeye göre otomatik olarak gruplar mı?
Hayır. Cluster, DataPoint ve ClusterCollection, önceden belirlenmiş gruplamaları temsil etmek ve bir centroid hesaplamak için yapı taşlarıdır — yerleşik bir birleşim veya mesafeye dayalı atama adımı yoktur.
Cluster() ile Cluster.empty() arasındaki fark nedir?
Cluster(items=None) her çağrıldığında yeni bir örnek oluşturur. Cluster.empty() ise her çağrıda aynı önbelleğe alınmış, paylaşılan boş küme örneğini döndüren bir sınıf yöntemidir.
Bir Cluster oluştuktan sonra öğeler ekleyebilir miyim?
Hayır. Cluster yalnızca contains(), clone() ve count özelliğini oluşturmanın ötesinde ortaya çıkarır — üyelik, yapıcı çalıştıktan sonra sabitlenir.
get_centroid() herhangi bir sayıda boyutla çalışır mı?
Evet, kümedeki her DataPoint.value listesinin aynı uzunlukta olduğu sürece. get_centroid, her boyutu bağımsız olarak ortalar ve sonucu yeni bir DataPoint olarak döndürür.
ClusterCollection, düz bir Python küme listesinin ötesinde ne ekler?
Temelde len() desteği olan tiplenmiş bir kapsayıcıdır. Oluşturduğunuz listede zaten bulunanın ötesinde yineleme, arama veya birleştirme davranışı eklemez.