利用Python和R对权游剧本进行NLP情绪分析


最近学会利用Python做了几个词云后,又应用NLP中情感分析,结合snownlp库完成了词云分类,做了积极和消极两类词云,效果图如下。
图1 图2

之后我对NLP的知识产生了兴趣,继续深挖,发现王树义老师的这个项目很符合我的口味,于是尝试撸之,下面记录过程。

1. 背景知识

情绪分析(emotional analysis)和情感分析(sentiment analysis)有相似之处。

相同之处是都是通过脚本对文本进行自动化分析,来获得情感的趋向。

不同之处情感分析的结果一般分为正向(positive)和负向(negative),而情绪分析包含的种类就比较多了。

加拿大国家研究委员会(National Research Council of Canada)官方发布的情绪词典包含了8种情绪,分别为:

  1. 愤怒(anger)
  2. 期待(anticipation)
  3. 厌恶(disgust)
  4. 恐惧(fear)
  5. 喜悦(joy)
  6. 悲伤(sadness)
  7. 惊讶(surprise)
  8. 信任(trust)

有了这些情绪的标记,可以轻松地对一段文本的情绪变化进行分析。

这个项目中,需要用到Python和R。这两种语言在目前数据科学领域里最受欢迎。Python的优势在于通用,而R的优势在于统计学家组成的社区。这些统计学家真是高产,也很酷,经常制造出令人惊艳的分析包。

这里就用Python来做前期的数据清理使得数据符合我们的要求便于处理,然后再将处理后的数据导入R的工作环境用R做情绪分析,并且把结果可视化输出。

2. 准备数据

项目中数据来源是《权利的游戏》第三季的第9集——“The Rains of Castamere”。

https://genius.com/Game-of-thrones-the-rains-of-castamere-annotated

图3

只需要全选剧本拷贝,然后创建个txt文本文件把内容粘贴进去,现在你就有可供分析的文本了。

再将文本放入你的工作目录中。

Python

我们需要用到 Jupyter Notebook

R

我们需要用到 R studio

3. 数据清理

我们首先需要清理文本数据,完成以下这两个任务:

  1. 把与剧情正文无关的,对我们做情绪分析没有用处的内容去除,;
  2. 将数据转换成R可以直接做情绪分析的结构化数据格式,如csv格式。

(以下操作在Jupyter Notebook中完成)

首先需要导入需要的工具包,这里导入数据分析中常用包pandas和re正则包

import pandas as pd
import re

然后读取当前目录下的剧本文本。

with open("权游.txt") as f:
    data = f.read()
    print(data)

输出结果:

[Opening Credits]

[First scene shows the location of Casterly Rock (ancestral seat of House Lannister) on a giant map of Westeros. There are several game pieces representing different House sigils located on different parts of the map.ROBB STARK and CATELYN STARK are at a campsite, within a tent lit up by candles]
...

数据正确读入。下面我们把正文以外的文本内容去掉。即去掉开头和结尾的非剧本正文内容。

Python split()方法

  • 描述

Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串

  • 语法

split() 方法语法:

str.split(str="", num=string.count(str)).
  • 参数

str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。

num – 分割次数。默认为 -1, 即分隔所有。

  • 返回值

返回分割后的字符串列表。

data =data.split
  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值