게슈탈트 패턴 매칭
Gestalt pattern matchingGestalt 패턴 [1]매칭은 Ratcliff/Obershelp 패턴 [2]인식으로도 사용되며 두 문자열의 유사성을 확인하기 위한 문자열 매칭 알고리즘입니다.그것은 존 W. 래트클리프와 존 A에 의해 1983년에 개발되었습니다. 1988년 [2]7월에 닥터 돕 저널에 발표되었습니다.
알고리즘.
두 과S2({2}})의 유사성은 하는 Km({m})의 두 배를 두 문자열의 총 문자 수로 나누어 계산하는 공식에 의해 결정됩니다.일치 문자는 가장 긴 공통 하위[3] 문자열과 가장 긴 공통 하위 [2][4]문자열 양쪽의 일치하지 않는 영역에서 재귀적으로 일치하는 문자 수로 정의됩니다.
여기서 유사성 메트릭은 0과 1 사이의 값을 취할 수 있습니다.
값 1은 두 문자열의 완전 일치를 나타내는 반면, 값 0은 일치하는 문자가 없고 공통 문자가 하나도 없다는 것을 의미합니다.
샘플
에스1 | W | I | K | I | M | E | D | I | A |
---|---|---|---|---|---|---|---|---|---|
에스2 | W | I | K | I | M | A | N | I | A |
가장 긴 공통 부분 문자열은 다음과 같습니다.WIKIM
(라이트 그레이)(5자 포함).왼쪽에는 더 이상 하위 문자열이 없습니다.오른쪽에 있는 일치하지 않는 서브스트링은EDIA
그리고.ANIA
그들은 다시 가장 긴 공통 부분 문자열을 가집니다.IA
(진회색) 길이 2.유사성 메트릭은 다음과 같이 결정됩니다.
특성.
Ratcliff/Obers 도움말 일치 문자는 지정된 문자열의 가장 긴 공통 하위 순서와 상당히 다를 수 있습니다.를 들어 }= = 는 { ccccccccccc\ccccccc\\c\c\c\c\c\cccc하위 문자열 및 발생한 공통 문자가 없으며 마찬가지로 왼쪽으로 ({{m}=5로 . 그러나 및 의 긴 공통 시퀀스는() ( ( ( ) () ( 길이가입니다
복잡성
알고리즘의 실행 은 최악의 경우 O 인 O})입니다.컴퓨팅 방법을 변경함으로써 실행 시간을 [1]크게 향상시킬 수 있습니다.
교환 성질
게슈탈트 패턴 매칭 알고리즘의 파이썬 라이브러리 구현은 교환적이지 [5]않습니다.
- 샘플
두 줄에 대해
그리고.
에 대한 미터법 결과
- ( {{ 는 하위 문자열이 있는
GESTALT P
,A
,T
,E
에 대해서도 - ( {\ 메트릭은 문자열이 있는 {\
GESTALT P
,R
,A
,C
,I
.[why?]
적용들
파이썬 difflib
버전 2.[1]1에서 소개된 라이브러리는 Ratcliff-Obershelp 알고리즘보다 앞선 유사한 알고리즘을 구현합니다.이 유사성 메트릭의 바람직하지 않은 런타임 동작으로 인해 세 가지 방법이 구현되었습니다.그 중 두 개는 더 빠른 실행 [1]시간에 상한을 반환합니다.가장 빠른 변형은 두 하위 [6]문자열의 길이만 비교합니다.
- ( {\displaystyle }=+
두 번째 상한은 에서 하는 모든 된 문자 S1({ S_{의 합의 두 배를 계산하지만 시퀀스는 무시됩니다.
- [인증 필요]
Python에서의 Dqr 구현 디프 재빠른(s1: 스트르, s2: 스트르) -> 흘러가다: "" 비교적 빨리 상한선()을 반환합니다.""" 길이 = 렌(s1) + 렌(s2) 한다면 것은 아니다. 길이: 돌아가다 1.0 교차하는 = 소장품.계산대(s1) & 소장품.계산대(s2) 성냥 = 합(교차하는.가치()) 돌아가다 2.0 * 성냥 / 길이
일반적으로 다음 사항이 적용됩니다.
- ≤ ≤ ≤ ≤ D 1 { \ 0 \ D_ D_ 1 및
- +
레퍼런스
- ^ a b c d difflib : Python 문서 내 델타 계산을 위한 도우미
- ^ a b c 국립표준기술원 Ratcliff/Obershelp 패턴 인식
- ^ 두 개의 문자열이 여러 개의 가장 긴 공통 하위 문자열을 가질 수 있지만, Ratcliff(1988)는 분명히 하나만 있다고 가정합니다.
- ^ 일리야 일리안쿠: 철자 검사에서 Jaro-Winkler와 Ratcliff/Obershelp 알고리즘 비교, 2014년 5월(PDF)
- ^ Pythons Sequence Matcher는 어떻게 작동합니까?stackoverflow.com 에서
- ^ 파이썬 3.7.0, difflib.py 라인 38–41 및 676–686에서 차용
진일보한 내용
- Ratcliff, John W.; Metzener, David (July 1988). "Pattern Matching: The Gestalt Approach". Dr. Dobb's Journal (46).