python中两个文件的比较

时间:2016-06-20 11:35:07

标签: python tf-idf n-gram word2vec cosine-similarity

鉴于两份文件,我希望计算它们之间的相似性。我有措施找出余弦距离,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模型。这个过程需要花费很多时间,我希望对其进行优化,从而寻找不同的方法

1 个答案:

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

有关更多示例和教程,请参阅:

PyMOTW - difflib