文本挖掘学习(五) 文档相似度、文档聚类

1.文档相似度

基于词袋模型的基本思路

  • 如果两个文档/两句话的用词越相似,他们的内容就越相似。因此可以从词频入手,计算他们的相似度
  • 文档向量化之后,相似度的考察就直接转化为计算空间中距离的问题
  • 缺陷:不能考虑否定词的巨大作用,不能考虑词序的作用

余弦相似度

  • 两个向量间的夹角能够很好地反映其相似程度
  • 但夹角大小使用不便,因此用夹角的余弦值作为相似度衡量指标
# 文本相似度
# 基于词袋模型计算
#countvec = CountVectorizer(min_df=5)  # 在5个以上章节中出现才保留
#words_vec = countvec.fit_transform(words_list)  # 得到一个稀疏矩阵,词频矩阵
from sklearn.metrics.pairwise import pairwise_distances

pairwise_distances(words_vec, metric='cosine')
# 使用TF-IDF矩阵进行相似度计算
pairwise_distances(tfidf, metric='cosine')

文本挖掘学习(五) 文档相似度、文档聚类_第1张图片

doc2vec

  • 较短的文档如果希望计算文本相似度,可以将各自内部的word2vec向量分别进行平均,用平均后的向量作为文本向量,从而用于计算相似度

2.文档聚类

文档聚类问题在本质上已经和普通的聚类分析没有区别

# 文档聚类
# 为章节添加名称标签
chap.index = [df.txt[df.chap == i].iloc[0] for i in chap.index]

# tfidf
# 进行聚类分析
from sklearn.cluster import KMeans

clf = KMeans(n_clusters=5)  # 聚为5类
s = clf.fit(tfidf)
print(s)
clf.cluster_centers_

文本挖掘学习(五) 文档相似度、文档聚类_第2张图片

chap['clsres'] = clf.labels_
chapgrp = chap.groupby('clsres')
chapcls = chapgrp.agg(sum)  # 自动转为合并字符串
chapclsres = chapcls.txt.apply(text_cut)
chapclsres

文本挖掘学习(五) 文档相似度、文档聚类_第3张图片

# 列出关键词以刻画类别特征
import jieba.analyse as ana

for item in chapclsres:
    print(ana.extract_tags(item, topK=10))

文本挖掘学习(五) 文档相似度、文档聚类_第4张图片

你可能感兴趣的:(文本挖掘,文本挖掘,文本聚类,文档相似度)