Python、R对小说进行文本挖掘和层次聚类可视化分析案例

科技   科技   2024-10-25 17:39   浙江  

原文链接:http://tecdat.cn/?p=5673


《第_二十二_条军规》是美国作家约瑟夫·海勒创作的长篇小说,该小说以第二次世界大战为背景,通过对驻扎在地中海一个名叫皮亚诺扎岛(此岛为作者所虚构)上的美国空军飞行大队所发生的一系列事件的描写,揭示了一个非理性的、无秩序的、梦魇似的荒诞世界点击文末“阅读原文”获取完整代码数据

相关视频


我喜欢整本书中语言的创造性使用和荒谬人物的互动。本文对该小说进行文本挖掘和可视化。

数据集

该文有大约175,000个单词,分为42章。我在网上找到了这本书的原始文本版本。

我使用正则表达式和简单字符串匹配的组合在Python中解析文本。

我shiny在R中以交互方式可视化这些数据集。

地理图

 geo<- catch22\[( geo$Time > chapters\[1\]) & ( geo$Time < (chapters\[2\] + 1)),\]
  paths_sub <-  paths\[( paths$time > chapters\[1\]) & ( paths$time < (chapters\[2\] + 1)),\]
  
  # 绘图
  p <- ggplot() + borders("world", colour="black", fill="lightyellow") + 
    ylab(NULL) + xlab(NULL) +

 # 仅在有条件的情况下尝试绘制位置和路径

  if (nrow( geo_sub) != 0) {
     p + geom\_point(datageo\_subaes(x = Lon, y = Lat), size=3, colour='red') +
      

可视化映射了整本书中提到的地中海周围位置。

人物章节关系

ggplot(catch22, aes(x=Chapter, y=Character, colour=cols)) +
      geom_point(size=size, shape='|'alpha=0.8) +
      scale\_x\_continuous(limits=c(chapters\[1\],(chapters\[2\] + 1)), expand=c(0,0), breaks=(1:42)+0.5, labels=labs) +
    

该图基本上代表了书中提到不同人物的序列。 

我将数据绘制为标准散点图,章节为x轴(因为它与时间相似),人物为离散y轴。

人物共现矩阵

ggplot(coloca, aes(x=Character, y=variable, alpha=alpha)) + 
    geom_tile(aes(fill=factor(cluster)), colour='white') + 
    ylab(NULL) + xlab(NULL) +
 

用于构建此可视化的数据与前一个中使用的数据完全相同,但需要进行大量的转换。 

聚类为此图添加了另一个维度。在整本书上应用层次聚类,以尝试在角色中找到社群。使用AGNES算法对字符进行聚类。对不同聚类方案进行人工检查发现最优聚类,因为更频繁出现的角色占主导地位最少。这是六个簇的树形图:

    ag <- agnes(cat2\[,-1\], method="complete", stand=F)
    # 从树状图中切出聚类
    cluster <- cutree(ag, k=clusters)

应该注意,聚类是在整个文本上执行的,而不是章节。按聚类排序会将角色带入紧密的社区,让观众也可以看到角色之间的某些交互。

特色词

 ggplot( pos2, aes(Chapter, normed, colour=Word, fill=Word)) + 
      scale\_color\_brewer(type='qual'palette='Set1', guide = FALSE) +
    

堆叠条形图更好地显示了单词所在的章节。

结论

我在这个过程中学到了很多东西,无论是在使用方面,还是在shiny。




本文中分析的数据、代码分享到会员群,扫描下面二维码即可加群! 


点击文末“阅读原文”

获取全文完整代码数据资料


本文选自《Python、R对小说进行文本挖掘和层次聚类可视化分析案例》。


点击标题查阅往期内容

用于NLP的Python:使用Keras进行深度学习文本生成
长短期记忆网络LSTM在时间序列预测和文本分类中的应用
用Rapidminer做文本挖掘的应用:情感分析
R语言文本挖掘tf-idf,主题建模,情感分析,n-gram建模研究
R语言对推特twitter数据进行文本情感分析
Python使用神经网络进行简单文本分类
用于NLP的Python:使用Keras的多标签文本LSTM神经网络分类
R语言文本挖掘使用tf-idf分析NASA元数据的关键字
R语言NLP案例:LDA主题文本挖掘优惠券推荐网站数据
Python使用神经网络进行简单文本分类
R语言自然语言处理(NLP):情感分析新闻文本数据
Python、R对小说进行文本挖掘和层次聚类可视化分析案例
R语言对推特twitter数据进行文本情感分析
R语言中的LDA模型:对文本数据进行主题模型topic modeling分析
R语言文本主题模型之潜在语义分析(LDA:Latent Dirichlet Allocation)



拓端数据部落
拓端(tecdat.cn)创立于2016年,提供专业的数据分析与挖掘服务,致力于充分挖掘数据价值。
 最新文章