티스토리 뷰

다양한 라이브러리를 활용하여 문자열 유사도를 측정할 수 있지만, 각 라이브러리마다 성능과 결과가 다를 수 있음

diff, fuzzywuzzy, rapidfuzz 라이브러리를 사용하여 한글 문자열 유사도를 비교함

비교 대상 라이브러리

  1. diff (공식문서: https://docs.python.org/3/library/difflib.html#difflib.get_close_matches)
  2. fuzzywuzzy (공식문서: https://github.com/seatgeek/thefuzz)
  3. rapidfuzz (공식문서: https://rapidfuzz.github.io/RapidFuzz/Usage/process.html#rapidfuzz.process.extractOne)

코드 비교

  • df라는 데이터프레임은 기관코드 데이터(code.go.kr)로 전체기관명에 대한 데이터

1. diff

from difflib import get_close_matches

cutoff = 0.65
get_close_matches("서울요양원", df['전체기관명'], n=1, cutoff=cutoff)

diff 라이브러리는 간단한 문자열 매칭을 제공하지만, 매칭되는 값이 없는 경우 빈값을 반환함

2. fuzzywuzzy

from fuzzywuzzy import process

process.extractOne("서울요양원", df['전체기관명'], score_cutoff=cutoff*100)

fuzzywuzzy는 Levenshtein Distance를 기반으로 문자열 유사도를 측정합니다. 정확도는 높지만, 속도 면에서 느릴 수 있습니다. 아래는 실행 결과입니다:

('국민건강보험공단 분부 서울요양원', 90, 112425)

3. rapidfuzz

from rapidfuzz import process

process.extractOne("서울요양원", df['전체기관명'], score_cutoff=cutoff*100)

rapidfuzz는 fuzzywuzzy와 유사한 기능을 제공하지만, 더 빠른 성능을 자랑합니다. 실행 결과는 아래와 같습니다:

('국민건강보험공단 분부 서울요양원', 90.0, 112425)

실행 시간 비교

 

diff 라이브러리는 매칭된 값이 없고, rapidfuzz가 월등히 빠른 속도를 보여줌

결론

rapidfuzz가 높은 정확도와 빠른 속도를 제공함. 단, 띄어쓰기가 포함될 경우, diff의 성능이 더 나을 수 있음. 비교대상에 따라 적절히 테스트 해보는 것을 추천함

diff는 게슈탈트 알고리즘을 사용하고, rapidfuzz는 레벤슈타인 알고리즘을 사용하므로 작동방식이 다름

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함