生活大爆炸(TBBT): 台词爬取、词云生成与NLP分析

本文介绍了如何爬取《生活大爆炸》的台词数据,利用Python进行NLP分析,包括分词、去停词、词干提取和词形还原,最终生成词云进行可视化,展示了NLP在文本分析中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《生活大爆炸》(英文:The Big Bang Theory 简称:TBBT)广受喜爱(据说还可以练听力练口语blabla),去年随着第12季的播出而完结,最近也算是在补。有一天闲聊的时候偶然冒出来一个点子,就是利用词云来将大爆炸台词中的高频词汇可视化一下,也是一个有趣的练习。

简单来说我们的任务分为两部分,第一部分是获取台词数据,第二部分是生成词云和其他NLP分析。


目录

获取数据

数据源

网页分析

编写爬虫

文本分析

直接生成词云并绘制

NLP分析

分词

去停词和滤词

词干提取和词形还原

词云生成

其他NLP分析

代码与台词文本

参考资料


 

获取数据

数据源

首先我找到的台词数据来自于该网站,这是一位国外网友自己写了台词,并放到了自己用wordpress建的站上,目前更新到了第10季(看修改日期发现最后一个网页是在一年前更新的),有喜欢TBBT并欣赏他的工作的朋友可以去捐赠一下。

选择英文台词的原因是该剧本身台词就是英文为主,我看到的中文翻译是由YYeTs字幕组翻译的,信达雅,笑点也十分接地气,不过毕竟还是不如原文的“高频词”更有意义些。

网页分析

在谷歌浏览器中按F12使用“检查”功能,可以观察我们要爬取的网站的各项元素和它们的信息。

首先我们发现,每一季每一集的台词分别保存在各自的网页中,因此我们需要爬取多个网页,而这些网页的url都可以直接从robots.txt里的sitemap.xml里取即可(我们写爬虫时最好遵循robots.txt中所写的爬取该网站的建议,不过目前这个网站似乎并没有什么限制);

接着分析每个包含独立内容的网页中,该网站不仅包含了台词,就像剧本一样,它还包括了用斜体表示的场景信息和动作信息等,这些信息通常在台词所在标签对应的<em>标签或<i标签>下,而这部分信息我们其实是不需要的,我们可以根据这一特点只提取台词信息。注意所有台词都在<div class="entrytext">标签下,而每集又有所不同,我们发现台词的保存分为两类:

  1. 每句台词保存在<p>标签的<span>标签内,如第一季第一集
  2. 每句台词保存在<p>标签内,如第七季第二十三集

那么最后我们可以先将每集的台词独立保存,到时候只需要把对应部分的拼起来即可组成全部的台词。

编写爬虫

第一步,先利用sitemap.xml获取所有需要爬取的网页的url。这里我们先尝试使用传统的xml库中的ElementTree库来解析xml内容,通常对于一个本地文件,可以用parse方法来解析,而对于一个字符串,则可以用fromstring方法来解析,之后通过循环索引的方式获取深藏在xml中的可爬取url。

import urllib.request
import xml.etree.ElementTree as ET
response = urllib.request.urlopen(sitemap)
xml = response.read()
root = ET.fromstring(xml)  # 从parse中读出来的是tree,从fromstring中读出来的是root
urls = [child[0].text for child in root]  # 遍历root的子树并提取第一个子节点的文本内容
urls = urls[0:-3]  # 最后三个不是剧集的台词页面,而是网站的介绍页面,因此去掉

第二步,分别爬取每一集的网页并获取信息。这一步我们使用lxml库,它和传统的xml中的ElementTree库同样都是用来解析xml文档的&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值