生活大爆炸(TBBT): 台词爬取、词云生成与NLP分析
通过《生活大爆炸》的台词,感受朋友们的智斗与欢乐。 #生活乐趣# #日常生活趣事# #读书分享乐趣# #电影笑点解析#
《生活大爆炸》(英文: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">标签下,而每集又有所不同,我们发现台词的保存分为两类:
每句台词保存在<p>标签的<span>标签内,如第一季第一集 每句台词保存在<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)
urls = [child[0].text for child in root]
urls = urls[0:-3]
python
运行
第二步,分别爬取每一集的网页并获取信息。这一步我们使用lxml库ÿ
网址:生活大爆炸(TBBT): 台词爬取、词云生成与NLP分析 https://www.yuejiaxmz.com/news/view/1169827
相关内容
python爬虫与数据分析之《向往的生活爬取》NLP第12课:完全基于情感词典的文本情感分析
马季相声吹牛完整台词,马季相声吹牛台词大全
生活大爆炸 第一季的剧评 (381)
16个双语餐饮热词发布 热词反映生活消费方式变迁
python爬取前程无忧分析一波机械职位信息
网络时代信息爆炸对人们生活方式的影响分析
生活小窍门分享
《生活大爆炸》
现代学生群体的压力与生活的共存性分析