LEVDIST( ) 関数

指定された 2 つの文字列間のレーベンシュタイン距離を返します。これは、2 つの文字列がどの程度異なっているかを測る数値です。

構文

LEVDIST(文字列1, 文字列2 <,大文字と小文字の区別>)

パラメーター

名前 種類 説明
文字列1 文字 比較の最初の文字列。
文字列2 文字 比較の 2 番目の文字列。

大文字と小文字の区別

省略可能

論理

文字列同士を大文字と小文字を区別して比較する場合は T、大文字と小文字を区別しないで比較する場合は F を指定します。

これを省略した場合は、デフォルト値の T が使用されます。

出力

数値。この値は、2 つの文字列間のレーベンシュタイン距離です。

基本的な例

"smith" を "Smythe" に変えるには、2 回の置換と 1 回の挿入が必要なため、3 が返されます。

LEVDIST("smith","Smythe")

大文字と小文字が無視されるので、"smith's" を "Smythe" に変えるために必要なのは 2 回の置換だけのため、2 が返されます。

LEVDIST("smith's","Smythes",F)

Last_name フィールドの各値と文字列 "Smith" の間のレーベンシュタイン距離が返されます。

LEVDIST(TRIM(Last_Name),"Smith")

高度な例

"Smith" に対する値をランク付けする

"Smith" と Last_Name フィールドの各値とのレーベンシュタイン距離を表示する演算フィールド、Lev_Dist を作成します。

DEFINE FIELD Lev_Dist COMPUTED LEVDIST(TRIM(Last_Name),"Smith", F)

ビューに演算フィールド Lev_Dist を追加して、この演算フィールドの昇順にクイック ソートを行うことで、Last_name フィールドのすべての値を "Smith" との相違の量によってランク付けすることができます。

"Smith" に対するあいまい重複の抽出

Last_name フィールドから、"Smith" とのレーベンシュタイン距離が指定された範囲内であるすべての値を抽出するフィルターを作成するには、次のように指定します。

SET FILTER TO LEVDIST(TRIM(Last_Name),"Smith", F) < 3

式の数字を変更すると、フィルターされる値のレーベンシュタイン距離の量を調整することができます。

備考

LEVDIST( ) の使用に適する場面

LEVDIST( ) 関数は、ほぼ同一の値(あいまい重複)の検出や、手作業で入力されたデータで一貫性のないつづりを見つける場合に使用できます。また、LEVDIST( ) は完全な重複も識別します。

機能の仕組み

LEVDIST( ) 関数は、2 つの評価される文字列間のレーベンシュタイン距離を返します。レーベンシュタイン距離とは、ある文字列を別の文字列にするために必要な、1 文字の編集の最小回数を示す値です。

必要な編集を行うたびに、レーベンシュタイン距離の値に 1 が加算されます。レーベンシュタイン距離が大きいほど、2 つの文字列間の相違が大きいことになります。距離がゼロ(0)ということは、文字列がまったく同じということです。

編集の種類

編集には次の 3 つの種類があります。

  • 挿入
  • 削除
  • 置換

転置(隣接する 2 つの文字の位置を入れ替える)は、レーベンシュタイン アルゴリズムでは認識されないため、2 回の編集、具体的には 2 回の置換と見なされます。

英数字以外の文字

句読点、特殊文字、および空白は、普通の文字や数字と同様、単一の文字として扱われます。

大文字と小文字

大文字と小文字の区別を使用して大小文字の区別をオフにしない限り、文字に使用されている大文字または小文字の変更が 1 回の置換として数えられます。

文字の位置

レーベンシュタイン距離は文字の位置を考慮に入れます。同じ文字の組み合わせでも文字の順序が異なると、レーベンシュタイン距離が変化する可能性があります。

2 が返されます。

LEVDIST("abc", "dec")

3 が返されます。

LEVDIST("abc", "dec")

LEVDIST( ) と TRIM( ) の併用

LEVDIST( ) を使って "Smith" などのリテラル文字列を文字フィールドと比較する場合、正確な結果を確保するためには、TRIM( ) 関数を使用してフィールドから末尾の空白を除去しておく必要があります。

2 つのフィールドを比較する場合は、フィールドごとに TRIM( ) 関数を使用してください。

レーベンシュタイン アルゴリズムは空白を文字として数えるため、末尾に空白があると、それらは 2 つの文字列を同一にするために必要な編集回数の計算にすべて含まれます。

LEVDIST( ) と OMIT( ) の併用

OMIT( ) 関数は、フィールド値から "Corporation" や "Inc." などの総称要素を除去することによって、LEVDIST( ) 関数の有効性を高めることができます。一般的要素の除去により、LEVDIST( ) の文字列比較では、意味のある違いが発生する可能性のある文字列の部分だけが対象になります。

関連する関数

  • ISFUZZYDUP( ) は、レーベンシュタイン距離に基づいて文字列を比較するためのもう 1 つの手段です。

    LEVDIST( ) のデフォルトの動作とは異なり、ISFUZZYDUP( ) では大文字と小文字が区別されません。

  • DICECOEFFICIENT( ) は、文字列を比較するときに、文字または文字ブロックの相対位置を重視しないか、または完全に無視します。
  • SOUNDSLIKE( ) および SOUNDEX( ) は、正字法の比較(綴り)ではなく、発音記号の比較(発音)に基づいて文字列を比較します。
ACL のスクリプト作成ガイド 14.1