이번 포스팅은 앞의 이론에서 언급했었던 유사도 계산 방법들을 한번 더 설명하고, 구현해보겠습니다. 이론 포스팅은 여기를 클릭해주세요.
텍스트 유사도는 두 개 이상의 텍스트가 얼마나 유사한지 표현하는 방식 중 하나입니다. 텍스트 유사도 측정 방법은 여러가지가 있지만, 여기서는 4가지를 다루겠습니다.
1. 자카드 유사도(Jaccard Similarity)
▶구현 포인트
(1) 입력 받은 문장을 단어 단위로 쪼개주고, 중복을 제거해줍니다.
(2) 두 단어 집합의 합집합을 구해줍니다.
(3) 두 단어 집합의 교집합을 구해줍니다.
(4) 교집합/합집합을 통해 유사도를 구해줍니다.
아래 코드는 자카드 유사도를 구현한 코드입니다.
def jaccard(sent1,sent2):
#(1) 입력 받은 문장을 단어 단위로 쪼개주고, 중복을 제거해줍니다.
sent1_tokens = set(sent1.split(' '))
sent2_tokens = set(sent2.split(' '))
#(2) 두 단어 집합의 합집합을 구해줍니다.
union = len(sent1_tokens | sent2_tokens)
#(3) 두 단어 집합의 교집합을 구해줍니다.
intersection = len(sent1_tokens & sent2_tokens)
#(4) 교집합/합집합을 통해 유사도를 구해줍니다.
return intersection / union
sent1 = "i am so sorry but i love you"
sent2 = "i love you but i hate you"
result = jaccard(sent1,sent2)
print("Jaccard Similarity : ",result)
'''
Jaccard Similarity : 0.5
'''