从零开始爬草榴成人文学 (3) – 聚类和PCA

Categories Python
从零开始爬草榴成人文学 (3) – 聚类和PCA

本文继续上一章对爬到的数据按照文章标题进行分析。

首先使用结巴分词对爬到的标题进行分词,得到分词过后的带空格的标题

import jieba
import jieba.analyse
import jieba.posseg as pseg #引入词性标注接口 
import codecs,sys
items['split_title'] = ''

def split_titles(df):
    strs = ' '.join(jieba.cut(df['lit_title'],cut_all=False))
    return strs
  
items['split_title'] = items.apply(lambda r: split_titles(r), axis=1)

接着使用TF-IDF按照标题产生每个标题对应的TFIDF向量(因为字典并不大,可以用来作为该标题的嵌入,参考本博文章

import numpy as np
from sklearn.cluster import KMeans
from sklearn import metrics
from sklearn import feature_extraction  
from sklearn.feature_extraction.text import TfidfTransformer  
from sklearn.feature_extraction.text import CountVectorizer  

corpus = items['split_title'].tolist()#将文章标题视作TF-IDF的语料
vectorizer=CountVectorizer()#该类会将文本中的词语转换为词频矩阵,矩阵元素a[i][j] 表示j词在i类文本下的词频  
transformer=TfidfTransformer()#该类会统计每个词语的tf-idf权值  
tfidf=transformer.fit_transform(vectorizer.fit_transform(corpus))#第一个fit_transform是计算tf-idf,第二个fit_transform是将文本转为词频矩阵  
weight=tfidf.toarray()#将tf-idf矩阵抽取出来,元素a[i][j]表示j词在i类文本中的tf-idf权重  

对TFIDF嵌入处理后的向量进行PCA降维(降至2维,方便绘图)

from sklearn.cluster import KMeans
from sklearn.decomposition import PCA

new_df = pd.DataFrame(weight)
cls=KMeans(n_clusters=2).fit(new_df)

pca = PCA(n_components=2)
new_pca = pd.DataFrame(pca.fit_transform(new_df), columns={'A','B'})

plt.scatter(new_pca['A'], new_pca['B'])
plt.show()
按标题聚类并PCA降维后的文章分布

上图可以看出,有两类文章偏离较远,我们可以看看是什么文章:

for i in list(new_pca[new_pca['B']>0.6].index):
    new_items = items.reset_index()
    print(new_items['lit_title'][i])

打印这些一类文章的标题后我们发现,这是两篇文章被按照章节写成多篇了。

除此之外,还可以做什么?

  • 我们的语料库是文章标题本身,内容有限,分类其实是按照标题自身进行分类的。若我们的语料库是更大的词典,经过对大语料库进行训练后,人工提供分类“武侠类”、“现代类”等等,能否将相应文章准确分类?
  • 能否抓取文章完整内容进行分词和聚类?避免教坏小朋友,留待大家讨论

版权声明:本站文章除非特别声明,均为L&H原创。允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。

本文链接:从零开始爬草榴成人文学 (3) – 聚类和PCA @ L&H site


发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据