어떤 단어가 주어졌을 때, 완전히 동일한 단어가 아니라 해당 단어와 패턴이 비슷한 다른 단어들을 찾고 싶은 경우가 있습니다. 예를 들어 오타 교정이나 추천 검색어 기능을 만들 때 유용하게 활용할 수 있는데요. 이럴 때 파이썬 표준 라이브러리인 difflib 모듈의 get_close_matches 메서드를 사용하면 손쉽게 해결할 수 있습니다.
get_close_matches 메서드란?
get_close_matches는 difflib 모듈에 포함된 메서드로, 지정한 후보 목록(possibilities) 중에서 주어진 단어와 가장 유사한 항목들을 반환합니다. 기본 문법은 아래와 같습니다.
difflib.get_close_matches(word, possibilities, n, cutoff)
매개변수 설명
- word: 유사 항목을 찾고자 하는 기준 단어입니다.
- possibilities: 비교 대상이 되는 패턴(문자열)들의 목록입니다.
- n: 반환할 최대 유사 항목 수입니다. 반드시 0보다 커야 하며, 기본값은 3입니다.
- cutoff: 유사도 점수의 최소 기준값으로, 0부터 1 사이의 실수입니다. 이 값보다 낮은 점수를 받은 후보는 결과에서 제외됩니다. 기본값은 0.6입니다.
사용 예제
아래 예제에서는 기준 단어 'banana'와 비교할 패턴 목록을 준비한 뒤, get_close_matches 메서드를 적용하여 유사한 단어들을 추출합니다.
from difflib import get_close_matches
word = 'banana'
patterns = ['ana', 'nana', 'ban', 'ran', 'tan']
print('matched words:', get_close_matches(word, patterns))실행 결과
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
matched words: ['nana', 'ban', 'ana']
결과를 보면 'banana'와 패턴이 가장 비슷한 순서대로 'nana', 'ban', 'ana'가 반환된 것을 확인할 수 있습니다. 참고로 반환되는 항목들은 유사도 점수가 높은 순으로 정렬되며, n과 cutoff 값을 조절하면 원하는 개수와 정확도 수준의 결과를 얻을 수 있습니다.