[Java] 두 문자열 간에 일치 정도 확인 하기 (Levenshtein)

2022-12-12


Photo by Windows on Unsplash


1. 방법

 

apache.commons.text 라이브러리에서 제공하는 LevenshteinDistance를 사용하면 두 문자열 간에 차이를 쉽게 구할 수 있다. 여기서 LevenshteinDistance는 편집 거리 알고리즘이라고 불리며, 두 문자열에 형태적 유사도를 측정하는 방법이다.

 

출처 : https://en.wikipedia.org/wiki/Levenshtein_distance

https://en.wikipedia.org/wiki/Levenshtein_distance

 

Levenshtein distance - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Computer science metric for string similarity In information theory, linguistics, and computer science, the Levenshtein distance is a string metric for measuring the difference between

en.wikipedia.org


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. 공식 레퍼런스

 

https://commons.apache.org/proper/commons-text/apidocs/org/apache/commons/text/similarity/LevenshteinDistance.html

 

LevenshteinDistance (Apache Commons Text 1.10.0 API)

An algorithm for measuring the difference between two character sequences. This is the number of changes needed to change one sequence into another, where each change is a single character modification (deletion, insertion or substitution). This code has b

commons.apache.org

 


메인 이미지 출처 : Photo by Windows on Unsplash