Advertisement

sklearn 相似度矩阵_利用sklearn计算文本相似性

阅读量:

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

python代码:

#!/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('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")

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]

#"第2篇与第4篇的相似度"

numpy.savetxt("C:\ Users\ hd\ Desktop\ SimMatrix.csv",

SimMatrix, delimiter=",") #保存相似度矩阵

全部评论 (0)

还没有任何评论哟~