利用sklearn计算文本相似性

来源:互联网 发布:速配网软件下载 编辑:程序博客网 时间:2024/05/29 18:02

 

利用sklearn计算文本相似性,并将文本之间的相似度矩阵保存到文件当中。这里提取文本TF-IDF特征值进行文本的相似性计算。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/usr/bin/python  
# -*- coding: utf-8 -*-
import numpy
import os
import sys
from sklearn import feature_extraction
from sklearn.feature_extraction.text importTfidfTransformer
from sklearn.feature_extraction.text importTfidfVectorizer, CountVectorizer
reload(sys)
#sys.setdefaultencoding('utf8')了 网易 杭研 大厦","小明 硕士 毕业 与 中国 科学院","我 爱 北京 天安门"]
trainfile = open("C:\\Users\\hd\\Desktop\\docs.txt","r")#不同的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("C:\\Users\\hd\\Desktop\\tif.txt","w+")
for i in range(len(weight)):#打印每类文本的tf-idf词语权重,第一个for遍历所有文本,第二个for便利某一类文本下的词语权重
#         print u"-------这里输出第",i,u"类文本的词语tf-idf权重------"
    f.write(str(i+1)+"\t")
    forj in range(len(word)):
        if(weight[i][j]>0): f.write(str(j+1)+ ":"+ str(weight[i][j])+ " ")
    f.write("\n")
    printi
f.close()
f =open("C:\\Users\\hd\\Desktop\\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).A
printSimMatrix[1,3]#"第一篇与第4篇的相似度"
 
numpy.savetxt("C:\\Users\\hd\\Desktop\\SimMatrix.csv", SimMatrix, delimiter=",")#保存相似度矩阵

  


0 0