文档间相似性(余弦相似度)

时间:2014-02-01 23:00:43

标签: python python-2.7

我正在尝试编写一个程序来查找文件的2个文件之间的相似性。 出于这个原因,我正在关注this链接和发布from

但是,出现了一个错误

"list object is not callable"

at

test(tf_idf_matrix,count,nltkutil.cosine_distance)

线。

我使用一个文件作为列车集,其他文件作为测试集,我的目标是使用test()使用tf-idf输出2个文档之间的余弦相似度。

我的代码如下:

def test(tdMatrix,count,fsim):

    sims=[] 
    sims = np.zeros((len(tdMatrix), count))

    for i in range(len(tdMatrix)):
        for j in range(count):
                doc1 = np.asarray(tdMatrix[tdMatrix[i], :].todense()).reshape(-1)
                doc2 = np.asarray(tdMatrix[tdMatrix[j], :].todense()).reshape(-1)

                sims[i, j] = fsim(doc1, doc2)

            print sims

def main():

    file_set=["corpusA.txt","corpusB.txt"]
    train=[]
    test=[]

    for file1 in file_set:
        s="x"+file1
        preprocess(file1,s)

    count_vectorizer = CountVectorizer()
    m=open("xcorpusA.txt",'r')
    for i in m:
        train.append(i.strip())
    #print doc
    count_vectorizer.fit_transform(train)


    m1=open("xcorpusB.txt",'r')
    for i in m1:
        test.append(i.strip())

    freq_term_matrix = count_vectorizer.transform(test)
    #print freq_term_matrix.todense()

    tfidf = TfidfTransformer(norm="l2")
    tfidf.fit(freq_term_matrix)

    #print "IDF:", tfidf.idf_

    tf_idf_matrix = tfidf.transform(freq_term_matrix)
    print (tf_idf_matrix.toarray())

    count=0

    for i in tf_idf_matrix.toarray():
        for j in i:
            count+=1    
        break

    print "Results with Cosine Distance Similarity Measure"
    test(tf_idf_matrix,count,nltkutil.cosine_distance)


if __name__ == "__main__":
    main()

1 个答案:

答案 0 :(得分:1)

main()中,您定义了一个名为test的列表:

test=[]

此列表会隐藏您在test()之外定义的名为main()的函数,因此当您尝试:

test(tf_idf_matrix,count,nltkutil.cosine_distance)

Python尝试使用提供的参数调用列表。你不可避免地得到TypeError

要解决此问题,请将列表,函数或(理想情况下)重命名为更清楚地描述其用途的名称。