Python、R对小说文本挖掘正则表达式分析案例

约瑟夫·海勒的《第二十二条军规》是我最喜欢的小说。

由Kaizong Ye,Weilong Zhang撰写

我最近读完了 ,并喜欢整本书中语言的创造性使用和荒谬人物的互动。


对于我的可视化类,选择文本作为我的最终项目“数据集”是一个简单的选择。该文有大约175,000个单词,分为42章。我在网上找到了这本书的原始文本版本并开始工作。

数据集

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

catch22 <- read.csv("catch22.csv", stringsAsFactors = FALSE)

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


地中海旅行

ggplot() + borders("world", colour="black", fill=llow") + 
    ylab(NULL) + xlab(NULL) +
    theme(legend.position="none") +
× 正则表达式在文本挖掘中的应用

正则表达式(Regular Expression)在文本挖掘中发挥着重要的作用

它允许我们快速、准确地定位和处理文本中的特定模式。以下是一些使用正则表达式进行文本挖掘的常见场景和示例。

1. 提取特定信息

假设我们想要从一段文本中提取所有的电子邮件地址。 support@company.org 获取更多信息。” email_pattern = r’\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b’ emails = re.findall(email_pattern, text) print(“提取的电子邮件地址:”, emails)

这个正则表达式模式可以匹配大部分常见的电子邮件地址格式。

2. 去除或替换文本中的特定内容

文本中有一些数字123和456需要被去除。” cleaned_text = re.sub(r’\d+’, ”, text) print(“清理后的文本:”, cleaned_text)

在这个例子中,\d+匹配一个或多个数字,而re.sub函数则将它们替换为空字符串,从而去除它们。

3. 查找特定格式的文本

如果要查找所有以“http”或“https”开头的URL,可以使用以下正则表达式:

python  
import re    
    
text = "访问网站https://www.example.com或http://another-example.org获取更多详情。"    
url_pattern = r'https?://\S+'    
    
urls = re.findall(url_pattern, text)    
print("找到的URL:", urls)  

这里的https?表示“http”后面可能有一个“s”(用于匹配“https”或“http”),://是URL的固定部分,\S+匹配一个或多个非空白字符。

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

人物形象


自适应网页宽度的 Bilibili 视频

视频

文本挖掘:主题模型(LDA)及R语言实现分析游记数据

探索见解

去bilibili观看

探索更多视频

ggplot(catch22_in, aes(x=Chapter, y=Character, colour=cols)) +
      geom_point(size=size, shape='|', alpha=0.8) +

该图基本上代表了书中提到不同字符的时间序列。 

我将数据绘制为标准散点图,章节为x轴(因为它与时间相似),字符为离散y轴,垂直条为标记。

 

人物共同出现

= 'Cluster') {
    orders <- data.frame(table(cch22_in$Character))
    orders$Var1 <- as.characte
ggplot(colocation, aes(x=Character, y=variable, alpha=alpha)) + 
    geom_tile(aes(fill=

用于构建此可视化的数据与前一个中使用的数据完全相同,但需要进行大量转换才能将其转换为可表示这些模式的形式。 

聚类为此图添加了另一个维度。在整本书上应用分层聚类方案,以尝试在角色中找到社区。再次,使用章节(1表示现在,0表示不存在)和42维欧几里德距离用于使用完整链接AGNES算法对字符进行聚类。对不同聚类方案和距离测量的树状图进行人工检查发现,这是最“水平”,因为更频繁出现的角色占主导地位的方案最少。这是六个簇的树形图:

当用户选择通过聚类对图进行着色时,用于共享相同聚类的字符的共同位置的单元用唯一颜色填充,而显示来自不同社区的字符的共同位置的那些单元用灰色阴影。


图片

NLP自然语言处理—主题模型LDA案例:挖掘人民网留言板文本数据

阅读文章


应该注意,聚类是在整个文本上执行的,而不是由应用程序的用户放大的章节。我觉得动态改变聚类会让人分心。


随时关注您喜欢的主题


字母或频率排序将群集“爆炸”成无法识别的空间,但按群集排序会将它们带入紧密的社区,让观众也可以看到群集之间的某些交互。

我对共同位置的编码和应用于每个单元的阴影的映射肯定会引起争论,而其他聚类方法导致找到非常不同的社区。也就是说,从定性上讲,我花了很多时间用我自己的文本知识来评估结果,发现当前的实现比我测试的任何其他实现更令人满意。

我发现书中的每个主角在某些时候与几乎所有其他角色互动都非常有趣。我不会期望这么多重叠。

与Les Mis相比,情节更加密集,我怀疑这是由于聚集的章节数量的10倍差异。

特色词


这个图可能是四个图中最常规的图,但可能显示了对文本的很多见解。

我可以选择为此可视化选择堆叠条形图或堆积区域图。我喜欢堆积区域图更好地显示单词突出的连续章节,但是承认当章节之间存在高度可变性时,三角形形式会扭曲关系。

结论

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


可下载资源

关于作者

Kaizong Ye拓端研究室(TRL)的研究员。Kaizong Ye拓端研究室(TRL)的研究员。在此对他对本文所作的贡献表示诚挚感谢,他在上海财经大学完成了统计学专业的硕士学位,专注人工智能领域。擅长Python.Matlab仿真、视觉处理、神经网络、数据分析。

本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。

​非常感谢您阅读本文,如需帮助请联系我们!

 
QQ在线咨询
售前咨询热线
15121130882
售后咨询热线
0571-63341498

关注有关新文章的微信公众号


永远不要错过任何见解。当新文章发表时,我们会通过微信公众号向您推送。

技术干货

最新洞察

This will close in 0 seconds