我对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
如果有人可以帮助我或建议那会很棒。
答案 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)。然后v1
和v2
分别是在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()