5

SQL に関する質問があります。

類似性について 2 つのフィールドを照合し、類似度のパーセンテージを返したいと考えています。

たとえば、次の内容を含む doc というフィールドがあるとします。

This is my first assignment in SQL 

そして別の分野では、私は次のようなものを持っています

My first assignment in SQL 

両者の類似性を確認し、何パーセント返すことができるか知りたいです。

私はいくつかの調査を行い、セカンドオピニオンを求めましたが、ソースコードを求めたことはありません. Ive は、Soundex()、Difference()、レーベンシュタイン距離アルゴリズムを使用したファジー文字列の一致を見てきました。

4

1 に答える 1

5

使用している Oracle のバージョンについては言及していません。この例は、11g バージョンに基づいています。utl_matchedit_distanceパッケージの関数を使用して、ある文字列を別の文字列に変換するために変更する必要がある文字数を決定できます。最大関数は、渡されたパラメーターのリストで最大の値を返します。次に例を示します。

-- sample of data 
with t1(col1, col2) as(
  select 'This is my first assignment in SQL', 'My first assignment in SQL ' from dual
)
-- the query
select trunc(((greatest(length(col1), length(col2)) -  
              (utl_match.edit_distance(col2, col1))) * 100) / 
             greatest(length(col1), length(col2)), 2) as "%"
  from t1

結果:

         %
----------
     70.58

補遺

@jonearles が正しく指摘したように、パッケージedit_distance_similarityの機能を使用する方がはるかに簡単です。utl_match

 with t1(col1, col2) as(
     select 'This is my first assignment in SQL', 'My first assignment in SQL ' from dual
  )
  select utl_match.edit_distance_similarity(col1, col2) as "%"
    from t1
   ;

結果:

         %
----------
        71
于 2012-10-28T18:20:31.177 に答える