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