
RapidFuzz는 Levenshtein Distance 알고리즘을 활용해 문자열 유사도를 계산하는 Python 라이브러리입니다. C++로 개발되어 기존의 FuzzyWuzzy 라이브러리보다 훨씬 빠른 속도를 제공합니다.
고성능
메모리 효율성
다양한 문자열 매칭 알고리즘
pip install rapidfuzz
from rapidfuzz import fuzz
# 기본적인 문자열 유사도 계산
ratio = fuzz.ratio("hello world", "hello wold")
print(f"유사도: {ratio}") # 출력: 유사도: 95.2380....
# 부분 문자열 매칭
partial_ratio = fuzz.partial_ratio("hello world", "world")
print(f"부분 유사도: {partial_ratio}") # 출력: 부분 유사도: 100.0
from rapidfuzz import process
choices = ["python programming", "java programming", "c++ programming", "javascript"]
query = "pythn programing"
# 가장 유사한 문자열 찾기
results = process.extract(query, choices, limit=len(choices))
for match, score, index in results:
print(f"매칭: {match}, 점수: {score}")
from rapidfuzz.utils import default_process
from rapidfuzz import fuzz
# 대소문자 구분 없이 비교
text1 = "Hello World"
text2 = "hello world"
ratio = fuzz.ratio(text1, text2, processor=default_process)
print(f"전처리 후 유사도: {ratio}") # 출력: 전처리 후 유사도: 100.0
def search_products(query, product_list):
return process.extract(
query,
product_list,
scorer=fuzz.partial_ratio,
limit=5
)
products = [
"아이폰 13 프로",
"갤럭시 S22 울트라",
"아이폰 12",
"갤럭시 S21"
]
results = search_products("아이폰", products)
for product, score, _ in results:
print(f"제품: {product}, 매칭 점수: {score}")
def clean_duplicate_entries(entries):
unique_entries = []
for entry in entries:
# 유사도 90% 이상인 항목이 이미 있는지 확인
matches = process.extract(entry, unique_entries, limit=1)
if not matches or matches[0][1] < 90:
unique_entries.append(entry)
return unique_entries
data = ["신촌역", "신촌 역", "신촌역 (2호선)", "홍대입구역", "홍대 입구"]
cleaned_data = clean_duplicate_entries(data)
print("정제된 데이터:", cleaned_data)
기본적인 레벤슈타인 거리 기반 비교
from rapidfuzz import fuzz
# 기본 비교
ratio = fuzz.ratio("hello world", "hello wold") # 95.24
더 짧은 문자열이 긴 문자열의 어느 부분과 가장 잘 매칭되는지 계산
from rapidfuzz import fuzz
# 부분 문자열 매칭
ratio = fuzz.partial_ratio("hello world", "world") # 100.0
단어들을 정렬 후 비교
from rapidfuzz import fuzz
# 단어 순서 무관 비교
ratio = fuzz.token_sort_ratio("world hello", "hello world") # 100.0
공통 토큰과 나머지 토큰을 분리하여 비교
from rapidfuzz import fuzz
# 중복 단어 제거 후 비교
ratio = fuzz.token_set_ratio("hello hello world", "hello world") # 100.0
Token Sort Ratio와 Partial Ratio의 조합
from rapidfuzz import fuzz
# 정렬 후 부분 매칭
ratio = fuzz.partial_token_sort_ratio("hello world python", "world python") # 100.0
Token Set Ratio와 Partial Ratio의 조합
from rapidfuzz import fuzz
# 중복 제거 후 부분 매칭
ratio = fuzz.partial_token_set_ratio("hello hello world python", "world python") # 100.0
가중치가 적용된 빠른 비교
from rapidfuzz import fuzz
# 가중치 기반 비교
ratio = fuzz.WRatio("hello world", "hello wold") # 95
Quick Ratio - 빠른 비교
from rapidfuzz import fuzz
# 빠른 비교
ratio = fuzz.QRatio("hello world", "hello wold") # 95
RapidFuzz는 강력한 성능과 다양한 기능을 제공하는 문자열 매칭 라이브러리입니다. 특히, 한글 데이터 처리에서도 뛰어난 성능을 발휘하여 한국어 기반의 데이터 처리에도 매우 적합합니다.
RapidFuzz에서 사용하는 문자열 비교 알고리즘은 다양한 상황에 맞게 활용할 수 있도록 설계되었습니다. 앞으로 이 알고리즘들에 대해 조금 더 깊이 공부하며, 각 비교 방식의 원리, 계산 방법, 그리고 특징에 대해 정리해 보려고 합니다. 이를 통해 RapidFuzz의 매칭 메커니즘을 더 잘 이해하고, 실무에서 효과적으로 활용할 수 있는 방법을 탐구해 보겠습니다.
깃허브에도 동시에 예제 sample 코드가 같이 업로드 됩니다.
많은 관심 부탁드립니다.