파이썬, 항목 유사도 검사



(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%


[참고] 유사도 검사는 코사인이나 벡터를 이용한 방식들도 있다.

 

반응형

+ Recent posts