sklearn 相似度矩阵_利用sklearn计算文本相似性
标签:
通过调用sklearn库中的TfidfVectorizer类来获取TF-IDF特征向量,并生成一个对称的余弦相似度矩阵并将其保存为特定的文件格式。在实际应用中,则是先对输入的文档集进行预处理以去除停用词和标点符号等无意义信息随后使用TfidfVectorizer类生成TF-IDF权重矩阵作为衡量文档间相关性的数值依据
#!/usr/bin/python
-- coding: utf-8 --
import numpy
import os
import sys
from sklearn import feature_extraction
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer
reload(sys)
#sys.setdefaultencoding(UTF-8)后将系统默认编码设置为 UTF-8
trainfile = open(r"C:\Users\hd\Desktop\docs.txt", "r") # 其中 different documents 分别位于不同的目录下,并通过回车分隔
traincorpus = trainfile.readlines()
#corpus=["我 来到 北京 清华大学","我 他 来到
trainfile.close()
corpus = traincorpus;
vectorizer=CountVectorizer()#该类会被赋值为一个用于将文本中的词语转换为词频矩阵的对象,在此过程中, 矩阵元素a[i][j]表示第i个类别文本中第j个词的出现次数
tfidf_vectorizer = TfidfVectorizer(max_df=0.95, min_df=2, #max_features=n_features,
stop_words=‘english‘)
transformer=TfidfTransformer()#该类会统计每个词语的tf-idf权值
模型通过两次fit_transform操作来完成文本的转换过程:首先使用transformer模型进行tf-idf计算得到表示向量;随后又利用同一个模型将文本转换为词频矩阵形式
word=tfidf_vectorizer.get_feature_names()#获取词袋模型中的所有词语
通过调用toarray方法生成权重矩阵...其中a[i][j]代表第i类文本中第j个词的TF-IDF加权值
f = open("C:\ Users\ hd\ Desktop\ tif.txt","w+")
该算法通过嵌套循环结构实现对所有文本数据的处理:外层循环逐个遍历每一篇待分析的文章;内层循环则逐条检查文章中每个词项的TF-IDF值计算结果,并将计算出的权重信息存储到预设的数据结构中以便后续处理和分析。
# 输出每类文本的TF-IDF词语权重信息
for i in range(len(weight)):
for j in range(len(weight[i])):
print(f"第{i+1}类文章中第{j+1}个词项的TF-IDF值为{weight[i][j]:.4f}")
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("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
print SimMatrix[1,3] #"第一篇与第4篇的相似度"
numpy.savetxt("C:\Users\hd\Desktop\SimilarityMatrix.csv", SimilarityMatrix, delimiter=',') # 保存相似度矩阵
标签:
