파이썬, 항목 유사도 검사
(1) 항목 순서와 무관하게 같은 값 기준으로 유사도를 계산하는 경우
def jaccard_similarity(x, y):
intersection_cardinality = len(set.intersection(*[set(x), set(y)]))
union_cardinality = len(set.union(*[set(x), set(y)]))
return intersection_cardinality / float(union_cardinality)
# 같은 항목 4개 다른 항목 2개
data_a = ['A', 'B', 'C', 'D', 'E']
data_b = ['B', 'A', 'C', 'D', 'F']
print("항목 유사도(순서 무관): %.3f%%" %jaccard_similarity(data_a, data_b))
# 실행결과: 항목 유사도(순서 무관): 0.667%
(2) 항목 순서까지 포함하여 유사도를 계산하는 경우
def similarity(x, y):
len_x, len_y = len(x), len(y)
length_max, length_min = len_x, len_x
ok = 0
if len_x < len_y:
length_max = len_y
else:
length_min = len_y
for i in range(length_min):
if x[i] == y[i]:
ok += 1
return ok / float(length_max)
# 같은 항목 2개 다른 항목 3개
data_a = ['A', 'B', 'C', 'D', 'E']
data_b = ['B', 'A', 'C', 'D', 'F']
# X X O O X
print("항목 유사도(순서 포함): %.3f%%" %similarity(data_a, data_b))
# 실행 결과: 항목 유사도(순서 포함): 0.400%
[참고] 유사도 검사는 코사인이나 벡터를 이용한 방식들도 있다.
'Python 활용' 카테고리의 다른 글
파이썬, faiss를 Windows에 설치하기 (0) | 2022.02.15 |
---|---|
파이썬 소켓 프로그래밍 - 클라이언트/서버 예제 (0) | 2022.02.14 |
Python , GPU 모니터링 GPUtil 예제 (0) | 2022.02.10 |
파이썬, Parallel HTTP requests (requests_futures 이용) (0) | 2022.01.30 |
파이썬, 다중 HTTP 요청 (synchronous, multiprocessing, multithreading, asyncio) (0) | 2022.01.29 |