データポイントのクラスタリング
データポイントのクラスタリング
DataPoint、Cluster、およびClusterCollectionは、Aspose.PDF FOSSに同梱された小規模で汎用的な階層的凝集クラスタリングツールキットです。Python 用です。これらは汎用的なデータグルーピングのプリミティブ――座標とラベルを持つポイント、アイテムのグループ、グループのコレクション――であり、PDF 固有のドキュメント機能ではありません。このモジュール自体は PDF コンテンツの読み書きを行いません。数値データ(例:ドキュメントから抽出した測定値)をクラスタにグループ化し、クラスタの重心で要約する必要がある場合に使用してください。
データポイントの表現
DataPointは、識別子となるnameと数値座標のvalueリストをペアにします。両方は構築後、DataPoint.nameおよびDataPoint.valueとして公開されます。
クラスタの構築とコピー
Clusterは、任意のアイテムリストを単一のグループにラップします。Cluster.countはクラスタが現在保持しているアイテム数を返し、Cluster.contains()は指定されたアイテムがメンバーかどうかをチェックし、Cluster.clone()は独自のアイテムリストを持つ独立したコピーを返します。Cluster.empty()は、呼び出しごとに新しいインスタンスを割り当てるのではなく、共有されたシングルトンの空クラスタインスタンスを返します。
コレクション内でのクラスタのグルーピング
ClusterCollection はオプションの Cluster インスタンスのリストを単一のコレクションにラップし、関数が同時に複数のクラスターを受け取ったり返したりする必要があるときに、渡すオブジェクトを 1 つ提供します。
クラスタ重心の計算
DataPoint.get_centroid() は Cluster 内のすべてのデータポイントの座標を位置ごとに平均し、重心を表す新しい DataPoint を返します。平均が意味を持つためには、クラスター内のすべてのポイントが DataPoint.value で同じ次元数を持っている必要があります。
ヒントとベストプラクティス
- クラスター内のすべての
DataPoint.valueリストは同じ長さに保ってください —DataPoint.get_centroid()は座標を位置ごとに平均するため、次元が合わないと誤った重心が生成されます。 - プレースホルダー値が必要なときに新しい空クラスターを作成する代わりに、共有のシングルトン空クラスターとして
Cluster.empty()を使用してください。 - 他の場所で元のクラスターがまだ必要な場合にクラスターを変更する前に
Cluster.clone()を呼び出してください — クローンはアイテムリストをコピーし、エイリアスにはしません。 - 関数が複数の
Clusterを単一の値として受け取ったり返したりする必要があるときは、ClusterCollectionを使用してください。 - これらのクラスは汎用ユーティリティであり、PDF パーシング機能ではありません — ドキュメントデータから
DataPoint値を生成する独自のロジックと組み合わせて使用してください。
一般的な問題
| 問題 | 原因 | 修正 |
|---|---|---|
DataPoint.get_centroid() は予期しない数の値を持つ重心を生成します | クラスタ内のデータポイントは、長さが異なる DataPoint.value リストを持っています | すべての DataPoint が Cluster に追加される際に、同じ次元数であることを確認してください |
Cluster.contains() は、存在すると期待する値に対して False を返します | メンバーシップは保存されたアイテムオブジェクトと直接比較されるため、同じ名前と値を持つ別々に作成された DataPoint インスタンス2つは、同一性ベースの検索で自動的に等しいとみなされません | 同じ DataPoint インスタンスを再利用するか、メンバーシップを仮定する前に DataPoint.name と DataPoint.value で比較してください |
| クローンしたクラスターを変更すると、元のクラスターも変更されます | Cluster.clone() がスキップされ、コピーされる代わりに同じ Cluster 参照が共有されました | 呼び出し元が独立したコピーを必要とする場合は、必ず最初に Cluster.clone() を呼び出してください |
FAQ
Cluster と ClusterCollection の違いは何ですか?
Cluster は、通常 DataPoint インスタンスである項目のリストを保持し、1 つのグループに属します。ClusterCollection は Cluster オブジェクトのリストを保持します:個々のデータポイントではなく、クラスタをまとめるためのものです。
DataPoint.get_centroid() は、与えられたクラスタを変更しますか?
いいえ。提供された Cluster にすでに含まれる項目を読み取り、セントロイド用の新しい DataPoint を返します。元のクラスタとその項目は変更されません。
このクラスタリング機能は PDF コンテンツに特化していますか?
No. DataPoint、Cluster、およびClusterCollectionは、aspose_pdfパッケージに同梱されている汎用的な数値クラスタリングプリミティブです。これらはページやテキスト、その他のPDF構造を自ら読み取ることはなく、あくまであなたが構築した値に対してのみ動作します。
なぜ Cluster.empty() は毎回同じインスタンスを返すのですか?
Cluster.empty() は共有シングルトンを返すため、“no cluster” の呼び出しを繰り返しても毎回新しいオブジェクトが割り当てられません。
API Reference 概要
| クラス/メソッド | 説明 |
|---|---|
DataPoint | 数値座標のリストを保持する名前付きポイント |
DataPoint.name | 点の識別名 |
DataPoint.value | 点の数値座標リスト |
DataPoint.get_centroid() | クラスター内のすべての点の座標を平均化した新しい DataPoint を返します |
Cluster | 通常は DataPoint のインスタンスである項目のグループ |
Cluster.empty() | 共有の空クラスターシングルトンを返します |
Cluster.contains() | アイテムがクラスターに含まれているか確認します |
Cluster.clone() | クラスターの独立したコピーを返します |
Cluster.count | 現在クラスター内にあるアイテムの数 |
ClusterCollection | リストの Cluster インスタンスを 1 つのコレクションにラップします |