DICECOEFFICIENT( ) 関数

2 つの指定された文字列のダイス係数を返します。これは、2 つの文字列間の類似度を測定したものです。

構文

DICECOEFFICIENT(文字列 1, 文字列 2 <,n-gram>)

パラメーター

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

n-gram

省略可能

数値

使用する n-gram の長さ。

1 以上の整数を指定します。n-gram の長さを大きくすると、2 つ文字列の間の類似度の基準が厳しくなります。

長さを指定しない場合、デフォルトの長さの 2 が使用されます。

n-gram は、ダイス係数計算の構成要素であり、比較対象となる 2 つの文字列にとって、構成要素であると同時に重なり合う、部分文字列(文字ブロック)です。

詳細については、備考を参照してください。

出力

数値。値は 2 つの文字列のダイス係数です。これは、同一の 2 つの文字列の n-gram の合計数の割合を表します。範囲は 0.0000 ~ 1.0000 です。

基本的な例

n-gram の長さが結果に及ぼす影響

下の 3 つの例は、同じ 2 つの文字列を比較したものです。返される類似度は、指定した n-gram の長さによって変わります。

次の例では 0.9167 が返されます(デフォルトの n-gram 長さ(2)を使用すると、2 つの文字列間の n-gram の同一度が 92% になる)。

DICECOEFFICIENT("125 SW 39TH ST, Suite 100","Suite 100, 125 SW 39TH ST")

次の例では 1.0000 が返されます(n-gram 長さに 1 を使用すると、2 つの文字列間の n-gram の同一度が 100% になる)。

DICECOEFFICIENT("125 SW 39TH ST, Suite 100","Suite 100, 125 SW 39TH ST", 1)

次の例では、0.8261 が返されます(n-gram 長さに 3 を使用すると、2 つの文字列間の n-gram の同一度が 83% になる)。

DICECOEFFICIENT("125 SW 39TH ST, Suite 100","Suite 100, 125 SW 39TH ST", 3)

フィールドへの入力値

デフォルトの n-gram 長さ 2 を使用した場合の、文字列「125 SW 39TH ST, Suite 100」と "Address" フィールドの各値との間のダイス係数が返されます。

DICECOEFFICIENT(Address,"125 SW 39TH ST, Suite 100")

高度な例

要素間の順序を入れ替えた文字列の使用

要素間の順序を入れ替えた文字列を検索する場合に、DICECOEFFICIENT( ) を最適化するには、n-gram 長さを小さくし、重要でない文字を削除します。

次の例では 0.7368 が返されます(デフォルトの n-gram 長さ(2)を使用すると、2 つの文字列間の n-gram の同一度が 76% になる)。

DICECOEFFICIENT("John Smith","Smith, John")

次の例では、1.0000 が返されます(姓と名の間のカンマを除外し、n-gram 長さ 1 を使用すると、2 つの文字列間の n-gram の同一度が 100% になる)。

DICECOEFFICIENT("John Smith", EXCLUDE("Smith, John", ","), 1)

「125 SW 39TH ST, Suite 100」に対する類似度のランキング

次の例は、「125 SW 39TH ST, Suite 100」と "Address" フィールドの各値との間のダイス係数を表示する演算フィールド Dice_Co を作成しています。

DICECOEFFICIENT(Address,"125 SW 39TH ST, Suite 100")

「125 SW 39TH ST, Suite 100」との類似度に基づいてすべての "Address" フィールド値をランキングするには、演算フィールド Dice_Co をビューに追加し、そのフィールドの降順でクイック ソートします。

「125 SW 39TH ST, Suite 100」に対するあいまい重複の抽出

次の例は、「125 SW 39TH ST, Suite 100」との指定した類似度以上の類似度を持つすべての "Address" フィールド値を抽出するフィルターを作成しています。

SET FILTER TO DICECOEFFICIENT(Address,"125 SW 39TH ST, Suite 100") > 0.5

式の数値を変更すると、フィルターリングされる値の類似度を調整することができます。

備考

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

DICECOEFFICIENT( ) 関数は、ほぼ同一の値(あいまい重複)を検出する場合に使用できます。また、同一またはほぼ同一の内容で、要素間の順序を入れ替えた文字列を検索する場合にも使用できます。例:

  • 数字が入れ替わった電話番号、社会保障番号
  • 形式が異なる複数の同じ住所

機能の仕組み

DICECOEFFICIENT( ) は 2 つの評価された文字列間のダイス係数を返します。ダイス係数は、文字列間の類似度を測定したもので、0.0000 ~ 1.0000 で示されます。返された値が大きいと、2 つの文字列間の類似度が高くなります。

  • 1.0000 – 各文字列が同じ文字から構成されていることを示します。ただし、文字の順序と大文字小文字の表記は異なる場合があります。

  • 0.7500 – 2 つの文字列の n-gram の同一度が 75% になることを意味します。

  • 0.0000 – 2 つの文字列に共有 n-grams(以下で説明)がないか、計算で使用される n-gram の指定された長さが比較対象の 2 つの文字列のうちの短い方の文字列よりも長いことを意味します。

使用上のヒント

  • フィルターリングまたは並べ替え ダイス係数に基づいてフィールドの値をフィルターリングするか並べ替えると、比較文字列に最も類似している値が特定されます。
  • 大文字と小文字の区別 この関数では大文字と小文字が区別されないため、"SMITH" は "smith" と同じであると判断されます。
  • 先頭と末尾にあるスペース フィールド内の先頭と末尾にあるスペースを自動的に除去するため、パラメーターとしてフィールドを指定するときに TRIM( ) および ALLTRIM( ) 関数を使う必要はありません。
  • 一般的要素の除去 OMIT( ) と EXCLUDE( ) 関数は、フィールド値から "Corporation" や "Inc."、カンマ、ピリオド、アンパサンド(&)文字などの一般的要素を除去することによって、 DICECOEFFICIENT( ) 関数の有効性を高めることができます。

    一般的要素と句読点の除去により、DICECOEFFICIENT( ) の文字列比較は、意味のある違いが発生する可能性のある文字列の部分だけに集中されます。

ダイス係数の計算方法

ダイス係数は、同一の 2 つの文字列の n-gram の合計数の割合を表します。

まず、ダイス係数は比較対象の 2 つの文字列を n-gram 文字ずつに分割して計算されます。n-grams(または q-grams)は長さが n の重なり合うサブ文字列または重なり合う文字ブロックです。ngram パラメーターを使用して n の長さを指定するか、デフォルトの長さの 2 を使用できます。

2 つの名前は n-grams に分割されます。

ここに名前、"John Smith" と "Smith, John D." があり、長さ 2 文字および 3 文字の n-gram に分割するとします。 アンダースコアはスペースを示します。内部スペースと句読点は文字と見なされます。

n-gram の長さ

“John Smith” n-gram

"Smith, John D." n-gram

2

Jo | oh | hn | n_ | _S | Sm | mi | it | th

Sm | mi | it | th | h, | ,_ | _J | Jo | oh | hn | n_ | _D | D.

3

Joh | ohn | hn_ | n_S | _Sm | Smi | mit | ith

Smi | mit | ith | th, | h,_ | ,_J | _Jo | Joh | ohn | hn_ | n_D | _D.

ダイス係数の計算式

2 つの比較対象の文字列に対して n-grams が確立されたら、次の式を使用して計算が完了します。

  • 2 x 共有 n-grams の数 / 両方の文字列の n-grams の数

"共有 n-grams" は両方の文字列に表示される n-grams です。たとえば、n-gram 長さ 2(AB | BCBC | CD)の場合、「ABC」と「BCD」は n-gram 「BC」を共有します。

ダイス係数の計算例

次の表では、異なる n-gram の長さを使用して、2 つの文字列「John Smith」および「John D. Smith」のダイス係数を計算する例を示します。

同じ文字列のペアの n-gram の長さが大きくなると、ダイス係数値が小さくなり、類似度が低いことを示します。文字列は同じですが、類似度の基準がより厳しくなります。文字列をより長い n-grams に分割する場合、共有と見なされるには、より長い連続文字が n-gram と一致する必要があります。

この点については、n-gram の長さを大きくすると、文字の相対位置の重みが大きくなると考えることもできます。対照的に、長さ 1 の n-gram を使用しているときには、文字の相対位置は考慮されません。相対位置は、文字列内での絶対的位置ではなく、文字列の、他の文字列からの相対的位置のことです。

ヒント

特に入れ替えを検索している場合は、n-gram 長さ 1 を使用します。

n-gram の長さ

“John Smith” n-gram

"Smith, John D." n-gram

共有 n-grams

ダイス係数

1

J | o | h | n | _ | S | m | i | t | h

(10 n-grams)

S | m | i | t | h | , | _ | J | o | h | n | _ | D | .

(14 n-grams)

10

2x10 / (10+14) = 0.8333

2

(デフォルト)

Jo | oh | hn | n_ | _S | Sm | mi | it | th

(9 n-grams)

Sm | mi | it | th | h, | ,_ | _J | Jo | oh | hn | n_ | _D | D.

(13 n-grams)

8

2x8 / (9+13) = 0.7273

3

Joh | ohn | hn_ | n_S | _Sm | Smi | mit | ith

(8 n-grams)

Smi | mit | ith | th, | h,_ | ,_J | _Jo | Joh | ohn | hn_ | n_D | _D.

(12 n-grams)

6

2x6 / (8+12) = 0.6000

4

John | ohn_ | hn_S | n_Sm | _Smi | Smit | mith

(7 n-grams)

Smit | mith | ith, | th,_ | h,_J | ,_Jo | _Joh | John | ohn_ | hn_D | n_D.

(11 n-grams)

4

2x4 / (7+11) = 0.4444

DICECOEFFICIENT( ) と ISFUZZYDUP( ) および LEVDIST( ) の比較

DICECOEFFICIENT( ) 関数とレーベンシュタイン距離を使用する ISFUZZYDUP( ) および LEVDIST( ) の主な違いの 1 つは、DICECOEFFICIENT( ) は比較対象の 2 つの文字列の文字または文字ブロックの相対位置を重視しないか、完全に無視するという点です。これに対して、レーベンシュタイン距離に基づく関数では相対位置が重要になります。

比較対象値(要素入れ替えの考慮あり)

要素全体の配置が入れ替わる可能性がある住所などの文字列を比較する場合は、DICECOEFFICIENT( ) を使用した方がよいことがあります。たとえば、同じ住所で「Suite」要素が入れ替わっている場合は、DICECOEFFICIENT( ) を使用すると高い類似度が示されますが、LEVDIST( ) では高い相違性が示されます。

住所ペア

ダイス係数

(デフォルトの n-gram 2)

レーベンシュタイン距離

  • 125 SW 39TH ST, Suite 100

  • Suite 100, 125 SW 39TH ST

0.9167

22

(レーベンシュタイン距離が大きくなれば、2 つの文字列間の相違も大きくなります)

比較対象値(要素入れ替えの考慮なし)

入れ替えが問題ではない場合、LEVDIST( ) はより有用な結果を提供する可能性があります。たとえば、同じ会社名に異なる句読点が含まれている場合、DICECOEFFICIENT( ) を使用すると高い相違度が示されますが、LEVDIST( ) では高い類似度が示されます。

会社名の組み合わせ

ダイス係数

(デフォルトの n-gram 2)

レーベンシュタイン距離

  • AVS, Inc

  • A.V.S. Inc

0.3750

3
ACL のスクリプト作成ガイド 14.1