R語(yǔ)言文本挖掘、情感分析和可視化哈利波特小說(shuō)文本數(shù)據(jù)|附代碼數(shù)據(jù)
全文下載鏈接:http://tecdat.cn/?p=22984
最近我們被客戶要求撰寫關(guān)于文本挖掘的研究報(bào)告,包括一些圖形和統(tǒng)計(jì)輸出。
一旦我們清理了我們的文本并進(jìn)行了一些基本的詞頻分析,下一步就是了解文本中的觀點(diǎn)或情感。這被認(rèn)為是情感分析,本教程將引導(dǎo)你通過(guò)一個(gè)簡(jiǎn)單的方法來(lái)進(jìn)行情感分析 。
簡(jiǎn)而言之
本教程是對(duì)情感分析的一個(gè)介紹。本教程建立在tidy text教程的基礎(chǔ)上,所以如果你沒有讀過(guò)該教程,我建議你從那里開始。在本教程中,我包括以下內(nèi)容。
要求:重現(xiàn)本教程中的分析需要什么?
情感數(shù)據(jù)集:用來(lái)對(duì)情感進(jìn)行評(píng)分的主要數(shù)據(jù)集
基本情感分析:執(zhí)行基本的情感分析
比較情感:比較情感庫(kù)中的情感差異
常見的情緒詞:找出最常見的積極和消極詞匯
大單元的情感分析:在較大的文本單元中分析情感,而不是單個(gè)詞。
復(fù)制要求
本教程利用了harrypotter文本數(shù)據(jù),以說(shuō)明文本挖掘和分析能力。
library(tidyverse)?#?數(shù)據(jù)處理和繪圖library(stringr)?#?文本清理和正則表達(dá)式library(tidytext)?#?提供額外的文本挖掘功能
我們正在處理的七部小說(shuō),包括
philosophers_stone:《哈利-波特與魔法石》(1997)。
chamber_of_secrets: 《哈利-波特與密室》(1998)
阿茲卡班的囚徒(prisoner_of_azkaban)。Harry Potter and the Prisoner of Azkaban (1999)
Goblet_of_fire: Harry Potter and the Goblet of Fire (2000)
Order_of_the_phoenix: Harry Potter and the Order of the Phoenix (2003)
half_blood_prince: 哈利-波特與混血王子(2005)
deathly_hallows: 哈利-波特與死亡圣器(2007)。
每個(gè)文本都在一個(gè)字符矢量中,每個(gè)元素代表一個(gè)章節(jié)。例如,下面說(shuō)明了philosophers_stone的前兩章的原始文本。
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>
情感數(shù)據(jù)集
有各種各樣的字典存在,用于評(píng)估文本中的觀點(diǎn)或情感。tidytext包在sentiments數(shù)據(jù)集中包含了三個(gè)情感詞典。
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
這三個(gè)詞庫(kù)是
AFINN
bing
nrc
這三個(gè)詞庫(kù)都是基于單字(或單詞)的。這些詞庫(kù)包含了許多英語(yǔ)單詞,這些單詞被分配了積極/消極情緒的分?jǐn)?shù),也可能是快樂、憤怒、悲傷等情緒的分?jǐn)?shù)。nrc詞典以二元方式("是"/"否")將單詞分為積極、消極、憤怒、期待、厭惡、恐懼、快樂、悲傷、驚訝和信任等類別。bing詞庫(kù)以二元方式將單詞分為積極和消極類別。AFINN詞庫(kù)給單詞打分,分?jǐn)?shù)在-5到5之間,負(fù)分表示消極情緒,正分表示積極情緒。
#?查看單個(gè)詞庫(kù)get_sentiments("afinn")get_sentiments("bing")get_sentiments("nrc")
基本情感分析
為了進(jìn)行情感分析,我們需要將我們的數(shù)據(jù)整理成一個(gè)整齊的格式。下面將所有七本《哈利-波特》小說(shuō)轉(zhuǎn)換為一個(gè)tibble,其中每個(gè)詞都按章節(jié)按書排列。更多細(xì)節(jié)請(qǐng)參見整潔文本教程。
#設(shè)定因素,按出版順序保存書籍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
現(xiàn)在讓我們使用nrc情感數(shù)據(jù)集來(lái)評(píng)估整個(gè)《哈利-波特》系列所代表的不同情感。我們可以看到,負(fù)面情緒的存在比正面情緒更強(qiáng)烈。
????????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
這給出了一個(gè)很好的整體感覺,但如果我們想了解每部小說(shuō)的過(guò)程中情緒是如何變化的呢?要做到這一點(diǎn),我們要進(jìn)行以下工作。
創(chuàng)建一個(gè)索引,將每本書按500個(gè)詞分開;這是每?jī)身?yè)的大致字?jǐn)?shù),所以這將使我們能夠評(píng)估情緒的變化,甚至是在章節(jié)中的變化。
用inner_join連接bing詞典,以評(píng)估每個(gè)詞的正面和負(fù)面情緒。
計(jì)算每?jī)身?yè)有多少個(gè)正面和負(fù)面的詞
分散我們的數(shù)據(jù)
計(jì)算出凈情緒(正面-負(fù)面)。
繪制我們的數(shù)據(jù)
????????ggplot(aes(index,?sentiment,?fill?=?book))?+??????????geom_bar(alpha?=?0.5")

現(xiàn)在我們可以看到每部小說(shuō)的情節(jié)是如何在故事的發(fā)展軌跡中朝著更積極或更消極的情緒變化。
點(diǎn)擊標(biāo)題查閱往期內(nèi)容

主題挖掘LDA和情感分析圖書館話題知乎用戶問(wèn)答行為數(shù)據(jù)

左右滑動(dòng)查看更多

01

02

03

04

比較情感
有了情感詞典的幾種選擇,你可能想了解更多關(guān)于哪一種適合你的目的的信息。讓我們使用所有三種情感詞典,并檢查它們對(duì)每部小說(shuō)的不同之處。
????????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)?%>%
我們現(xiàn)在有了對(duì)每個(gè)情感詞庫(kù)的小說(shuō)文本中凈情感(正面-負(fù)面)的估計(jì)。讓我們把它們繪制出來(lái)。
??ggplot(aes(index,?sentiment,?fill?=?method))?+??geom_bar(alpha?=?0.8,?stat?=?"identity",?show.legend?=?FALSE)?+??facet_grid(book?~?method)

計(jì)算情感的三種不同的詞典給出的結(jié)果在絕對(duì)意義上是不同的,但在小說(shuō)中卻有相當(dāng)相似的相對(duì)軌跡。我們看到在小說(shuō)中差不多相同的地方有類似的情緒低谷和高峰,但絕對(duì)值卻明顯不同。在某些情況下,AFINN詞典似乎比NRC詞典發(fā)現(xiàn)了更多積極的情緒。這個(gè)輸出結(jié)果也使我們能夠在不同的小說(shuō)之間進(jìn)行比較。首先,你可以很好地了解書籍長(zhǎng)度的差異--《菲尼克斯的秩序》比《哲學(xué)家的石頭》長(zhǎng)很多。其次,你可以比較一個(gè)系列中的書籍在情感方面的不同。
常見情緒詞
同時(shí)擁有情感和單詞的數(shù)據(jù)框架的一個(gè)好處是,我們可以分析對(duì)每種情感有貢獻(xiàn)的單詞數(shù)。
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
我們可以直觀地查看,以評(píng)估每種情緒的前n個(gè)詞。
????????ggplot(aes(reorder(word,?n),?n,?fill?=?sentiment))?+??????????geom_bar(alpha?=?0.8,?stat?=?"identity"

較大單位的情緒分析
很多有用的工作可以通過(guò)在詞的層面上進(jìn)行標(biāo)記化來(lái)完成,但有時(shí)查看不同的文本單位是有用的或必要的。例如,一些情感分析算法不僅僅關(guān)注單字(即單個(gè)單詞),而是試圖了解一個(gè)句子的整體情感。這些算法試圖理解
我今天過(guò)的不開心。
是一個(gè)悲傷的句子,而不是一個(gè)快樂的句子,因?yàn)橛蟹穸ㄔ~。斯坦福大學(xué)的CoreNLP工具是這類情感分析算法的例子。對(duì)于這些,我們可能想把文本標(biāo)記為句子。我使用philosophers_stone數(shù)據(jù)集來(lái)說(shuō)明。
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
參數(shù)token = "句子 "試圖通過(guò)標(biāo)點(diǎn)符號(hào)來(lái)分割文本。
讓我們繼續(xù)按章節(jié)和句子來(lái)分解philosophers_stone文本。
????????????????????????text?=?philosophers_stone)?%>%???unnest_tokens(sentence,?text,?token?=?"sentences")
這將使我們能夠按章節(jié)和句子來(lái)評(píng)估凈情緒。首先,我們需要追蹤句子的編號(hào),然后我創(chuàng)建一個(gè)索引,追蹤每一章的進(jìn)度。然后,我按字?jǐn)?shù)對(duì)句子進(jìn)行解嵌。這就給了我們一個(gè)tibble,其中有每一章中按句子分列的單個(gè)詞?,F(xiàn)在,像以前一樣,我加入AFINN詞典,并計(jì)算每一章的凈情感分?jǐn)?shù)。我們可以看到,最積極的句子是第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
我們可以用一個(gè)熱圖來(lái)形象地說(shuō)明這一點(diǎn),該熱圖顯示了我們?cè)诿恳徽碌倪M(jìn)展中最積極和最消極的情緒。
ggplot(book_sent)?+????????geom_tile(color?=?"white")?+

點(diǎn)擊文末?“閱讀原文”
獲取全文完整資料。
本文選自《R語(yǔ)言文本挖掘、情感分析和可視化哈利波特小說(shuō)文本數(shù)據(jù)》。
點(diǎn)擊標(biāo)題查閱往期內(nèi)容
R語(yǔ)言之文本分析:主題建模LDA
R語(yǔ)言中的LDA模型:對(duì)文本數(shù)據(jù)進(jìn)行主題模型topic modeling分析
自然語(yǔ)言處理NLP:主題LDA、情感分析疫情下的新聞文本數(shù)據(jù)
【視頻】文本挖掘:主題模型(LDA)及R語(yǔ)言實(shí)現(xiàn)分析游記數(shù)據(jù)
NLP自然語(yǔ)言處理—主題模型LDA案例:挖掘人民網(wǎng)留言板文本數(shù)據(jù)
Python主題建模LDA模型、t-SNE 降維聚類、詞云可視化文本挖掘新聞組數(shù)據(jù)集
自然語(yǔ)言處理NLP:主題LDA、情感分析疫情下的新聞文本數(shù)據(jù)
R語(yǔ)言對(duì)NASA元數(shù)據(jù)進(jìn)行文本挖掘的主題建模分析
R語(yǔ)言文本挖掘、情感分析和可視化哈利波特小說(shuō)文本數(shù)據(jù)
Python、R對(duì)小說(shuō)進(jìn)行文本挖掘和層次聚類可視化分析案例
用于NLP的Python:使用Keras進(jìn)行深度學(xué)習(xí)文本生成
長(zhǎng)短期記憶網(wǎng)絡(luò)LSTM在時(shí)間序列預(yù)測(cè)和文本分類中的應(yīng)用
用Rapidminer做文本挖掘的應(yīng)用:情感分析
R語(yǔ)言文本挖掘tf-idf,主題建模,情感分析,n-gram建模研究
R語(yǔ)言對(duì)推特twitter數(shù)據(jù)進(jìn)行文本情感分析
Python使用神經(jīng)網(wǎng)絡(luò)進(jìn)行簡(jiǎn)單文本分類
用于NLP的Python:使用Keras的多標(biāo)簽文本LSTM神經(jīng)網(wǎng)絡(luò)分類
R語(yǔ)言文本挖掘使用tf-idf分析NASA元數(shù)據(jù)的關(guān)鍵字
R語(yǔ)言NLP案例:LDA主題文本挖掘優(yōu)惠券推薦網(wǎng)站數(shù)據(jù)
Python使用神經(jīng)網(wǎng)絡(luò)進(jìn)行簡(jiǎn)單文本分類
R語(yǔ)言自然語(yǔ)言處理(NLP):情感分析新聞文本數(shù)據(jù)
Python、R對(duì)小說(shuō)進(jìn)行文本挖掘和層次聚類可視化分析案例
R語(yǔ)言對(duì)推特twitter數(shù)據(jù)進(jìn)行文本情感分析
R語(yǔ)言中的LDA模型:對(duì)文本數(shù)據(jù)進(jìn)行主題模型topic modeling分析
R語(yǔ)言文本主題模型之潛在語(yǔ)義分析(LDA:Latent Dirichlet Allocation)R語(yǔ)言對(duì)NASA元數(shù)據(jù)進(jìn)行文本挖掘的主題建模分析
R語(yǔ)言文本挖掘、情感分析和可視化哈利波特小說(shuō)文本數(shù)據(jù)
Python、R對(duì)小說(shuō)進(jìn)行文本挖掘和層次聚類可視化分析案例
用于NLP的Python:使用Keras進(jìn)行深度學(xué)習(xí)文本生成
長(zhǎng)短期記憶網(wǎng)絡(luò)LSTM在時(shí)間序列預(yù)測(cè)和文本分類中的應(yīng)用
用Rapidminer做文本挖掘的應(yīng)用:情感分析
R語(yǔ)言文本挖掘tf-idf,主題建模,情感分析,n-gram建模研究
R語(yǔ)言對(duì)推特twitter數(shù)據(jù)進(jìn)行文本情感分析
Python使用神經(jīng)網(wǎng)絡(luò)進(jìn)行簡(jiǎn)單文本分類
用于NLP的Python:使用Keras的多標(biāo)簽文本LSTM神經(jīng)網(wǎng)絡(luò)分類
R語(yǔ)言文本挖掘使用tf-idf分析NASA元數(shù)據(jù)的關(guān)鍵字
R語(yǔ)言NLP案例:LDA主題文本挖掘優(yōu)惠券推薦網(wǎng)站數(shù)據(jù)
Python使用神經(jīng)網(wǎng)絡(luò)進(jìn)行簡(jiǎn)單文本分類
R語(yǔ)言自然語(yǔ)言處理(NLP):情感分析新聞文本數(shù)據(jù)
Python、R對(duì)小說(shuō)進(jìn)行文本挖掘和層次聚類可視化分析案例
R語(yǔ)言對(duì)推特twitter數(shù)據(jù)進(jìn)行文本情感分析
R語(yǔ)言中的LDA模型:對(duì)文本數(shù)據(jù)進(jìn)行主題模型topic modeling分析
R語(yǔ)言文本主題模型之潛在語(yǔ)義分析(LDA:Latent Dirichlet Allocation)