从两个单独的列表中提取每一行以计算余弦相似度

时间:2015-04-02 13:53:40

标签: python list for-loop cosine

我对Python不是很有经验,但我正在将它用于我正在做的项目。该项目涉及通过文本处理(清理)测量不同文本的相似性,然后最终实现余弦相似性,jaccard相似性和tf-idf。我已经在google和堆栈溢出上看到了很多有用的信息,但是如果有任何其他现有的链接/引用可以帮助我那将是很棒的。

我试图计算两个不同文本文件中每条推文之间的余弦相似度。我已经使用了How to calculate cosine similarity given 2 sentence strings? - Python上可以看到余弦实现的结构。

每个文本文件' Prius.txt'和' lexus.txt'每个文件中有100条推文。我已将文本文件中的每一行转换为两个单独的列表,并试图计算每个文件中每个推文之间的余弦相似度。

f1 = open('prius.txt','r')
a = []  
for line in f1:
    a.append(line.strip())
f1.close()

f2 = open('lexus.txt','r')
b = []
for line in f2:
    b.append(line.strip())
f2.close()

EG。在Prius.txt'中的第一条推文将与lexus.txt'中的第一条推文进行比较。等到最后一条推文,第100条推文,在' prius.txt'将文件与' lexus.txt'中的最后一条推文进行比较文件。

我在编写for循环时遇到问题,for循环将迭代列表中的每一行以打印余弦相似度,但我遇到了麻烦。它理解我几乎在那里但有困难。下面是我尝试的伪代码。

vector1 = text_to_vector(a)
vector2 = text_to_vector(b)

for file1 in a:
    for file2 in b:
        cosine = get_cosine(vector1, vector2)
        print 'Cosine:', cosine

如果有人可以帮助我或建议那会很棒。

1 个答案:

答案 0 :(得分:0)

我认为这就是你想要的:

for i in range(min(len(a), len(b))):
    v1, v2 = text_to_vector(a[i]), text_to_vector(b[i])
    cosine = get_cosine(v1, v2)
    print 'Cosine:', cosine

i只是一个从0递增到较小列表非包含长度的数字(在这种情况下它将是99)。然后v1v2分别是在file1和file2的i项上调用text_to_vector()的值。

我还建议您阅读这样的文件,尽管您的方式也适用:

with f1 as open('prius.txt','r'):
    a = f1.readlines()
with f2 as open('lexus.txt','r'):
    b = f2.readlines()