# LevenshteinDist スクリプトおよびチャート関数

LevenshteinDist() は、2 つの文字列間の Levenshtein の距離を返します。これは、1 つの文字列を別の文字列に変更するために必要な 1 文字の編集 (挿入、削除、または置換) の最小数として定義されます。 この関数は、あいまい文字列の比較に役立ちます。

構文:

LevenshteinDist(text1, text2)

戻り値データ型： 整数

引数

| 引数 | 説明 |
| --- | --- |
| text1 | 最初の文字列。 |
| text2 | 1 文字編集の最小数を計算するために、最初の文字列と比較される 2 番目の文字列。 |

例: チャートの数式

| 例 | 結果 |
| --- | --- |
| `LevenshteinDist( 'Kitten','Sitting' )` | `3` を返します |

## 例 - LevenshteinDist の基本

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/LevenshteinDist.htm)

#### チャートの数式

概要

データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。

ロード スクリプトには次が含まれています:

* 「`Example`」というデータ テーブルにロードされるデータセット。

* データ テーブル内の 1 つの項目は `InputText` と呼ばれます。

ロード スクリプト

```
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 のシナリオ

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/LevenshteinDist.htm)

#### チャートの数式

概要

この例では、異なるシステムの製品名を統合します。誤字、略称、スペース、その他の理由により、製品名に必ずしも同じスペルが使用されるとは限りません。`LevenshteinDist` 関数を使用すると、2 つの製品名の類似性を測定し、名前が同一でなくても、同じ製品を指す可能性が高いものを特定できます。

データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。

ロード スクリプトには次が含まれています:

* 「`Example`」というデータ テーブルにロードされるデータセット。

* データ テーブル内の次の項目:

  * `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 |

レーベンシュタイン距離は、テキストのわずかな変化が頻繁に発生する顧客データ管理、在庫システム、文書処理などの分野で、スペル チェッカー、光学式文字認識、修正システムの一部として広く使用されているファジー マッチングの一種です。

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/LevenshteinDist.htm)

#### ロード スクリプト

ロード スクリプト

```
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;
```

結果テーブル

| ID | String\_1 | String\_2 | LevenshteinDistance |
| --- | --- | --- | --- |
| 1 | Silver | Sliver | 2 |
| 2 | Silver | SSiver | 2 |
| 3 | Silver | SSiveer | 3 |
| 4 | Gold | 太字 | 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 |