# LevenshteinDist — функция скриптa и диаграммы

LevenshteinDist() возвращает расстояние Levenshtein — разность между двумя строками. Оно определяется как минимальное количество односимвольных правок (вставки, удаления или замены), требуемых для превращения одной строки в другую. Функция полезна для нечеткого сравнения строк.

Синтаксис:

LevenshteinDist(text1, text2)

Возвращаемые типы данных: целое

Аргументы

| Аргумент | Описание |
| --- | --- |
| text1 | Первая строка. |
| text2 | Вторая строка, которая будет сравниваться с первой строкой для подсчета минимального количества односимвольных правок. |

Пример: выражение диаграммы

| Пример | Результат |
| --- | --- |
| `LevenshteinDist( 'Kitten','Sitting' )` | Возвращает `3` |

## Пример. Основы использования функции LevenshteinDist

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

#### Выражение диаграммы

Обзор

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.

Скрипт загрузки содержит следующее:

* Набор данных, который загружается в таблицу данных под именем `Example`.

* Одно поле в таблице данных под именем `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`. Во второй строке необходимо сделать три изменения: 1) удалить лишний символ `S`; 2) удалить лишний символ `e`; 3) вставить новый символ `l`.

## Пример. Сценарий использования функции LevenshteinDist

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

#### Выражение диаграммы

Обзор

В этом примере объединены названия продуктов из разных систем. В названиях продуктов не всегда используется одинаковое написание из-за опечаток, сокращений, пробелов и других вариаций. С помощью функции `LevenshteinDist` можно измерить сходство между двумя названиями продуктов и определить, какие из них, скорее всего, относятся к одному и тому же продукту, даже если названия не идентичны.

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.

Скрипт загрузки содержит следующее:

* Набор данных, который загружается в таблицу данных под именем `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/sense/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 |