【发布时间】:2014-11-04 23:31:32
【问题描述】:
不想在这里引起混乱。我希望每个列表都附加一个值的原因是我想将每个列表中的内容用作聚类算法的特征值。最初的想法是我有 1000 个项目,每个项目都有一个公司名称列表。我想将此列表内容转换为一个值。这就是为什么我希望附加到每个列表的每个值都作为该项目的功能之一......谢谢......(这也是我使用基本列表的原因......)
我正在尝试使用 python 来分析一些文本,现在我有 1000 个列表,每个列表都包含公司名称列表。例如:
list1 = ['google', 'facebook' 'twitter', 'IBM']
list2 = ['microsoft', 'bloomberg', '1010Data']
list3 = ['google', 'microsoft', '1010Data']
我想衡量这些列表的相似性。 list1和list2有0个相似之处,但list1和list3、list2和list3有一些相似之处。但是如何测量呢?
最初我考虑使用一个包含这些列表中所有单词的基本向量。这里的基本列表可能是:
base_list = ['google', 'facebook', 'twitter', 'IBM', 'microsoft', 'bloomberg','1010Data']
其向量值为:
base_vector = [1, 1, 1, 1, 1, 1, 1]
然后这些列表中的每一个都有根据单词外观及其位置的向量值。
(这里,base_list、list1、list2、list3都是排序的)
list1 = [1, 1, 1, 1, 0, 0, 0]
list2 = [0, 0, 0, 0, 1, 1, 1]
list3 = [1, 0, 0, 0, 1, 0, 1]
我想通过将它们中的每一个与 base_vector 进行比较来测量它们的差异(或相似性),以获得角度值。
但是!一个大问题可能是
list1 = [1, 1, 1, 0, 0, 0]
list2 = [0, 0, 0, 1, 1, 1]
那么它们与基向量的角度值是一样的!
还有什么建议?关于如何衡量列表中内容的相似性?我的意思是我不必使用这种矢量方法,我只是被阻止了。
谢谢!
【问题讨论】:
-
你的输入输出应该是什么?您可以对每个列表进行排序,然后比较相应的位置。
-
为什么不将列表相互比较,以及base_vector?
-
@corn3lius 我想到了这一点,但我的清单太多了。我想最后我会有 12000 个列表。如果我相互比较,它将是 O(N^2)。
-
@neo 说我有 1000 个列表。我希望每个列表都有一个值,该函数的输入是 foo(v, v1) 其中 v 是基向量,v1 是 list1 的向量。并且输出应该是一个值。这样一直持续到所有列表都有对应的值。
-
基本列表的问题在于 (list1, base) 之间的相似性与 (list1, list2) 之间的相似性无关。
标签: python list similarity cosine-similarity