게스탈트 패턴 매칭

Gestalt Pattern Matching

Gestalt Pattern [1]Matching은 Ratcliff/Obershelp Pattern [2]Recognition이라고도 하며 두 문자열유사성을 판별하기 위한 문자열 매칭 알고리즘입니다.그것은 1983년에 John W. RatcliffJohn A에 의해 개발되었다. Obershelp는 1988년 [2]7월에 닥터 돕스 저널에 발표되었습니다.

알고리즘.

S1S_})과 })의 유사성은 일치하는 두 문자열의 총 문자 수로 나눈 값으로 계산됩니다.일치하는 문자는 LCS [2]양쪽에 있는 불일치 영역의 일치하는 문자 수에 더해 최장 공통 서브스트링(LCS)으로 정의됩니다.

[3]

여기서 유사도 메트릭은 0과 1 사이의 값을 가질 수 있습니다.

값 1은 두 문자열의 완전한 일치를 나타냅니다.값 0은 일치하지 않고 공통 문자도1개도 없음을 나타냅니다.

샘플

S1. W I K I M E D I A
S2. W I K I M A N I A

가장 긴 공통 서브스트링은WIKIM(회색)은 5글자입니다.왼쪽에는 더 이상의 서브스트링이 없습니다.오른쪽의 일치하지 않는 서브스트링은EDIA그리고.ANIA이들은 다시 가장 긴 공통 서브스트링을 가지고 있다.IA길이 2의 (다크 그레이)유사도 메트릭은 다음 항목에 의해 결정됩니다.

특성.

복잡성

알고리즘의 실행시간은 의 경우 O 3 O 인 경우 O2 O입니다.컴퓨팅 방법을 변경함으로써 실행 시간을 대폭 향상시킬 [1]수 있다.

가환성

Gestalt Pattern Matching Algorithm이 가환적이지 않음을 알 수 있습니다.

샘플

두 줄에 대해서

그리고.

측정 결과

o ( , S) (\ } ( _ { , S { )는 24 \ \ { } { } )입니다.GESTALT P,A,T,E및 을 위해
o ( , S) (\ D { ( S _ { , S _ {1} )은 26 ( \ style { { } )입니다.GESTALT P,R,A,C,I.

적용들

이 알고리즘은 Python의 기반이 되었다. difflib버전 2.[1]1에서 도입된 라이브러리입니다.이 유사성 메트릭의 불리한 런타임 동작으로 인해, 세 가지 방법이 구현되었다.이들 중 2개는 더 빠른 실행 [1]시간에 상한을 반환합니다.가장 빠른 변형은 두 개의 서브스트링의 [5]길이만 비교합니다.

( S , ) 1+ ( \ D { } = ( , ) {+ ,
# Python에서의 Drqr 구현 방어하다 진짜_빠른_빠른_실행(s1: 스트레이트, s2: 스트레이트) -> 흘러가다:     ratio()의 상한을 매우 빨리 반환한다."""     l1, l2 = (s1), (s2)     길이 = l1 + l2      한다면 것은 아니다. 길이:         돌아가다 1.0      돌아가다 2.0 * (l1, l2) / 길이 

두 번째 상한은 S2에서 하는 모든 사용 S 1 { 합계를 두 문자열의 길이로 나누어서 계산하지만 시퀀스는 무시됩니다.

+
# Python에서의 Dqr 구현 방어하다 재빠르다(s1: 스트레이트, s2: 스트레이트) -> 흘러가다:     "비율()의 상한을 비교적 빨리 반환합니다."""     길이 = (s1) + (s2)      한다면 것은 아니다. 길이:         돌아가다 1.0      교차하다 = 수집품.계산대(s1) & 수집품.계산대(s2)     일치하다 = (교차하다.가치())     돌아가다 2.0 * 일치하다 / 길이 

일반적으로 다음 사항이 적용됩니다.

D o r D 1 \ \ D _ { } \ D _ { qr } \ D _ { rqr } \ 1
{+

레퍼런스

  1. ^ a b c d difflib : Python 매뉴얼 내의 델타 계산 도우미
  2. ^ a b c 미국 국립표준기술원(National Institute of Standards and Technology)의 Ratcliff/Overshelp 패턴 인식
  3. ^ Ilya Ilyankou: 철자 검사에서 Jaro-Winkler 알고리즘과 Ratcliff/Obershelp 알고리즘 비교, 2014년 5월(PDF)
  4. ^ Pythons Sequence Matcher는 어떻게 작동합니까?stackoverflow.com 에서 참조해 주세요.
  5. ^ Python 3.7.0, difflib.py Lines 38-41 및 676-686에서 차용

추가 정보

  • John W. Ratcliff와 David Metzener: 패턴 매칭: 게슈탈트 접근법, 돕스 저널, 제46호, 1988년 7월

「 」를 참조해 주세요.