我正在尝试编写一个程序来查找文件的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()
答案 0 :(得分:1)
在main()
中,您定义了一个名为test
的列表:
test=[]
此列表会隐藏您在test()
之外定义的名为main()
的函数,因此当您尝试:
test(tf_idf_matrix,count,nltkutil.cosine_distance)
Python尝试使用提供的参数调用列表。你不可避免地得到TypeError
。
要解决此问题,请将列表,函数或(理想情况下)重命名为更清楚地描述其用途的名称。