LevenshteinDist - 스크립트 및 차트 함수
LevenshteinDist()는 두 문자열 사이의 Levenshtein 거리를 반환합니다. 이는 한 문자열을 다른 문자열로 변경하는 데 필요한 최소 단일 문자 편집 수(삽입, 삭제 또는 대체)로 정의됩니다. 이 함수는 퍼지 문자열 비교에 유용합니다.
구문:
LevenshteinDist(text1, text2)
반환 데이터 유형: 정수
예 | 결과 |
---|---|
LevenshteinDist('Kitten','Sitting') | 3을 반환합니다. |
개요
데이터 로드 편집기를 열고 아래의 로드 스크립트를 새 탭에 추가합니다.
로드 스크립트에는 다음이 포함됩니다.
-
-
데이터 테이블의 한 필드는 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 함수를 사용하면 두 제품 이름 사이의 유사성을 측정하고 이름이 동일하지 않더라도 어떤 이름이 같은 제품을 가리키는지 식별할 수 있습니다.
데이터 로드 편집기를 열고 아래의 로드 스크립트를 새 탭에 추가합니다.
로드 스크립트에는 다음이 포함됩니다.
-
-
-
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 |
Levenshtein 거리는 맞춤법 검사기, 광학 문자 인식 및 수정 시스템의 일부로 널리 사용되는 일종의 퍼지 매칭이며, 텍스트에 약간의 차이가 자주 발생하는 고객 데이터 관리, 재고 시스템 및 문서 처리 분야에서 사용됩니다.
로드 스크립트
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 | 굵게 | 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 | 엑스 | 1 | |
14 | 엑스 | - | 1 |
15 | 엑스 | 1 | 1 |