R语言文本挖掘、情感分析和可视化哈利波特小说文本数据

最近我们被客户要求撰写关于文本挖掘的研究报告。一旦我们清理了我们的文本并进行了一些基本的词频分析,下一步就是了解文本中的观点或情感。

由Kaizong Ye,Sherry Deng撰写

这被认为是情感分析,本教程将引导你通过一个简单的方法来进行情感分析。本教程是对情感分析的一个介绍。本教程建立在tidy text教程的基础上,所以如果你没有读过该教程,我建议你从那里开始。在本教程中,我包括以下内容。


简而言之

  1. 复制的要求:重现本教程中的分析需要什么?
  2. 情感数据集:用来对情感进行评分的主要数据集
  3. 基本情感分析:执行基本的情感分析
  4. 比较情感:比较情感库中的情感差异
  5. 常见的情绪词:找出最常见的积极和消极词汇
  6. 大单元的情感分析:在较大的文本单元中分析情感,而不是单个词。

复制要求

本教程利用了harrypotter文本数据,以说明文本挖掘和分析能力。

×

情感分析简述

文本情感分析(Sentiment Analysis)是指利用自然语言处理和文本挖掘技术,对带有情感色彩的主观性文本进行分析、处理和抽取的过程[1]。目前,文本情感分析研究涵盖了包括自然语言处理、文本挖掘、信息检索、信息抽取、机器学习和本体学等多个领域,得到了许多学者以及研究机构的关注,近几年持续成为自然语言处理和文本挖掘领域研究的热点问题之一。情感分析任务按其分析的粒度可以分为篇章级,句子级,词或短语级;按其处理文本的类别可分为基于产品评论的情感分析和基于新闻评论的情感分析;按其研究的任务类型,可分为情感分类,情感检索和情感抽取等子问题[2]。文本情感分析的基本流程如图 1 所示,包括从原始文本爬取,文本预处理,语料库和情感词库构建以及情感分析结果等全流程。由于文本原始素材爬取,分词等预处理技术已比较成熟,本文接下来将通过情感分析的主要任务情感分类,情感检索,情感抽取问题来分析和阐述已有的相关研究工作。




情感分类

情感分类又称情感倾向性分析,是指对给定的文本,识别其中主观性文本的倾向是肯定还是否定的,或者说是正面还是负面的,是情感分析领域研究最多的。通常网络文本存在大量的主观性文本和客观性文本。客观性文本是对事物的客观性描述,不带有感情色彩和情感倾向,主观性文本则是作者对各种事物的看法或想法,带有作者的喜好厌恶等情感倾向。情感分类的对象是带有情感倾向的主观性文本,因此情感分类首先要进行文本的主客观分类。文本的主客观分类主要以情感词识别为主,利用不同的文本特征表示方法和分类器进行识别分类,对网络文本事先进行主客观分类,能够提高情感分类的速度和准确度[3]。纵观目前主观性文本情感倾向性分析的研究工作,主要研究思路分为基于语义的情感词典方法和基于机器学习的方法。


基于语义的情感词典方法

(1) 构建词典


情感词典的构建是情感分类的前提和基础,目前在实际使用中,可将其归为 4 类:通用情感词、程度副词、否定词

、领域词。目前国内外,情感词典的构建方法主要是利用已有电子词典扩展生成情感词典。英文方面主要是基于对英文词典 的Word  Net 的扩充,Hu 和 Liu[4]在已手工建立种子形容词词汇表的基础上,利用 World Net 中词间的同义和近义关系判断情感词的情感倾向,并以此来判断观点的情感极性。中文方面则主要是对知网 How net 的扩充,朱嫣岚[5]利用语义相似度计算方法计算词语与基准情感词集的语义相似度,以此推断该词语的情感倾向。此外,还可以建立专门的领域词典,以提高情感分类的准确性。


(2)构建倾向性计算算法


基于语义的情感词典的倾向性计算不同于所需大量训练数据集的机器学习算法,主要是利用情感词典及句式词库分析文本语句的特殊结构及情感倾向词,采用权值算法代替传统人工判别或仅利用简单统计的方法进行情感分类。给情感强度不同的情感词赋予不同权值,然后进行加权求和。文献[6]利用加权平均算法式(1)计算,可有效提高通用领域情感分类的效率和准确率




其中,分别代表表达正面情感和负面情感的词汇数目;分别代表正面情感词汇和负面情感词汇的权值。


(3)确定阈值来判断文本倾向性


一般情况下,加权计算结果为正是正面倾向,结果为负是负面倾向 ,得分为零无倾向。所得结果评价一般采用自然语言中

经常使用的正确率、召回率和 F 值来评判算法效果。

基于情感词典的方法和基于机器学习的分类算法相比,虽属于粗粒度的倾向性分类方法,但由于不依赖标注好的训练集,实现相对简单,对于普遍通用领域的网络文本可有效快速地进行情感分类。


基于机器学习的情感分类方法

文本情感倾向性分析与传统的基于主题的文本分类相似但有所不同,基于主题的文本分类是把文本分类到各个预定义的主题上,如军事,互联网,政治,体育等,而情感分类不是基于内容本身的,而是按照文本持有的情感、态度进行判断。现有任何机器学习的分类方法都可以用到情感分类中来。基于机器学习的情感分类,其大致流程如下:首先人工标注文本倾向性作为训练集,提取文本情感特征,通过机器学习的方法构造情感分类器,待分类的文本通过分类器进行倾向性分类。常用的情感分类特征包括情感词,词性,句法结构,否定表达模板,连接,语义话题等[7],研究者通过挖掘各种不同的特征以期望提高情感分类的能。常用的特征提取方法有信息增益( Information Gain,IG),CHI 统计量( Chi - square,CHI) 和文档频率( Document Frequency,DF) 等。常用的分类方法有中心向量分类方法、K - 近邻(K - Nearest - Neighbor,KNN) 分类方法、贝叶斯分类器、支持向量机、条件随机场、最大熵分类器等。

最早从事情感分析研究的 Pang 等人[8]使用词袋(Bag - of - Feature) 框架选定文本的 N 元语法( N -Gram) 和词性( POS) 等作为情感 uo 特征,使用有监督的机器学习的方法将电影评论分为正向和负向两类,分别使用朴素贝叶斯,最大熵模型和支持向量机作为有监督学习算法的分类器。结果显示支持向量机在几种分类方法中效果最好,分类准确率达到 80% 。文本情感分类的准确率难以达到普通文本分类的水平,主要是情感文本中复杂的情感表达和大量的情感歧义造成的。在基于机器学习的情感分类算法中,每篇文章被转换成一个对应的特征向量来表示。特征选择的好坏将直接影响情感分析任务的性能。在 Pang 等人的研究基础上,后续研究主要是把情感分类作为一个特征优化任务[9- 11]。随着语义特征信息的加入和训练语料库的发展,基于机器学习的分类将会有广阔的发展前景。


情感检索

情感检索是从海量文本中查询到观点信息,根据主题相关度和观点倾向性对结果排序。情感检索返回的结果要同时满足主题相关和带有情感倾向或指定的情感倾向,是比情感分类更为复杂的任务。主题相关度和观点倾向性对结果排序,随着人们网络检索需求的增高,在传统搜索中加入情感倾向成了搜索技术中一个新的研究热点。和传统的互联网搜索相似,情感检索有两个主要任务:(1) 检索和查询相关的文档或句子。(2)对检索的相关文档或句子进行排序。与传统搜索不同的是互联网搜索的任务只要求找到和查询相关的文档和句子,而情感检索还要确定文档和句子是否表达了观点,以及观点是正面的或是负面的。目前情感检索主要实现方法有两种:一是按传统信息检索模型进行主题相关的文档检索,对检索结果进行情感分类;另一种是同时计算主题相关值和情感倾向值进行检索。第一种方法一般使用传统的检索模型以及较为成熟的查询扩展技术,然后用情感分类方法进行倾向性计

算。文献[12 ~ 13]给出的情感检索系统是国际文本检索会议 TREC(Text Retrieval Evaluation Conference)博客观点搜索任务的优胜者,该系统分为两部分检索部分和观点分类部分。检索部分完成传统的信息检索任务,同时在处理用户查询时将用户查询中的概念进行识别和消歧义,对于每个搜索查询进行同义词扩展,使用概念和关键字针对扩展后的查询对每个文档计算一个相似度,查询的关键字和文档的相关度是这两种相似度的综合。观点分类部分使用监督学习的方法使用两个分类器将文档分为两个类别带观点和不带观点的,带观点的文档再分为正面,负面或者混合的观点。第一个分类器训练数据是从评价网站包括 rateilt-

all. com 和 epinion. com 收集大量带观点的数据和从维基百科等客观性网站收集不带观点的训练数据。第二个分类器训练数据来自评论网站包含打分的评论,低的打分表明负面观点,高的打分表明正面观点。这里两种监督学习的分类器都采用支持向量机。在 TREC博客检索数据集研究的基础上,研究者采用不同的情感分类方法开展了后续研究[14 - 16]。


上面的方法是将检索和情感分类独立计算的,实际中主题相关和情感匹配是有关联的,需要同时计算主题相关和情感匹配,这是因为不同的情感词在文档中对不同的查询词下可能有相反的情感倾向。第二种方法则是同时考虑主题相关和情感文档排序,选择排序策略时需要同时兼顾。很多学者[17 - 18]对排序策略进行了研究,一般是分别计算情感倾向值和查询相关度值,然后加权求和进行排序。Zhang 等人[19]提出一种融合文档情感得分和文档查询相关度得分的概率生成模型排序方法,取得了理想的效果。

情感信息检索是传统信息检索技术和情感分析技术的融合,如何更好的融合二者得到理想的情感检索结果是未来要重点关注的。


情感抽取

情感抽取是指抽取情感文本中有价值的情感信息,其要判断一个单词或词组在情感表达中扮演的角色,包括情感表达者识别,评价对象识别,情感观点词识别等任务。情感表达者识别又称观点持有者抽取,其是观点、评论的隶属者。在社交媒体和产品评论中,观点持有者通常是文本的作者或者评论员,其的登录账号是可见的,观点持有者抽取比较简单。而对于新闻文章和其他一些表达观点的任务或者组织显式的出现在文档时,观点持有者一般则是由机构名或人名组成,所以可采用命名实体识别方法进行抽取。Kim[20]等人借助语义角色标注来完成观点持有者的抽取。然而这些处理方法会导致较低的语言覆盖现象和较差的领域适应性,可以通过基于模式识别的信息抽取 ( Information Extraction) 和 机 器 学 习 ( Machine Learning )技 术 来解决[21]。评价对象和情感词抽取在情感分析中具有重要作用。利用评价对象和情感词的抽取,可以构建领域相关的主题词表和情感词表,情感词表的构建在情感分类部分已做阐述。评价对象是指某段评论中的主题,是评论文本中评价词语修饰的对象,现有的研究大多

将评价对象限定在名词或名词短语的范畴内,一般使用基于模板和规则的方法抽取评价对象。规则的制定通常基于一系列的语言分析和预处理过程,命名实体识别,词性标注和句法分析等方法[22 - 25]都被用来进行评价对象抽取。文献[26]便是使用 3 条限制等级逐渐渐进的词性规则从评价对象集中抽取评价对象,取得了较好的结果。

情感抽取是情感分析的基础任务,通过对大量的情感文本分析,有价值的情感信息抽取对于情感分析的上层任务情感检索和情感分类有直接帮助,如何准确抽取情感信息一直都是研究者关注的重点。


文本情感分析评测


近年来,情感分析得到了越来越多研究机构和学者的关注,在 SIGIR、ACL、WWW、CIKM、WSDM 等著名国际会议上,针对这一问题的研究成果层出不穷[27],国内外研究机构组织了众多相关评测来推动情感分析技术的发展。


由国际文本检索会议 TREC 针对英文文本观点检索任务的博客检索任务(Blog Track),篇章情感分类任务,以及其他一些有趣的情感分析任务;由日本国立信息学研究所主办的搜索引擎评价国际会议 NTCIR(NIITest Collection for IR Systems) 针对日、韩、英、中文文本的情感分类以及观点持有者抽取任务。由中文信息学会信息检索委员会主办的每年一次的中文倾向性分析评测 C

OAE(Chinese Opinion Analysis Evaluation) 已举办了 5 届,在关注情感词语和观点句子的抽取以及倾向性识别的基础上重点对于否定句、比较句以及微博观点句进行评测[28]。众多研究机构的评测推动了情感分析研究的发展,出现了很多有代表性的情感分析语料库资源,文献[29 ~ 30]对语料库构建进行了详细阐述,如康奈尔影评数据集(Cornell Movie - Review Datasets),多视角问答( Multiple - Perspective Question Answering,MPQA)语料库,TREC 测试集,NTCIR 多语言语料库(

 NTCIRmultilingual corpus),中文 COAE 语料库等。


参考文献


[1] PANG B,LEE L. Opinion mining and sentiment analysis[J].Foundations and Trends in InformationRetrieval,2008,2 (1 -2) :130 - 135.

[2] 赵妍妍,秦兵,刘挺,等. 文本倾向性分析[J]. 软件学报,2010,21(8) :1834 - 1848.

[3] 厉小军,戴霖,施寒潇,等. 文本倾向性分析综述[J]. 浙江大学学报,2011,45(7):1167 - 1175.

[4] HU M,LIU B. Mining and summarizing customer reviews[C]. NY,USA:Proceedings of Knowledge Discoveryand Da-ta Mining,2004:168 - 177.

[5] 朱嫣岚,闵锦,周雅倩,等. 基于 How Net 的词汇语义倾向计算[J]. 中文信息学报,2006,20(1):14 - 20.

[6] 张昊旻,石博莹,刘栩宏. 基于权值算法的中文情感分析系统研究与实现[J]. 计算机应用研究,201229 (12):4571 - 4573.


[7] 李方涛. 基于产品评论的情感分析研究[D]. 北京:清华大学,2011.


[8] PANG B,LEE L,VAITHYANATHAN S. Thumbs up:senti-ment classification using machine learning techniques [

C].PA,USA:Proceedings of the ACL - 02 Conference on Empir-ical methods in natural language processing - Volume 10,Stroudsburg,Association for Computational Linguistics,2002:79 - 86.

[9] MELVILLE P,GRYC W,LAWRENCE. Sentiment analysis ofblogs by combining lexical knowledge with text classification[C]. New York:Proceedings of SIGKDD,ACM,2009.

[10] LI S,HUANG C,ZHOU G. Employing personal impersonal viewsin supervised and semisupervised sentiment classification [C].New York:Proceedings of ACL,ACM,2010:414 - 423.

[11] KUMAR A,SEBASTIAN T M. Sentiment analysis on twitter[J]. International Journal of Computer ScienceIssues,2012,9(4) :628 - 633.

[12] ZHANG W,YU C,MENG W. Opinion retrieval from blogs[C]. Proceedings of the Sixteenth ACM Conferenceon Con-ference on Information and Knowledge Management,ACM,2007:831 - 840.

[13] ZHANG W,JIA L,YU C,et al. Improve the effectiveness ofthe opinion retrieval and opinion polarity classification [C].MA USA:Proceedings of the 17th ACM Conference on Infor-mation and Knowledge Management,ACM,2008:1415 - 1416.



library(tidyverse) # 数据处理和绘图
library(stringr) # 文本清理和正则表达式
library(tidytext) # 提供额外的文本挖掘功能

我们正在处理的七部小说,包括

  1. philosophers_stone:《哈利-波特与魔法石》(1997)。
  2. chamber_of_secrets: 《哈利-波特与密室》(1998)
  3. 阿兹卡班的囚徒(prisoner_of_azkaban)。Harry Potter and the Prisoner of Azkaban (1999)
  4. Goblet_of_fire: Harry Potter and the Goblet of Fire (2000)
  5. Order_of_the_phoenix: Harry Potter and the Order of the Phoenix (2003)
  6. half_blood_prince: 哈利-波特与混血王子(2005)
  7. deathly_hallows: 哈利-波特与死亡圣器(2007)。

每个文本都在一个字符矢量中,每个元素代表一个章节。例如,下面说明了philosophers_stone的前两章的原始文本。


自适应网页宽度的 Bilibili 视频

视频

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

探索见解

去bilibili观看

探索更多视频

philosophers_stone\[1:2\]
## \[1\] "THE BOY WHO LIVED  Mr. and Mrs. Dursley, of number four, Privet Drive, were proud to say that they were perfectly normal, thank
## you very much. They were the last people you'd expect to be involved in anything strange or mysterious, because they just didn't hold
## with such nonsense.  Mr. Dursley was the director of a firm called Grunnings, which made drills. He was a big, beefy man with hardly
## any neck, although he did have a very large mustache. Mrs. Dursley was thin and blonde and had nearly twice the usual amount of neck,
## which came in very useful as she spent so much of her time craning over garden fences, spying on the neighbors. The Dursleys had a
## small son called Dudley and in their opinion there was no finer boy anywhere.  The Dursleys had everything they wanted, but they also
## had a secret, and their greatest fear was that somebody would discover it. They didn't think they could bear it if anyone found out
## about the Potters. Mrs. Potter was Mrs. Dursley's sister, but they hadn'... <truncated>
## \[2\] "THE VANISHING GLASS  Nearly ten years had passed since the Dursleys had woken up to find their nephew on the front step, but
## Privet Drive had hardly changed at all. The sun rose on the same tidy front gardens and lit up the brass number four on the Dursleys'
## front door; it crept into their living room, which was almost exactly the same as it had been on the night when Mr. Dursley had seen
## that fateful news report about the owls. Only the photographs on the mantelpiece really showed how much time had passed. Ten years ago,
## there had been lots of pictures of what looked like a large pink beach ball wearing different-colored bonnets -- but Dudley Dursley was
## no longer a baby, and now the photographs showed a large blond boy riding his first bicycle, on a carousel at the fair, playing a
## computer game with his father, being hugged and kissed by his mother. The room held no sign at all that another boy lived in the house,
## too.  Yet Harry Potter was still there, asleep at the moment, but no... <truncated>

情感数据集

有各种各样的字典存在,用于评估文本中的观点或情感。tidytext包在sentiments数据集中包含了三个情感词典。

sentiments
## # A tibble: 23,165 × 4
##           word sentiment lexicon score
##          <chr>     <chr>   <chr> <int>
## 1       abacus     trust     nrc    NA
## 2      abandon      fear     nrc    NA
## 3      abandon  negative     nrc    NA
## 4      abandon   sadness     nrc    NA
## 5    abandoned     anger     nrc    NA
## 6    abandoned      fear     nrc    NA
## 7    abandoned  negative     nrc    NA
## 8    abandoned   sadness     nrc    NA
## 9  abandonment     anger     nrc    NA
## 10 abandonment      fear     nrc    NA
## # ... with 23,155 more rows

这三个词库是

  • AFINN
  • bing
  • nrc

这三个词库都是基于单字(或单词)的。这些词库包含了许多英语单词,这些单词被分配了积极/消极情绪的分数,也可能是快乐、愤怒、悲伤等情绪的分数。nrc词典以二元方式(”是”/”否”)将单词分为积极、消极、愤怒、期待、厌恶、恐惧、快乐、悲伤、惊讶和信任等类别。bing词库以二元方式将单词分为积极和消极类别。AFINN词库给单词打分,分数在-5到5之间,负分表示消极情绪,正分表示积极情绪。

# 查看单个词库
get_sentiments("afinn")
get_sentiments("bing")
get_sentiments("nrc")

基本情感分析

为了进行情感分析,我们需要将我们的数据整理成一个整齐的格式。下面将所有七本《哈利-波特》小说转换为一个tibble,其中每个词都按章节按书排列。更多细节请参见整洁文本教程。

#设定因素,按出版顺序保存书籍
series$book <- factor(series$book, levels = rev(titles))

series
## # A tibble: 1,089,386 × 3
##                   book chapter    word
## *               <fctr>   <int>   <chr>
## 1  Philosopher's Stone       1     the
## 2  Philosopher's Stone       1     boy
## 3  Philosopher's Stone       1     who
## 4  Philosopher's Stone       1   lived
## 5  Philosopher's Stone       1      mr
## 6  Philosopher's Stone       1     and
## 7  Philosopher's Stone       1     mrs
## 8  Philosopher's Stone       1 dursley
## 9  Philosopher's Stone       1      of
## 10 Philosopher's Stone       1  number
## # ... with 1,089,376 more rows

现在让我们使用nrc情感数据集来评估整个《哈利-波特》系列所代表的不同情感。我们可以看到,负面情绪的存在比正面情绪更强烈。

        filter(!is.na(sentiment)) %>%
        count(sentiment, sort = TRUE)
## # A tibble: 10 × 2
##       sentiment     n
##           <chr> <int>
## 1      negative 56579
## 2      positive 38324
## 3       sadness 35866
## 4         anger 32750
## 5         trust 23485
## 6          fear 21544
## 7  anticipation 21123
## 8           joy 14298
## 9       disgust 13381
## 10     surprise 12991

这给出了一个很好的整体感觉,但如果我们想了解每部小说的过程中情绪是如何变化的呢?要做到这一点,我们要进行以下工作。


数据视域下图书馆话题情感分析

阅读文章


  1. 创建一个索引,将每本书按500个词分开;这是每两页的大致字数,所以这将使我们能够评估情绪的变化,甚至是在章节中的变化。
  2. 用inner_join连接bing词典,以评估每个词的正面和负面情绪。
  3. 计算每两页有多少个正面和负面的词
  4. 分散我们的数据
  5. 计算出净情绪(正面-负面)。
  6. 绘制我们的数据
        ggplot(aes(index, sentiment, fill = book)) +
          geom_bar(alpha = 0.5")


随时关注您喜欢的主题


现在我们可以看到每部小说的情节是如何在故事的发展轨迹中朝着更积极或更消极的情绪变化。

比较情感

有了情感词典的几种选择,你可能想了解更多关于哪一种适合你的目的的信息。让我们使用所有三种情感词典,并检查它们对每部小说的不同之处。

        summarise(sentiment = sum(score)) %>%
        mutate(method = "AFINN")

bing\_and\_nrc <-
                  inner\_join(get\_sentiments("nrc") %>%
                                     filter(sentiment %in% c("positive", "negative"))) %>%
              
        spread(sentiment, n, fill = 0) %>%

我们现在有了对每个情感词库的小说文本中净情感(正面-负面)的估计。让我们把它们绘制出来。

  ggplot(aes(index, sentiment, fill = method)) +
  geom_bar(alpha = 0.8, stat = "identity", show.legend = FALSE) +
  facet_grid(book ~ method)

计算情感的三种不同的词典给出的结果在绝对意义上是不同的,但在小说中却有相当相似的相对轨迹。我们看到在小说中差不多相同的地方有类似的情绪低谷和高峰,但绝对值却明显不同。在某些情况下,AFINN词典似乎比NRC词典发现了更多积极的情绪。这个输出结果也使我们能够在不同的小说之间进行比较。

首先,你可以很好地了解书籍长度的差异–《菲尼克斯的秩序》比《哲学家的石头》长很多。其次,你可以比较一个系列中的书籍在情感方面的不同。

常见情绪词

同时拥有情感和单词的数据框架的一个好处是,我们可以分析对每种情感有贡献的单词数。

word_counts
## # A tibble: 3,313 × 3
##      word sentiment     n
##     <chr>     <chr> <int>
## 1    like  positive  2416
## 2    well  positive  1969
## 3   right  positive  1643
## 4    good  positive  1065
## 5    dark  negative  1034
## 6   great  positive   877
## 7   death  negative   757
## 8   magic  positive   606
## 9  better  positive   533
## 10 enough  positive   509
## # ... with 3,303 more rows

我们可以直观地查看,以评估每种情绪的前n个词。

        ggplot(aes(reorder(word, n), n, fill = sentiment)) +
          geom_bar(alpha = 0.8, stat = "identity"

例如,一些情感分析算法不仅仅关注单字(即单个单词),而是试图了解一个句子的整体情感。这些算法试图理解

较大单位的情绪分析

很多有用的工作可以通过在词的层面上进行标记化来完成,但有时查看不同的文本单位是有用的或必要的。

我今天过的不开心。

是一个悲伤的句子,而不是一个快乐的句子,因为有否定词。斯坦福大学的CoreNLP工具是这类情感分析算法的例子。对于这些,我们可能想把文本标记为句子。我使用philosophers_stone数据集来说明。

tibble(text = philosophers_stone)
##                                                                       sentence
##                                                                          <chr>
## 1                                              the boy who lived  mr. and mrs.
## 2  dursley, of number four, privet drive, were proud to say that they were per
## 3  they were the last people you'd expect to be involved in anything strange o
## 4                                                                          mr.
## 5      dursley was the director of a firm called grunnings, which made drills.
## 6  he was a big, beefy man with hardly any neck, although he did have a very l
## 7                                                                         mrs.
## 8  dursley was thin and blonde and had nearly twice the usual amount of neck, 
## 9  the dursleys had a small son called dudley and in their opinion there was n
## 10 the dursleys had everything they wanted, but they also had a secret, and th
## # ... with 6,588 more rows

参数token = “句子 “试图通过标点符号来分割文本。

让我们继续按章节和句子来分解philosophers_stone文本。

                        text = philosophers_stone) %>% 
  unnest_tokens(sentence, text, token = "sentences")

这将使我们能够按章节和句子来评估净情绪。首先,我们需要追踪句子的编号,然后我创建一个索引,追踪每一章的进度。然后,我按字数对句子进行解嵌。这就给了我们一个tibble,其中有每一章中按句子分列的单个词。现在,像以前一样,我加入AFINN词典,并计算每一章的净情感分数。我们可以看到,最积极的句子是第9章的一半,第17章的末尾,第4章的早期,等等。

        group_by(chapter, index) %>%
        summarise(sentiment = sum(score, na.rm = TRUE)) %>%
        arrange(desc(sentiment))


## Source: local data frame \[1,401 x 3\]
## Groups: chapter \[17\]
## 
##    chapter index sentiment
##      <int> <dbl>     <int>
## 1        9  0.47        14
## 2       17  0.91        13
## 3        4  0.11        12
## 4       12  0.45        12
## 5       17  0.54        12
## 6        1  0.25        11
## 7       10  0.04        11
## 8       10  0.16        11
## 9       11  0.48        11
## 10      12  0.70        11
## # ... with 1,391 more rows

我们可以用一个热图来形象地说明这一点,该热图显示了我们在每一章的进展中最积极和最消极的情绪。

ggplot(book_sent) +
        geom_tile(color = "white") +


可下载资源

关于作者

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

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

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

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

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


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

技术干货

最新洞察

This will close in 0 seconds