게스탈트 패턴 매칭
Gestalt Pattern MatchingGestalt Pattern [1]Matching은 Ratcliff/Obershelp Pattern [2]Recognition이라고도 하며 두 문자열의 유사성을 판별하기 위한 문자열 매칭 알고리즘입니다.그것은 1983년에 John W. Ratcliff와 John A에 의해 개발되었다. Obershelp는 1988년 [2]7월에 닥터 돕스 저널에 발표되었습니다.
알고리즘.
의 S1S_})과 })의 유사성은 일치하는 수 을 두 문자열의 총 문자 수로 나눈 값으로 계산됩니다.일치하는 문자는 LCS [2]양쪽에 있는 불일치 영역의 일치하는 문자 수에 더해 최장 공통 서브스트링(LCS)으로 정의됩니다.
여기서 유사도 메트릭은 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、
- {+
레퍼런스
- ^ a b c d difflib : Python 매뉴얼 내의 델타 계산 도우미
- ^ a b c 미국 국립표준기술원(National Institute of Standards and Technology)의 Ratcliff/Overshelp 패턴 인식
- ^ Ilya Ilyankou: 철자 검사에서 Jaro-Winkler 알고리즘과 Ratcliff/Obershelp 알고리즘 비교, 2014년 5월(PDF)
- ^ Pythons Sequence Matcher는 어떻게 작동합니까?stackoverflow.com 에서 참조해 주세요.
- ^ Python 3.7.0, difflib.py Lines 38-41 및 676-686에서 차용
추가 정보
- John W. Ratcliff와 David Metzener: 패턴 매칭: 게슈탈트 접근법, 돕스 저널, 제46호, 1988년 7월