Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python difflib로 목록에서 입력 문자열과 유사한 항목 찾는 방법

어떤 단어가 주어졌을 때, 완전히 동일한 단어가 아니라 해당 단어와 패턴이 비슷한 다른 단어들을 찾고 싶은 경우가 있습니다. 예를 들어 오타 교정이나 추천 검색어 기능을 만들 때 유용하게 활용할 수 있는데요. 이럴 때 파이썬 표준 라이브러리인 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 값을 조절하면 원하는 개수와 정확도 수준의 결과를 얻을 수 있습니다.