从两个单独的列表中提取每一行以计算余弦相似度
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)。那么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()
我对 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)。那么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()