我正在编写一个python脚本来查找文档之间的相似性。我已经计算了每个文档对的相似度得分并将它们存储在词典中。它看起来像这样:
{(8328,8327):1.0,(8313,8306):0.12405229825691289,(8329,8328):1.0,(8322,8321):0.99999999999999989,(8328,8329):1.0,(8306,8316): 0.12405229825691289,(8320,8319):0.67999999999999989,(8337,8336):1.0000000000000002,(8319,8320):0.67999999999999989,(8313,8316):0.99999999999999989,(8321,8322):0.99999999999999989,(8330,8328):1.0}
我的最终目标是将类似的文档聚集在一起。上述数据可以用其他方式查看。让我们说文档对(8313,8306)。相似度得分为0.12405。我可以指定得分的倒数将是文档8313和8306之间的距离。因此,类似的文档将更紧密地聚集在一起,而不相似的文档将基于它们的距离进一步分开。
我的问题是,是否有任何开源可视化工具可以帮助我实现这一目标?
答案 0 :(得分:1)
我不确定这种类型的图表的术语是什么(最小权重生成树?),但请查看Graphviz。它也有一些Python bindings,但如果没有,你可以简单地为它生成一个输入文件,或直接管道数据。
答案 1 :(得分:1)
答案 2 :(得分:0)
我认为Weka可以做到这一点。您可能必须先将输入文件按到不同的格式。 Weka也有一个API,虽然它是用Java而不是Python。
答案 3 :(得分:0)
您可以使用许多工具来执行此操作。
还有其他一些提及,但你可以很容易地在Tkinter,PyGTK +,PyQT,matplotlib或者真正的任何图形库中做这样的事情。
然而,matplotlib中的极坐标图很简单:
(未测试):
import math
from matplotlib.pyplot import figure, show
# assign your data here
fig = figure()
ax = fig.add_subplot(111, polar=True)
for pair in data:
ax.plot(0, data[pair], 'o')
show()
这应该给你一个基本的可视化。您也可以将其更改为
ax.plot(pair*math.pi, 1, 'o')
对于不同的可视化风格。
matplotlib文档非常好,他们有很多例子。
答案 4 :(得分:0)
也许Networkx可能有所帮助。这个例子可能是一个很好的起点: