前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >文本挖掘|R语言助力简·奥斯丁部分作品的情感分析

文本挖掘|R语言助力简·奥斯丁部分作品的情感分析

作者头像
黑妹的小屋
发布2020-08-05 11:15:19
1.2K0
发布2020-08-05 11:15:19
举报

文本挖掘之情感分析

‍‍‍‍ 整理文本进行情感分析是典型的文本分析案例,当打算深度阅读一篇文章时,可以利用我们对单词的情感意图的理解来推断一篇文章是积极的还是消极的,或者其他可能带有一些更微妙的情感特征,比如惊讶或厌恶。最近特别好奇读文学相关的本科生或者硕士生到底毕业论文是写啥,从网上了解一番之后发现,部分文科生的毕业论文是这样的,《从Jane Austen个人感情经历来看<傲慢与偏见>中体现的爱情婚姻观》、《某某作家部分作品及其爱情观的分析》、《浅析某某作家笔下的人物性格魅力:以xxx为例》~

为了深入了解文本挖掘工具以编程方式处理文本的情感内容,让我们谈谈观点挖掘或情绪分析的话题。分析文本情感思路是把文本看成多个单词的情感内容的组合,把整个文本的情感内容看成单词的情感内容的总和。典型文本分析的思维导图:

01

关于情感数据集

tidytext包提供了对几种情感词汇的访问集。有三种通用词汇:

AFINN 词典是Finn Årup Nielsen创建的,把单词的分值范围控制在-5到5之间,负数表示消极情绪,正数表示积极情绪。bing词典是Bing Liu 和collaborators等创建,以二进制方式把单词分为积极和消极两种类型。nrc词典是Saif Mohammad和Peter Turney提供的,以二进制的方式(“是”/“不是”)将词汇分为积极、消极、愤怒、期待、厌恶、恐惧、喜悦、悲伤、惊讶和信任。

函数get_sentiments()允许我们获得特定的一定度量情感词汇。

get_sentiments("bing")

02

内部连接的情绪分析

文本被整理为整洁文本Tidy Text的数据后,情绪分析就可以作为一个内部连接来完成。就像删除停止字是反连接操作一样,执行情绪分析也是一个内部连接操作。我们还是以Jane Austen简·奥斯丁代表作为案例,在文本挖掘| 某作者文章的词频统计排序中已经阐述如何通过unner_tokens获得整洁文本,接下来,使用group_by和mutate来构造一些列来记录每一个单词来自书中的哪一行和哪一章,再建立内连接情感数据集。

代码语言:javascript
复制
jane_austen_sentiment<-tidy_books_stop
%>%inner_join(get_sentiments("bing"))
%>%count(book,index=linenumber%/%80,sentiment)
%>%spread(sentiment,n,fill=0)
%>%mutate(sentiment=positive-negative)

代码含义:

使用Bing词典和inner_join()找到每个词的情绪分数,接下来,计算在每本书的定义部分中有多少积极和消极的词,定义了一个索引index跟踪我们正在计算的80行文本中的积极和消极情绪,最终使用整数除法计算80行文本的节数。%/%操作符执行整数除法(x %/% y等于底数(x/y))。使用spread(),可以在不同的列中有积极和消极的情绪,最后计算一个净情绪(正-负)。

我们来看一下处理前tidy_books_stop和处理后jane_austen_sentiment的数据变化。

03

绘图

在x轴上对索引进行绘图,让索引跟踪文本部分的叙述时间,了解叙事弧中情感是如何变化的。

代码语言:javascript
复制
ggplot(jane_austen_sentiment,aes(index,sentiment,fill=book))
+geom_col()+facet_wrap(~book,ncol=3,scales="free_x")

从图中可看出,每一部小说的情节是如何在故事的轨迹上向着积极或消极的情绪变化的。比如《傲慢与偏见》这本书中,在index50-75之间的文章内容还是比较积极向上的,基本没有消极情绪,心情不太好的人,可以优先阅读这几章的故事情节。

04

主要的积极词和消极词计数

利用count()计算一下tidy_books_stop这个数据集中每个词出现的次数。

代码语言:javascript
复制
>word_counts <- tidy_books_stop %>%
  inner_join(get_sentiments("bing")) %>%
  count(word, sentiment, sort = TRUE) %>%
  ungroup()
>word_counts

05

主要的积极词和消极词可视化

选择word_counts中n排名前20的词,绘制条形图

代码语言:javascript
复制
>counts<-word_counts %>%
  group_by(sentiment) %>%
  top_n(20) %>%
  ungroup() %>%
  mutate(word = reorder(word, n)) 
>counts
>ggplot(counts,aes(word, n, fill = sentiment)) +
  geom_col(show.legend = FALSE) +
  facet_wrap(~sentiment,ncol=1,scales = "free_y") +
  labs(y = "Number sentiment words",x ="Words") +
  coord_flip()

为了方便观察Words,让scales分面后的坐标系根据y轴调整之后不设定ncol,删除ncol=1之后如图:

很显然,从图中可以看出“miss”这个词被认为是否定的词,但在Jane Austen的作品中,它被用来称呼年轻的未婚女性。miss这个词在情绪分析时出现异常,可以把miss这个加入停止词中,在语料库构建过程中,通过删除停止词而不被统计。那么如何把miss这个词加入停止词词典中呢?

使用bind_rows()轻松地将“miss”添加到LXL的停止词列表中。

代码语言:javascript
复制
LXL_stop_words <- bind_rows(tibble(word = c("miss"), lexicon = c("lxl")), stop_words)
View(LXL_stop_words)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 菜鸟学数据分析之R语言 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档