鉴于两份文件,我希望计算它们之间的相似性。我有措施找出余弦距离,N-Gram和tf-idf使用这个: This is a previously asked question
我想知道,使用这些功能还需要做些什么。
另外,我尝试过实现Word2Vec,之后我尝试使用以下代码找到相似之处:
for i in range(len(Words)):
print i
for k in range(len(Words)):
net_sim = 0.0
for j in range(len(Words.ix[i]['A'])):
sim = 0.0
for l in range(len(Words.ix[k]['A'])):
if sim < model.similarity(Words.ix[i]['A'][j],Words.ix[k]['A'][l]):
sim = model.similarity(Words.ix[i]['A'][j],Words.ix[k]['A'][l])
net_sim += sim
Similarity.ix[i][k] = net_sim/len(Words.ix[i]['A'])
对于给定文档中的任何单词,我尝试在第二个文档中找到最相似的单词并添加它们的相似性。然后,我除以单词的数量,以将其标准化为0到1的范围。 这里,Words是一个DataFrame,由不同文档的单词组成,在不同的行中,model是一个Word2Vec模型。这个过程需要花费很多时间,我希望对其进行优化,从而寻找不同的方法
答案 0 :(得分:1)
如果你专注于使用你描述的这些功能,那么通过阅读nltk wiki应该很容易实现,但我不知道这是否是比较同一性的最佳方式他们之间。
如difflib docs页面所述,您也可以使用其包来比较文件和序列。
此模块提供比较序列的类和函数。它 例如,可以用于比较文件,并且可以生成 各种格式的差异信息,包括HTML和上下文 和统一的差异。
要比较目录和文件,另请参阅filecmp模块。
更具体地说,您可以使用difflib.SequenceMatcher()
来比较文本序列。
示例:的
import difflib
# passing strings
difflib.SequenceMatcher(None, str1, str2)
# reading files
difflib.SequenceMatcher(None, file1.read(), file2.read())
有关更多示例和教程,请参阅: