Today's

길을 나서지 않으면 그 길에서 만날 수 있는 사람을 만날 수 없다

파이썬 스크립트

Python에서 문자열 유사도 검색 방법

Billcorea 2024. 11. 19. 15:46
반응형

Python에서 문자열 유사도 검색 방법

문자열 유사도 검색은 두 문자열이 얼마나 유사한지를 판단하는 중요한 작업입니다. 이는 텍스트 마이닝, 자연어 처리, 데이터 정제 등 다양한 분야에서 사용됩니다. 이번 포스트에서는 Python을 사용하여 문자열 유사도를 측정하는 여러 가지 방법을 소개하고, 각 방법의 사용 예제를 제공하겠습니다.

## 1. Levenshtein Distance

**Levenshtein 거리**는 두 문자열 사이의 최소 편집 거리를 계산하는 방법입니다. 이 거리는 삽입, 삭제, 대체 등의 편집 연산을 통해 한 문자열을 다른 문자열로 변환하는 최소 연산 횟수를 의미합니다. `python-Levenshtein` 라이브러리를 사용하여 이를 구현할 수 있습니다.

```python
import Levenshtein

str1 = "hello"
str2 = "hallo"
distance = Levenshtein.distance(str1, str2)
print(f"Levenshtein Distance: {distance}")
```

위 예제에서는 "hello"와 "hallo" 사이의 Levenshtein 거리를 계산합니다.

## 2. SequenceMatcher (difflib)

Python의 표준 라이브러리인 `difflib`을 사용하여 문자열 간의 유사성을 비교할 수 있습니다. `SequenceMatcher` 클래스는 두 문자열 간의 유사성을 측정하는 편리한 방법을 제공합니다.

```python
from difflib import SequenceMatcher

str1 = "hello"
str2 = "hallo"
ratio = SequenceMatcher(None, str1, str2).ratio()
print(f"SequenceMatcher Ratio: {ratio}")
```

이 예제에서는 "hello"와 "hallo"의 유사도를 0에서 1 사이의 비율로 계산합니다.

## 3. Jaro-Winkler Similarity

**Jaro-Winkler 유사도**는 Levenshtein 거리와 유사하지만, 문자열의 접두어가 동일한 경우에 더 높은 유사도를 부여하는 알고리즘입니다. `jellyfish` 라이브러리를 사용하여 이를 구현할 수 있습니다.

```python
import jellyfish

str1 = "hello"
str2 = "hallo"
similarity = jellyfish.jaro_winkler(str1, str2)
print(f"Jaro-Winkler Similarity: {similarity}")
```

위 예제에서는 "hello"와 "hallo"의 Jaro-Winkler 유사도를 계산합니다.

## 4. Cosine Similarity

**Cosine 유사도**는 두 문자열을 벡터로 변환하고 벡터 간의 코사인 유사도를 계산하는 방법입니다. 이를 통해 문자열 간의 각도를 측정하고 유사도를 계산할 수 있습니다. `sklearn` 라이브러리를 사용하여 이를 구현할 수 있습니다.

```python
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

str1 = "hello"
str2 = "hallo"
documents = [str1, str2]

vectorizer = TfidfVectorizer().fit_transform(documents)
vectors = vectorizer.toarray()

similarity = cosine_similarity(vectors)
print(f"Cosine Similarity: {similarity[0][1]}")
```

이 예제에서는 TF-IDF 벡터화를 사용하여 "hello"와 "hallo"의 코사인 유사도를 계산합니다.

## 결론

이 포스트에서는 Python에서 문자열 유사도를 측정하는 네 가지 방법을 살펴보았습니다. 각 방법은 특정 상황에 따라 더 적합할 수 있으며, 사용 목적에 맞게 적절한 방법을 선택하여 사용할 수 있습니다. 문자열 유사도 검색은 텍스트 분석, 중복 제거, 정보 검색 등 다양한 분야에서 유용하게 사용될 수 있습니다.

반응형