我正在研究项目,使用tf-idf measure来查找两个句子/文档之间的相似性。
我尝试了以下示例代码:
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或任何python库中可用的任何其他图。
先谢谢
答案 0 :(得分:2)
对Venn图最简单的方法是绘制两个半径为r
且距离为d = 2 * r * (1 - cosine[0][i])
的圆,其中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')
绘制圆圈时设置alpha值会使它们显示为半透明。因此,重叠是圆的非重叠部分的两倍不透明。