문자열 유사성 알고리즘 비교

연구 및 테스트

우리는 문자열을 비교하기 위해 여러 알고리즘을 테스트했으며 우리의 필요에 더 잘 맞는 알고리즘을 선택했습니다.

알고리즘 테스트 테이블

우리는 문자열 ㅏ 과 문자열 비 다른 알고리즘에 대한 메트릭을 가지고 있습니다.

문자열 유사성에 대한 규칙은 대소문자마다 다를 수 있습니다. “틈새”와”치엔”을 비슷한 것으로 간주하려는 경우 아나그램을 감지하는 문자열 유사성 알고리즘을 사용합니다. 우리의 경우는 아닙니다. “틈새 시장”이라는 앱과 다른”치엔”이라는 앱은 완전히 다른 두 앱일 가능성이 큽니다.

몇 가지 브레인 스토밍 및 연구 후 우리는 우리의 경우에 도움이 될 몇 가지 알고리즘 방법을 내놓았다. 코사인 알고리즘은 예를 들어 아나그램(“틈새”및”치엔”)에서 1(유사한 문자열)의 색인으로 이어지는 문자 순서를 고려하지 않는 것처럼 우리에게 관련이없는 것으로 판명되었습니다.

여기에 우리가 발견 한 것입니다:

레벤슈타인 알고리즘

레벤슈타인 거리는 한 단어를 다른 단어로 변경하는 데 필요한 최소 단일 문자 편집 횟수이므로 결과는 문자열 길이에 민감한 양의 정수입니다. 패턴을 그리는 것이 더 어려워집니다.

예,

  • “미녀”와”미녀”사이의 레벤슈타인 거리는 3
  • “미녀”와”미녀”사이의 레벤슈타인 거리는 3
  • 우리 인간에게는”미녀”/”미녀”쌍이”푸”/”바”쌍보다 훨씬 더 유사합니다. 그러나 수평선 거리는 동일합니다.

여기서 사용하는 메트릭은 레벤슈타인 거리(1/레벤슈타인 거리)의 역수이므로 결과는 백분율이며 우리가 더 쉽게 읽을 수 있습니다. 그러나 위에서 언급 한 문제는 동일하게 유지되었습니다.

여기서 1 은 동일한 문자열을 비교 한 결과이며,”와우미폰”과”와우만드로이드”는 0.167 의 유사성을 갖습니다. “치엔”과”틈새”의 유사성은 0.25 입니다.적은 편집이”틈새”에”틈새”에서 얻을 필요가 있기 때문에보기 치엔/틈새의 레벤 슈타인 알고리즘의 관점에서 그래서”와우”에서”와우”로 얻는 것보다,”와우”에”와우”보다 더 유사하다.

트라이 그램 비교

트라이 그램 알고리즘은 엔-그램,연속 시퀀스 엔(이 경우 3 개)주어진 샘플의 항목. 이 경우 응용 프로그램 이름은 샘플이고 문자는 항목입니다.
그래서 시퀀스”마사”는 4 개의 트라이 그램을 가지고 있습니다.

트라이 그램 방법을 사용하여 두 문자열을 비교할 수 있습니다.

예를 들어”마사”와 오타,”마르타”와 같은 단어를 복용하고,우리는 자신의 트라이 그램을 계산할 수 있습니다:

트라이 그램”마사”{3 월 아트 그쪽으로}

트라이 그램”마르타”{2429>

유사성을 측정하기 위해 우리는 두 문자열에서 일치하는 트라이 그램의 수를 나눕니다.}고유 트라이 그램의 수에 의해: 7{3 월 아트 타아르 타아르 타아르 타아르 타아르 타아르 타아르 타아르}

The result is 1/7 = 14%

외부 문자의 단점(동일한 트라이 그램으로 시작하고 끝나는 문자열의 유사성을 다소 강화하기 위해)의 균형을 맞추기 위해 문자열을 양쪽에 공백으로 패딩하여 이러한 경우를 세 개 더 트라이 그램”_마”,”하_”및”타_”.모든 고유 트라이 그램의 수는 최대 2{_마마 월}
그 일을하는 데,일치하는 트라이 그램의 수는 다음과 같습니다: 2018 년 11 월 1 일}

The result is now 2/9 = 22%

이 방법을 사용하여”트위터 버전 1″과”트위터 버전 2″를 비교합니다.

일치하는 트라이 그램의 수:7
모든 고유 트라이 그램의 수:11}

The result is 7/11 = 63%

문자열을 비교하는 트라이 그램 방법의 한계는 하나(또는 두 개)와 짧은 문자열입니다..)다른 트라이 그램은 긴 트라이 그램보다 낮은 유사성을 생성하는 경향이 있습니다.

이것이 우리가 0 을 얻는 방법입니다.그들은 더 다른 트라이 그램을 가지고 있기 때문에”와우만드로이드”와”와우미폰”사이의 유사성.모든 고유 트라이 그램의 수:20

문자열 길이에 강한 의존성이 있기 때문에,그것은 우리를 위해 좋은 비교를 산출하지 않습니다.

자로-윙클러 알고리즘

“에 컴퓨터 과학 및 통계,자로-윙클러 거리 두 시퀀스 사이의 편집 거리를 측정하기위한 문자열 메트릭입니다.

비공식적으로 두 단어 사이의 자로 거리는 한 단어를 다른 단어로 변경하는 데 필요한 최소 단일 문자 조옮김 수입니다.

자로-윙클러 거리는 접두사 배율을 사용하여 설정된 접두사 길이에 대해 처음부터 일치하는 문자열에 더 유리한 등급을 부여합니다”

근원:위키 백과.

동일한 접두사를 가진 단어에”더 많은 중요성”을 부여하면 자로-윙클러 거리가 우리의 사용 사례에서 매우 흥미로운 것처럼 보입니다.

자로 거리 공식 처음부터 시작,여기에 어떻게 작동. 2429>

두 시퀀스 사이의 자로 거리 에스 1 과 에스 2 에 의해 정의됩니다.:

자로 거리 공식

/에스 1|첫 번째 문자열의 길이
|에스 2|두 번째 문자열의 길이

예와 비교한다. “마사”와”마르타”를 보자.

m = 6
t = 2/2 =1 (2 couples of non matching characters, the 4-th and 5-th) { t/h ; h/t }
|s1| = 6
|s2| = 6

그냥 숫자를 대체하여 공식,우리는 얻을:

dj = (⅓) ( 6/6 + 6/6 + (6–1)/6) = ⅓ 17/6 = 0,944Jaro distance = 94,4%

이제 우리는 자로 거리가 무엇인지 알고 자로-윙클러 거리로 점프합시다.

이 Jaro-Winkler 유사성은 사용하는 접두어 규모 p 을 제공하는 더 유리한 평과 일치하는 문자열로 시작 부분에서 세트를 위해 접두사 length l.

p 은 일정한 크기 조절 요인이 얼마나 많은 점수를 조정 위쪽으로는 일반적인 접두어. 이 상수의 표준 값은 윙클러 작업이다 피=0.1.

엘 문자열의 시작 부분에 공통 접두사의 길이(최대 4 자)입니다.

“마르타”의 예를 들어,접두사 길이는 엘=3(“3 월”을 의미 함)입니다. 우리는 도착:

dw = 0,944 + ( (0,1*3)(1–0,944)) = 0,944 + 0,3*0,056 = 0,961Jaro-Winkler distance = 96,1%

자로 윙클러 공식을 사용하여 우리는 자로 거리에서 94%의 유사성에서 96%로 이동합니다.우리의 경우,유사한 애플 리케이션의 대부분은 같은 접두사(“트위터 버전 1″대”트위터 버전 2″또는”와우”대”와우 안드로이드”등)로 시작합니다. 위의 알고리즘 테스트 테이블을 참조하십시오). 그래서 고려해야 할 중요한 기준이다.

답글 남기기

이메일 주소는 공개되지 않습니다.