NLP计算文档相似度之TF-IDF

来源:互联网 发布:菜鸟网络是什么 编辑:程序博客网 时间:2024/05/16 10:10
#!/usr/bin/python  # -*- coding: utf-8 -*-import numpyimport osfrom sklearn import feature_extractionfrom sklearn.feature_extraction.text import TfidfTransformerfrom sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer#sys.setdefaultencoding('utf8')了 网易 杭研 大厦","小明 硕士 毕业 与 中国 科学院","我 爱 北京 天安门"]trainfile = open(u'D:\python_noweightpathway\TIA\TIAxmmc.txt','r',encoding= 'utf8') #不同的documents用换行符隔开traincorpus = trainfile.readlines()#corpus=["我 来到 北京 清华大学","我 他 来到trainfile.close()corpus = traincorpus;vectorizer=CountVectorizer()#该类会将文本中的词语转换为词频矩阵,矩阵元素a[i][j] 表示j词在i类文本下的词频tfidf_vectorizer = TfidfVectorizer(max_df=0.95, min_df=2, #max_features=n_features,                                   stop_words='english')transformer=TfidfTransformer()#该类会统计每个词语的tf-idf权值tfidf=transformer.fit_transform(tfidf_vectorizer.fit_transform(corpus))#第一个fit_transform是计算tf-idf,第二个fit_transform是将文本转为词频矩阵word=tfidf_vectorizer.get_feature_names()#获取词袋模型中的所有词语weight=tfidf.toarray()#将tf-idf矩阵抽取出来,元素a[i][j]表示j词在i类文本中的tf-idf权重f = open("D:\python_noweightpathway\TIA\TIAsmilarity.txt","w+")for i in range(len(weight)):#打印每类文本的tf-idf词语权重,第一个for遍历所有文本,第二个for便利某一类文本下的词语权重#         print u"-------这里输出第",i,u"类文本的词语tf-idf权重------"    f.write(str(i+1)+"\t")    for j in range(len(word)):        if(weight[i][j]>0): f.write(str(j+1) + ":" + str(weight[i][j]) + " ")    f.write("\n")    print (i)f.close()# f = open("D:\python_noweightpathway\TIA\dictionary.txt","w+")# for i in range(len(word)):#     f.write(str(i) + "\t" + word[i].encode("utf-8") + "\n")# f.close()SimMatrix = (tfidf * tfidf.T).Aprint (SimMatrix[1,3]) #"第一篇与第4篇的相似度"numpy.savetxt("D:\python_noweightpathway\TIA\SimMatrix.csv", SimMatrix, delimiter=",") #保存相似度矩阵