2014-12-23 15 views
2

저는 tf-idf measure를 사용하여 두 문장/문서 간의 유사성을 찾기 위해 프로젝트 작업을하고 있습니다. 파이썬에서 matplotlib를 사용한 유사성 측정 방법

나는 다음 샘플 코드 시도 :

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

documents = (
"The sky is blue", 
"The sun is bright" 
) 
tfidf_vectorizer = TfidfVectorizer() 
tfidf_matrix = tfidf_vectorizer.fit_transform(documents) 
cosine = cosine_similarity(tfidf_matrix[0:1], tfidf_matrix) 
print cosine 

두 문장 사이의 유사성을

[[ 1.   0.33609693]] 

지금 내 질문에 내가 그래픽/시각화 형식의 유사성을 보여줄 수있는 방법입니다. 교차 값이 유사도 측정이나 matplotlib 또는 모든 파이썬 라이브러리에서 사용 가능한 다른 플롯이되는 벤 다이어그램과 같은 것입니다. 벤 다이어그램 대한 사전

답변

2

간단한 방법에

덕분에 반경 ri는 당신이 비교하는 라인 지수는 d = 2 * r * (1 - cosine[0][i])의 중심의 거리로 두 개의 원을 그릴 것입니다. 문장이 동일하면 d == 0 is True입니다. 즉, 두 동그라미가 동일합니다. 두 문장에 공통점이 없으면 d == 2*r is True이므로 원이 분리됩니다 (한 지점에서 만져집니다).

The code to draw circles is already present in StackOverflow.

편집 : 이 방법은 코드의 출력에서 ​​벤 다이어그램을 그립니다 원을 그리기 그들 반투명 보이게 때

## import matplotlib for plotting the Venn diagram 
import matplotlib.pyplot as plt 

## output of your first part 
cosine = [[ 1., 0.33609693]] 

## set constants 
r = 1 
d = 2 * r * (1 - cosine[0][1]) 

## draw circles 
circle1=plt.Circle((0, 0), r, alpha=.5) 
circle2=plt.Circle((d, 0), r, alpha=.5) 
## set axis limits 
plt.ylim([-1.1, 1.1]) 
plt.xlim([-1.1, 1.1 + d]) 
fig = plt.gcf() 
fig.gca().add_artist(circle1) 
fig.gca().add_artist(circle2) 
## hide axes if you like 
# fig.gca().get_xaxis().set_visible(False) 
# fig.gca().get_yaxis().set_visible(False) 
fig.savefig('venn_diagramm.png') 

는 알파 값을 설정. 따라서 오버랩은 원의 중첩되지 않는 부분의 두 배로 불투명합니다.

+0

원의 반지름은 무엇이며, 원이 두 개 있어야합니다. 두 반지의 반지름이 같아야합니까? 서클의 중심을 어떻게 결정할 수 있습니까? –

+0

둘 다 선택하십시오! 첫 번째 원에 대해 (0,0)을 선택하면 두 번째 원의 중심으로 (d, 0) 또는 (0, d)가 표시됩니다. r에 대해 모른다면 1로 설정하십시오. – jkalden

+0

그러면 d 값은 어떻게 교차점을 나타낼 수 있습니까? 데이터 또는 코드 샘플을 사용하여 설명 할 수 있습니까 –