2022-12-12
1. 방법
apache.commons.text 라이브러리에서 제공하는 LevenshteinDistance를 사용하면 두 문자열 간에 차이를 쉽게 구할 수 있다. 여기서 LevenshteinDistance는 편집 거리 알고리즘이라고 불리며, 두 문자열에 형태적 유사도를 측정하는 방법이다.
https://en.wikipedia.org/wiki/Levenshtein_distance
2. 코드
직접 구현하는 방법도 있지만 이미 라이브러리 형태로 잘 만들어져 있기 때문에 사용만 하면 된다. 아래의 소스코드는 유사 정도를 % 형태로 구하는 코드이며, 단순히 LevenshteinDistance 구하는 거라면 아래코드에서 double temp = ld.apply(a, b); 이부분 까지만 사용하면 된다.
import org.apache.commons.text.similarity.LevenshteinDistance;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class StringTest {
@Test
void Levenshtein() {
String a = "test123";
String b = "test1234";
int maxLen = a.length() > b.length() ? a.length() : b.length();
LevenshteinDistance ld = new LevenshteinDistance();
double result = 0;
double temp = ld.apply(a, b);
result = (maxLen - temp) / maxLen;
System.out.println();
if(result > 0.51) {
System.out.println("half over");
System.out.println(result);
}else {
System.out.println("half not over");
System.out.println(result);
}
//출력 결과
// half over
// 0.875
}
}
3. 빌드 정보
gradle
// https://mvnrepository.com/artifact/org.apache.commons/commons-text
implementation group: 'org.apache.commons', name: 'commons-text', version: '1.10.0'
maven
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-text -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.10.0</version>
</dependency>
4. 공식 레퍼런스