【问题标题】:Inter document similarity(cosine similarity)文档间相似度(余弦相似度)
【发布时间】:2014-02-25 14:34:12
【问题描述】:

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

但是,出现了一个错误,上面写着

"list object is not callable"

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

【问题讨论】:

  • 以后请参考sscce.org。您发布的大部分代码与错误无关。

标签: python python-2.7


【解决方案1】:

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

test=[]

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

test(tf_idf_matrix,count,nltkutil.cosine_distance)

Python 尝试使用提供的参数调用列表。不可避免地,您会收到TypeError

要解决此问题,请重命名列表、函数或(理想情况下)两者都使用更清楚地描述它们用途的名称。

【讨论】:

  • 非常感谢。实际上,我试图找出 2 个文件之间的余弦相似性,但仍然没有办法做到这一点。感谢您指出错误。但是代码仍然不起作用。我修改了我的问题,以便导师可以检查我的代码。
  • 您已更改问题,因此我的回答不再正确。如果你有一个新问题,那应该是一个单独的问题。
  • @jonrshape:我正在删除帖子并发布一个新问题。谢谢
  • 你刚刚又替换了这个问题。保留这个问题,然后问一个全新的问题。
  • 我将问题替换为“文档间相似性:余弦距离”我正在寻找任何建议/建议。
猜你喜欢
  • 2019-03-14
  • 2014-02-25
  • 2020-08-12
  • 2015-05-31
  • 2011-01-01
  • 2021-08-04
  • 2018-02-19
  • 2020-07-09
相关资源
最近更新 更多