사용자 이름이 두 개인 목록이 있으며 Jaccard 유사성을 계산하고 싶습니다. 가능한가?Python에서 문자열을 포함하는 두 개의 목록의 Jaccard 유사도를 어떻게 계산합니까?
This thread는 두 문자열 간의 Jaccard 유사성을 계산하는 방법을 보여 주지만 각 요소가 한 단어 (예 : 사용자 이름) 인 두 개의 목록에이를 적용하고자합니다.
사용자 이름이 두 개인 목록이 있으며 Jaccard 유사성을 계산하고 싶습니다. 가능한가?Python에서 문자열을 포함하는 두 개의 목록의 Jaccard 유사도를 어떻게 계산합니까?
This thread는 두 문자열 간의 Jaccard 유사성을 계산하는 방법을 보여 주지만 각 요소가 한 단어 (예 : 사용자 이름) 인 두 개의 목록에이를 적용하고자합니다.
나는 결국 내 자신의 솔루션을 작성 결국 :
def jaccard_distance(list1, list2):
intersection = len(list(set(list1).intersection(list2)))
print(list(set(list1).intersection(list2)))
union = (len(list1) + len(list2)) - intersection
return float(intersection/union)
을
귀하의 사용자 이름이 반복되지 않는 가정하면, 당신은 같은 생각 사용할 수 있습니다
def jaccard(a, b):
c = a.intersection(b)
return float(len(c))/(len(a) + len(b) - len(c))
list1 = ['dog', 'cat', 'rat']
list2 = ['dog', 'cat', 'mouse']
# The intersection is ['dog', 'cat']
# union is ['dog', 'cat', 'rat', 'mouse]
words1 = set(list1)
words2 = set(list2)
jaccard(words1, words2)
>>> 0.5