파이썬(Python)&판다스(Pandas)&Polars

[Python&Pandas] 유사한 문자열을 매칭하는 파이썬 라이브러리(difflib)

송채채 2024. 1. 4. 14:35

Python에서는 difflib 라이브러리와 pandas 라이브러리를 활용하여 비슷한 문자열을 매칭할 수 있다.

데이터프레임에서 difflib을 사용한 문자열 매칭

예를 들어 df1의 '주소' 컬럼이 있고, '서울특별시 관악구 남부순환로'라는 값이 있다.
그리고, 내가 매칭하려는 값은 '서울특별시 남부순환로'라면, str.contains는 띄어쓰기를 포함하기 때문에 찾을 수 없다.
difflib 라이브러리는 시퀀스 데이터를 비교하고 찾는 데에 사용됨. 특히 get_close_matches 함수는 비슷한 문자열을 찾을 수 있다.

import difflib
import pandas as pd

# 가상의 데이터프레임 생성
data = {'주소': ['서울특별시 관악구 남부순환로', '서울특별시 강남구 테헤란로', '부산광역시 해운대구 송정해변로']}
df1 = pd.DataFrame(data)

# 매칭하려는 값
target_value = '서울특별시 남부순환로'

# difflib을 사용하여 유사한 문자열 찾기
matched_values = difflib.get_close_matches(target_value, df1['주소'], n=1, cutoff=0.8)

if matched_values:
    result_df = df1[df1['주소'] == matched_values[0]]
    print(result_df)
else:
    print("일치하는 문자열이 없습니다.")

위 코드에서 get_close_matches 함수는 target_stringdf['주소']의 유사성을 비교하여 가장 유사한 문자열을 찾아준다. cutoff 매개변수는 일치하는 정도를 결정하는 임계값이다. 기본적으로 0.6로 정의되어 있지만, 유사도를 높여서 0.8로 설정함

df['주소'] == matched_strings[0]를 사용하여 데이터프레임을 필터링하면, 일치하는 행만 추출할 수 있다.

  

  

    

  

difflib 참고문서: https://docs.python.org/ko/3/library/difflib.html

`difflib.get_close_matches(word, possibilities, n=3, cutoff=0.6)`
최상의 “충분히 좋은” 일치의 리스트를 반환합니다. word는 근접 일치가 목표로 하는 시퀀스(일반적으로 문자열)며, possibilities는 word와 일치시킬 시퀀스의 리스트입니다 (일반적으로 문자열의 리스트).

선택적 인자 n(기본값 3)은 반환할 근접 일치의 최대 개수입니다; n는 0보다 커야 합니다.

선택적 인자 cutoff(기본값 0.6)는 [0, 1] 범위의 float입니다. word와의 유사성 점수가 이 값보다 적은 possibilities는 무시됩니다.

possibilities 중에서 가장 좋은 (최대 n 개의) 일치가 리스트로 반환되는데, 유사성 점수로 정렬되어 있고 가장 유사한 것이 먼저 나옵니다.

>>>
get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
import keyword
get_close_matches('wheel', keyword.kwlist)
['while']
get_close_matches('pineapple', keyword.kwlist)
[]
get_close_matches('accept', keyword.kwlist)
['except']
반응형