본문으로 바로가기

Compare 2 Strings and return similarity

category Studies/Python 2022. 3. 19. 16:24

이미지를 스크래핑해오는 도중 문제가 생겼다.

이모티콘의 이름이 변경된 경우, 다음의 코드 사용에 오류가 발생하는 것이다.

soup.find("img",attrs={"data-regex":f'{name}'})['src']

sereis 에서의 name 과 image 에서의 name 이 달라서 생기는 특수한 경우다.

 

그래서 images 에서의 name 을 전부 받아온 후 sereis 에서의 name과 비교해 

가장 유사한 것을 image로 사용하는 코딩을 해야하는 필요성을 느꼈다.

 

그래서 두개의 String 변수 간의 유사성을 비교하는 코딩이 필요했는데, 이에 관해 아주 좋은 오픈소스가 있었다.

 

from difflib import SequenceMatcher

def similar(a, b):
    return SequenceMatcher(None, a, b).ratio()

difflib 라는 오픈소스로 SequenceMatcher 라는 메소드가 비율을 return 해주는 아주 좋은 오픈소스다.

사용 결과는 다음과 같다.

>>> similar("Apple","Appel")
0.8
>>> similar("Apple","Mango")
0.0

 

difflib 를 이용하여 [ [아이템,유사도] , [아이템,[유사도] ] 리스트를 만든 후 

가장 높은 유사도의 String을 찾는 것은 다음의 람다 함수를 이용하였다.

nst = [ [1001, 0.0009], [1005, 0.07682], [1201, 0.57894], [1677, 0.0977] ]
idx, max_value= max(nst, key=lambda item: item[1])

| 참조

https://stackoverflow.com/questions/6690739/high-performance-fuzzy-string-comparison-in-python-use-levenshtein-or-difflib