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

Extracting each line from two separate lists to work out cosine similarity

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

我正在尝试计算两个不同文本文件中每条推文之间的余弦相似度。我使用了可以在 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()

例如。 'Prius.txt' 中的第一条推文将与 'lexus.txt' 中的第一条推文进行比较,依此类推,直到 'prius.txt' 文件中的最后一条推文,即第 100 条推文与 [=] 中的最后一条推文进行比较26=] 文件。

我在编写 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

如果有人能帮助我或给我建议那就太好了。

我想这就是你想要的:

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()