3

テキストフィールドを検索して類似している可能性のある行を特定し、それらが重複していてマージする必要があるかどうかを特定できるようにする方法を見つけようとしています。たとえば、私のデータが次のようになっている場合:

MyText_Column

  1. ボブ
  2. ボビー
  3. ロバート
  4. ジェーン
  5. ジェニー
  6. ジャニー
  7. ジョー
  8. ジョン
  9. ジョナサン

値がまったく同じではないため、GROUP BYは機能しませんが、1つの行が類似している可能性のリストを返すクエリがあれば、それは素晴らしいことです。より良いレイアウトがあるかもしれませんが、私が想像しているのは次のような結果です。

クエリ結果

検索比較Likely_Match

  1. ボブボビー96%
  2. ボブ・ロバート12%
  3. ボブジェーン0%
  4. ボブ・ジャニー0%
  5. ....。
  6. ジェーンジャニー87%
  7. ジェーンジャニー69%
  8. ジェーンジョー12%

次に、そのような結果で、可能性で並べ替え、視覚的にスキャンして、結果が重複しているかどうかを判断できます。

4

2 に答える 2

5

UTL_MATCHパッケージには、それを行うためのいくつかのメソッドがあります。私の推測では、Jaro-Winkler類似性アルゴリズムを使用することをお勧めします。何かのようなもの

SELECT a.mytext_column search,
       b.mytext_column compare,
       utl_match.jaro_winkler_similarity( a.mytext_column, b.mytext_column ) similarity
  FROM table_name a,
       table_name b
 WHERE a.<<primary key>> != b.<<primary key>>
 ORDER BY utl_match.jaro_winkler_similarity( a.mytext_column, b.mytext_column ) desc

これにより、N *(N-1)行の結果セットが生成されます。これは、元のデータセットの行数によっては扱いにくい場合があります。特定の検索用語に最も一致するものだけを返すか、類似度スコアがしきい値を超える行のみを返すことで、制限を設けることができます。

于 2012-08-22T17:04:18.207 に答える
2

この関数を使用することもできSOUNDEXます。

于 2012-08-22T17:58:20.820 に答える