1.TF-IDF算法
(1)TF-IDF(term frequency–inverse document frequency,逆文本频数指数)算法
用于信息检索和数据挖掘的常用加权算法。TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。除了TF-IDF以外,因特网上的搜索引擎还会使用基于链接分析的评级方法,以确定文件在搜寻结果中出现的顺序。
(2)TF-IDF模型的主要思想是:
如果词w在一篇文档d中出现的频率高,并且在其他文档中很少出现,则认为词w具有很好的区分能力,适合用来把文章d和其他文章区分开来。
2.文本相似度分析
使用前提:
from gensim import corpora,models,similarities
import jieba
from collections import defaultdict
(1)读取文本
(2)对多篇文本分词
(3)整理文本成指定格式
(4)计算词频
(5)【选】对词频低的词语进行过滤
(6)通过语料库建立词典
(7)加载要对比的文档
(8)通过doc2bow转化为稀疏向量
vector=dictionary.doc2bow(new_doc.split())
(9)依据稀疏向量得到新的语料库
corpus=[dictionary.doc2bow(text) for text in ntexts]
corpora.MmCorpus.serialize("G:/DA/file/corpus1.mm",corpus)
(10)对新语料库通过tf-idf模型进行处理,得到tfidf
tfidf=models.TfidfModel(corpus)
(11)通过token2id得到特征数
featureNum=len(dictionary.token2id.keys())
(12)计算稀疏矩阵相似度,建立索引
index=similarities.SparseMatrixSimilarity(tfidf[corpus],num_features=featureNum)
(13)依据索引得到最终相似度结果
sim=index[tfidf[vector]]
(14)运行,查看结果
(15)分析结果:《至此终年》与《徐徐诱之》的相似度为0.75%,与《他站在时光深处》的相似度为4.15%。
【注】
①密集向量: 密集向量的值是一个普通的Double数组,如:向量(1.0,0.0,1.0,3.0)用密集格式表示为[1.0,0.0,1.0,3.0]。
②稀疏向量:稀疏向量由两个并列的 数组indices和values组成,如:向量(1.0,0.0,1.0,3.0)用稀疏格式表示为(4,[0,2,3],[1.0,1.0,3.0]),第一个4表示向量的长度(元素个数),[0,2,3]就是indices数组(即顺序向量),[1.0,1.0,3.0]是values数组(即值向量),表示向量0的位置的值是1.0,2的位置的值是1.0,而3的位置的值是3.0,其他的位置都是0.0。
③稀疏矩阵:在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵;与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。定义非零元素的总数比上矩阵所有元素的总数为矩阵的稠密度。通常认为矩阵中非零元素的总数比上矩阵所有元素总数的值(即矩阵的稠密度)小于等于0.05时,则称该矩阵为稀疏矩阵(sparse matrix)。