코딩을 하다가 파이썬(Python)으로 두 문자열(단어)의 유사도(Similarity)를 계산해야할 일이 있어서 이를 어찌할까 검색해보다가 Stackoverflow 에서 고수분이 알려주신 테크닉을 여기에 적어보려고 한다.
두 문자열(단어) 유사도 계산
difflib은 파이썬 내장 모듈이다. 여기에 SequenceMatcher를 이용하면 두 단어의 유사도를 알 수 있다.
이때 두 단어의 유사도는 ratio라는 메서드를 이용하면 되는데 이를 이용하여 두 문자열(단어)의 유사도(Similarity)를 계산하는 함수를 만들었다.
from difflib import SequenceMatcher
def similar(a, b):
return SequenceMatcher(None, a, b).ratio()
이제 manana와 strawberry 중에서 banana랑 가장 비슷한 단어(문자열)은 무엇인지 확인해보려고 한다. 당연히 manana가 나와야한다.
a = 'banana'
b = 'manana'
c = 'strawberry'
print(b, similar(a,b))
print(c, similar(a,c))
예상대로 유사도가 제일 높은 manana가 banana 가장 비슷한 단어라는 것을 알 수 있다.
파이썬에 이렇게 유용한 내장 모듈과 함수가 있는지 처음알았다. 두고두고 써먹어야겠다. 그리고 difflib에는 어떤 함수들이 더 있는지 조사해봐야겠다.
참고자료
https://stackoverflow.com/questions/17388213/find-the-similarity-metric-between-two-strings
'프로그래밍 > Python' 카테고리의 다른 글
[Python] 리스트(튜플, 배열)에서 비복원(without replacement) 추출과 복원(with replacement) 추출하기 (402) | 2022.05.07 |
---|---|
[Python] 단어 집합(리스트, 튜플)에서 특정 단어와 가장 유사한 단어 찾기 difflib.get_close_matches (388) | 2022.05.01 |
[Python] iter함수와 itertools를 이용하여 메모리를 절약하면서 배열을 순서대로 그룹화(Grouping)하기 (417) | 2022.04.23 |
[Python] 순열(Permutation)과 조합(Combination) 구하기 - itertools (421) | 2022.04.22 |
[Python] 올림, 내림, 반올림(Ceil, Floor, Round) (398) | 2022.04.18 |
댓글