LevenshteinDist - スクリプトおよびチャート関数
LevenshteinDist() は、2 つの文字列間の Levenshtein の距離を返します。これは、1 つの文字列を別の文字列に変更するために必要な 1 文字の編集 (挿入、削除、または置換) の最小数として定義されます。
この関数は、あいまい文字列の比較に役立ちます。
構文:
LevenshteinDist(text1, text2)
戻り値データ型: 整数
引数
text1
|
最初の文字列 |
text2
|
1 文字編集の最小数を計算するために、最初の文字列と比較される 2 番目の文字列。 |
例: チャートの数式
LevenshteinDist( 'Kitten','Sitting' )
|
3 を返します |
例 - LevenshteinDist の基本
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
ロード スクリプト
Example:
Load * inline [
InputText
Sliver
SSiver
SSiveer
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、この項目を軸として追加します:
次のメジャーを作成します:
結果テーブル
入力テキスト | LevenshteinDist('Silver', InputText) |
---|
Sliver | 2 |
SSiveer | 3 |
SSiver | 2 |
LevenshteinDist 関数の出力は、InputText を期待されるテキスト Silver に変更するために必要な変更の数を返します。たとえば、最初の行では、Sliver という単語を Silver に変更するために 2 つの変更が必要です。2 行目には 3 つの変更が必要です。1) 余分な文字 S を削除します。2) 余分な文字 e を削除します。3) 新しい文字 l を挿入します。
例 - LevenshteinDist のシナリオ
概要
この例では、異なるシステムの製品名を統合します。誤字、略称、スペース、その他の理由により、製品名に必ずしも同じスペルが使用されるとは限りません。LevenshteinDist 関数を使用すると、2 つの製品名の類似性を測定し、名前が同一でなくても、同じ製品を指す可能性が高いものを特定できます。
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
ロード スクリプト
Example:
Load * inline [
ProductA, ProductB
Coca Cola 330ml, CocaCola 330 ml
Pepsi 500 ml, Pepsi 500ml
Sprite Zero 600 ml, SpriteZero600ml
Red Bull 250ml, Redbull 250ml
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
次のメジャーを作成します:
結果テーブル
ProductA | ProductB | LevenshteinDist(ProductA, ProductB) |
---|
Coca Cola 330ml | CocaCola 330 ml | 2 |
Pepsi 500 ml | Pepsi 500ml | 1 |
Red Bull 250ml | Redbull 250ml | 2 |
Sprite Zero 600 ml | SpriteZero600ml | 3 |
レーベンシュタイン距離は、テキストのわずかな変化が頻繁に発生する顧客データ管理、在庫システム、文書処理などの分野で、スペル チェッカー、光学式文字認識、修正システムの一部として広く使用されているファジー マッチングの一種です。
ロード スクリプト
Example:
Load *, recno() as ID;
Load 'Silver' as String_1,* inline [
String_2
Sliver
SSiver
SSiveer ];
Example:
Load *, recno()+3 as ID;
Load 'Gold' as String_1,* inline [
String_2
Bold
Bool
Bond ];
Example:
Load *, recno()+6 as ID;
Load 'Ove' as String_1,* inline [
String_2
Ove
Uve
Üve ];
Example:
Load *, recno()+9 as ID;
Load 'ABC' as String_1,* inline [
String_2
DEFG
abc
ビビビ ];
set nullinterpret = '<NULL>';
Example:
Load *, recno()+12 as ID;
Load 'X' as String_1,* inline [
String_2
''
<NULL>
1 ];
R1:
Load
ID,
String_1,
String_2,
LevenshteinDist(String_1, String_2) as LevenshteinDistance
resident Example;
Drop table Example;
結果テーブル
1 |
Silver |
Sliver |
2 |
2 |
Silver |
SSiver |
2 |
3 |
Silver |
SSiveer |
3 |
4 |
Gold |
Bold |
1 |
5 |
Gold |
Bool |
3 |
6 |
Gold |
Bond |
2 |
7 |
Ove |
Ove |
0 |
8 |
Ove |
Uve |
1 |
9 |
Ove |
Üve |
1 |
10 |
ABC |
DEFG |
4 |
11 |
ABC |
abc |
3 |
12 |
ABC |
ビビビ |
3 |
13 |
X |
|
1 |
14 |
X |
- |
1 |
15 |
X |
1 |
1 |