多数のテキストから 1 つのテキストに最も類似した x 個のテキストを取得します。
ページをテキストに変更する方が良いかもしれません。
遅すぎるため、テキストをすべてのテキストと比較しないでください。
多数のテキストから 1 つのテキストに最も類似した x 個のテキストを取得します。
ページをテキストに変更する方が良いかもしれません。
遅すぎるため、テキストをすべてのテキストと比較しないでください。
類似のドキュメント/ページを識別する機能は、Web ページであれ、より一般的な形式のテキストであれ、コードであれ、多くの実用的な用途があります。このトピックは、学術論文やあまり専門的でないフォーラムでもよく取り上げられています。このようにドキュメントが比較的豊富にあるにもかかわらず、特定のケースに関連する情報やテクニックを見つけるのは難しい場合があります。
目前の特定の問題と関連する要件を説明することで、より多くのガイダンスを提供できる場合があります。それまでの間、以下にいくつかの一般的なアイデアを示します。
多くの異なる関数を使用して、ページの類似性を何らかの方法で測定できます。これらの関数の 1 つ (場合によっては複数) の選択は、問題に割り当てることができる時間やスペースの量、およびノイズに対して必要な許容レベルなど、さまざまな要因によって異なります。
より単純なメトリックのいくつかは次のとおりです。
上記のメトリクスのいくつかは、正規化するとうまく機能します (たとえば、サイズが大きいため、他のページと同様の単語が含まれる可能性が高い長いページを優先しないようにするため)。
より複雑で計算コストのかかる測定は次のとおりです。
一般に、ほとんどの計算をドキュメントごとに 1 回実行できる測定値/アルゴリズムを区別できます。その後、これらの測定値を比較または結合することを目的とした追加のパスが続きます (追加の計算は比較的少なくて済みます)。ペアで比較するドキュメントを処理します。
1 つ (または実際にはいくつかの重み付け係数と共にそのような測定値) を選択する前に、類似性測定自体を超えた追加の要因を考慮することが重要です。たとえば、それは有益かもしれません...
すべては、「類似」の意味によって異なります。「ほぼ同じ主題」を意味する場合、一致するN グラムを探すことは、通常、かなりうまく機能します。たとえば、トリグラムからそれらを含むテキストへのマップを作成し、すべてのテキストのすべてのトリグラムをそのマップに配置します。次に、一致するテキストが得られたら、マップ内のすべてのトリグラムを検索し、最も頻繁に返されるテキストを選択します (おそらく、長さによる正規化を行います)。
類似の意味はわかりませんが、Luceneのような検索システムにテキストをロードして、「1つのテキスト」をクエリとして提示する必要があります。Luceneはテキストの事前インデックスを作成するため、クエリ時に最も類似したテキストを(ライトによって)すばやく見つけることができます。
2 つのページ間の「差」を測定する関数を定義する必要があります。そのようなさまざまな機能を想像できますが、そのうちの 1 つをドメインに合わせて選択する必要があります。
キーワード セットの違い- 辞書で最も一般的な単語のドキュメントを整理し、ドキュメントごとに一意のキーワードのリストを作成できます。差分機能は、ドキュメントごとのキーワードのセットの差分として差分を計算します。
テキストの差分- テキスト差分アルゴリズムを使用して、あるドキュメントを別のドキュメントに変換するのに必要な編集回数に基づいて各距離を計算します (「テキスト差分アルゴリズム」を参照してください) 。
差分関数を取得したら、現在のドキュメントと他のすべてのドキュメントとの差分を計算し、最も近い他のドキュメントを返します。
これを何度も行う必要があり、大量のドキュメントがある場合、問題は少し難しくなります。