RapidFuzz는 FuzzyWuzzy의 문자열 유사성 계산을 사용하는 Python 및 C++용 빠른 문자열 일치 라이브러리입니다. 그러나 RapidFuzz를 FuzzyWuzzy와 차별화하는 몇 가지 측면이 있습니다.
MIT 라이선스이므로 프로젝트에 어떤 라이선스를 선택하든 사용할 수 있지만 FuzzyWuzzy를 사용할 때는 GPL 라이선스를 채택해야 합니다.
FuzzyWuzzy에 포함되지 않은 hamming 또는 jaro_winkler와 같은 많은 string_metrics를 제공합니다.
대부분 C++로 작성되었으며, 게다가 동일한 결과를 제공하면서도 문자열 일치를 더욱 빠르게 수행할 수 있도록 알고리즘이 많이 개선되었습니다. 자세한 벤치마크는 설명서를 확인하세요.
partial_ratio
구현의 여러 버그 수정
fuzzywuzzy
의 대체품으로 크게 사용할 수 있습니다. 그러나 여기에 설명된 몇 가지 API 차이점이 있습니다.
파이썬 3.9 이상
Windows에서는 Visual C++ 2019 재배포 가능 패키지가 필요합니다.
RapidFuzz를 설치하는 방법에는 여러 가지가 있으며, 권장되는 방법은 pip
(Python 패키지 관리자) 또는 conda
(오픈 소스, 크로스 플랫폼, 패키지 관리자)를 사용하는 것입니다.
RapidFuzz는 다음과 같은 방법으로 pip
사용하여 설치할 수 있습니다.
pip 설치 rapidfuzz
MacOS(10.9 이상), Linux x86_64 및 Windows용으로 사전 구축된 RapidFuzz 바이너리(휠)가 있습니다. armv6l(Raspberry Pi Zero) 및 armv7l(Raspberry Pi)용 휠은 piwheels에서 사용할 수 있습니다.
✖️ 실패 "가져오기 오류: DLL 로드 실패"
Windows에서 이 오류가 발생하는 경우 C++ 라이브러리를 찾는 데 필요한 Visual C++ 2019 재배포 가능 패키지가 설치되지 않았기 때문일 가능성이 높습니다(C++ 2019 버전에는 2015, 2017 및 2019 버전이 포함됨).
RapidFuzz는 conda
사용하여 설치할 수 있습니다.
conda install -c conda-forge rapidfuzz
RapidFuzz는 저장소를 복제하여 소스 배포판에서 직접 설치할 수 있습니다. 이를 위해서는 C++17 가능 컴파일러가 필요합니다.
git clone --recursive https://github.com/rapidfuzz/rapidfuzz.gitcd rapidfuzz 핍 설치 .
몇 가지 간단한 기능이 아래에 나와 있습니다. 모든 기능에 대한 전체 문서는 여기에서 찾을 수 있습니다.
RapidFuzz 3.0.0에서는 기본적으로 문자열이 전처리되지 않습니다(영숫자가 아닌 모든 문자 제거, 공백 자르기, 모든 문자를 소문자로 변환). 즉, 문자는 같지만 대소문자("이것은 단어입니다", "이것은 단어입니다")가 다른 두 문자열을 비교할 때 유사성 점수 값이 다를 수 있으므로 이러한 문자열을 비교할 때 점수에 차이가 있을 수 있습니다. 이전 버전과 비교한 가치입니다. 전처리를 통한 문자열 일치의 몇 가지 예는 여기에서 찾을 수 있습니다.
RapidFuzz의 득점원은 fuzz
및 distance
모듈에서 찾을 수 있습니다.
> from rapidfuzz import fuzz> fuzz.ratio("이것은 테스트입니다", "이것은 테스트입니다!")96.55172413793103
> from rapidfuzz import fuzz> fuzz.partial_ratio("이것은 테스트입니다", "이것은 테스트입니다!")100.0
> from rapidfuzz import fuzz> fuzz.ratio("fuzzy wuzzy는 곰이었습니다", "wuzzy fuzzy는 곰이었습니다")90.9090909090909> fuzz.token_sort_ratio("fuzzy wuzzy는 곰이었습니다", "wuzzy fuzzy는 곰이었습니다")100.0
> from rapidfuzz import fuzz> fuzz.token_sort_ratio("fuzzy는 곰이었습니다", "fuzzy fuzzy는 곰이었습니다")84.21052631578947> fuzz.token_set_ratio("fuzzy는 곰이었습니다", "fuzzy fuzzy는 곰이었습니다")100.0# Returns 100.0 한 문자열이 다른 문자열의 하위 집합인 경우 긴 문자열의 추가 내용에 관계없이 string> fuzz.token_set_ratio("fuzzy는 곰이었지만 개가 아닙니다", "fuzzy는 곰이었습니다")100.0# 두 문자열에 명시적인 불일치가 있는 경우에만 점수가 감소합니다.> fuzz.token_set_ratio("fuzzy는 곰이었지만 개는 아니었어", "퍼지는 곰이었지만 고양이는 아니었어")92.3076923076923
> from rapidfuzz import fuzz> fuzz.WRatio("이것은 테스트입니다", "이것은 새로운 테스트입니다!!!")85.5> from rapidfuzz import fuzz, utils> # 영숫자가 아닌 문자("!")를 string> fuzz.WRatio("이것은 테스트입니다", "이것은 새로운 테스트입니다!!!", processor=utils.default_process) # 여기에서는 "이것은 새로운 테스트입니다!!!" "this is a new test"95.0>으로 변환됩니다. fuzz.WRatio("this is a test", "this is a new test")95.0> # 문자열을 소문자로 변환> fuzz.WRatio("this is a word" , "이것은 단어입니다")21.42857142857143> fuzz.WRatio("이것은 단어입니다", "이것은 단어입니다", processor=utils.default_process) # 여기서 "THIS IS A WORD"는 "this is a word"로 변환됩니다.100.0
> from rapidfuzz import fuzz> fuzz.QRatio("this is a test", "this is a new test!!!")80.0> from rapidfuzz import fuzz, utils> # 영숫자가 아닌 문자("!")를 string> fuzz.QRatio("이것은 테스트입니다", "이것은 새로운 테스트입니다!!!", processor=utils.default_process)87.5> fuzz.QRatio("이것은 테스트입니다", "this is a new test")87.5> # 문자열을 소문자로 변환> fuzz.QRatio("this is a word", "THIS IS A WORD")21.42857142857143> fuzz.QRatio("this is a word", "THIS IS A WORD", 프로세서=utils.default_process)100.0
프로세스 모듈은 문자열을 문자열 목록과 비교하도록 만듭니다. 이는 일반적으로 Python에서 직접 채점기를 사용하는 것보다 성능이 더 좋습니다. 다음은 RapidFuzz의 프로세서 사용에 대한 몇 가지 예입니다.
> rapidfuzz 가져오기 프로세스에서 fuzz>Choices = ["Atlanta Falcons", "New York Jets", "New York Giants", "Dallas Cowboys"]> process.extract("new york jets",Choices, Scorer=fuzz. WRatio, 한도=2)[('New York Jets', 76.92307692307692, 1), ('New York Giants', 64.28571428571428, 2)]> process.extractOne("cowboys",Choices, Scorer=fuzz.WRatio)('Dallas Cowboys', 83.07692307692308, 3)> # 전처리> from rapidfuzz 가져오기 프로세스, fuzz, utils> process.extract( "뉴욕 제트기", 선택, Scorer=fuzz.WRatio, 제한=2, processor=utils.default_process)[('New York Jets', 100.0, 1), ('New York Giants', 78.57142857142857, 2)]> process.extractOne("cowboys", 선택, Scorer=fuzz.WRatio, processor=utils.default_process)('Dallas Cowboys', 90.0, 3)
프로세서에 대한 전체 문서는 여기에서 찾을 수 있습니다.
다음 벤치마크는 RapidFuzz와 FuzzyWuzzy 간의 빠른 성능 비교를 제공합니다. 문자열 측정항목에 대한 더 자세한 벤치마크는 설명서에서 확인할 수 있습니다. 이 간단한 비교를 위해 길이가 10인 10,000개의 문자열 목록을 생성했습니다. 이는 이 목록의 100개 요소 샘플과 비교됩니다.
단어 = ["".join(random.choice(string.ascii_letters + string.digits) for _ in range(10))for _ in range(10_000) ]샘플 = 단어[:: len(단어) // 100]
첫 번째 벤치마크는 다음과 같은 방식으로 Python에서 직접 사용할 때 FuzzyWuzzy 및 RapidFuzz의 득점자 성능을 비교합니다.
샘플의 샘플:단어의 단어:scorer(샘플, 단어)
다음 그래프는 각 채점자가 초당 처리하는 요소 수를 보여줍니다. 득점자마다 성능 차이가 큽니다. 그러나 RapidFuzz에서는 각 득점자가 더 빠릅니다.
두 번째 벤치마크에서는 득점원을 cdist와 함께 사용했을 때의 성능을 다음과 같은 방법으로 비교합니다.
cdist(샘플, 단어, 득점자=득점자)
다음 그래프는 각 채점자가 초당 처리하는 요소 수를 보여줍니다. RapidFuzz에서는 cdist
와 같은 프로세서를 통해 득점자를 사용하는 것이 직접 사용하는 것보다 훨씬 빠릅니다. 그렇기 때문에 가능할 때마다 사용해야 합니다.
작업에 RapidFuzz를 사용하고 있고 프로젝트를 지원하기 위해 약간의 이익을 돌려주고 싶다면 GitHub 후원자 또는 PayPal을 통해 돈을 보내 이 훌륭한 라이브러리의 유지 관리를 위한 자유 시간을 구입하는 데 사용할 수 있습니다. 소프트웨어의 버그를 수정하고, 코드 기여를 검토 및 통합하고, 기능과 문서를 개선하거나, 가끔씩 심호흡을 하고 차 한잔을 마시는 것입니다. 귀하의 지원에 감사드립니다.
GitHub 후원자 또는 PayPal을 통해 프로젝트를 지원하십시오.
RapidFuzz는 GPL 라이선스를 채택하지 않고도 모든 사람이 사용할 수 있어야 한다고 믿기 때문에 MIT 라이선스에 따라 라이선스가 부여됩니다. 이것이 바로 라이브러리가 MIT 라이센스를 받은 이전 버전의 fuzzywuzzy를 기반으로 하는 이유입니다. fuzzywuzzy의 이전 버전은 여기에서 찾을 수 있습니다.