(Acest articol a fost publicat pentru prima dată pe codificarea-trecutuluiși cu amabilitate a contribuit la R-bloggeri). (Puteți raporta problema legată de conținutul acestei pagini aici)
Doriți să vă distribuiți conținutul pe R-bloggeri? dați clic aici dacă aveți un blog, sau aici dacă nu aveți.
În această lecție despre analiza sentimentelor în R, veți învăța cum să efectuați o analiză a sentimentelor folosind sentimentr pachet. Pentru a demonstra utilizarea pachetului, veți compara sentimentul din discursurile lui Adolf Hitler și Franklin Roosevelt despre declarația de război de către Germania împotriva Statelor Unite în 1941.
sfaturi_și_actualizări
1. Ce este analiza sentimentelor?
Analiza sentimentelor sau minarea opiniei constă în detectarea tonului emoțional al limbajului natural. Funcționează prin atribuirea unui punctaj emoțional sau emoțional fiecărui cuvânt dintr-un text. Unele metode iau în considerare fiecare cuvânt separat, iar altele îl abordează într-un context mai larg, de exemplu, evaluându-le emoția având în vedere poziția sa într-o propoziție.
În această postare vom adopta această din urmă abordare, deoarece contextul cuvântului nu rareori influențează emoția transmisă de acesta. În acest context, sentimentr pachetul este o opțiune excelentă pentru analiza sentimentului în R, deoarece calculează sentimentul la nivel de propoziție. Fiecărei propoziții i se atribuie un scor care, în exemplul nostru, variază de la aproximativ -1,2 (foarte negativ) la aproximativ 1,2 (foarte pozitiv).
The sentimentr pachetul ia în considerare schimbătorii de valență care pot schimba emoția unei propoziții, de exemplu:
- negator: Da nu place.
- amplificator: eu într-adevăr place.
- dezamplificator: eu greu place.
sfaturi_și_actualizări
2. Cum să obțineți datele?
Vom aduna datele pentru acest exemplu din două pagini web folosind web scraping. Dacă doriți să aflați mai multe despre web scraping, vă rugăm să consultați „Cum să webscrape în R?”. Pachetul rvest va fi folosit pentru a webscrape, în special, următoarele trei funcții:
- read_html: extrage codul sursă HTML asociat cu o adresă URL;
- elemente_html: Extrage elementele HTML relevante din codul HTML;
- html_text: Extrage textul (conținutul) din elementele HTML;
Primul pas este să încărcați pachetele necesare și să salvați URL-urile celor două discursuri în variabile. Vă rugăm să urmați instrucțiunile din sentimentr pagina web a pachetului pentru a-l instala.
content_copy
Copie
library(rvest) # for webscraping
library(tidytext) # for cleaning text data
library(dplyr) # for data preparation
library(ggplot2) # for data viz
library(sentimentr) # for sentiment analysis in R
url_h <- "https://en.wikisource.org/wiki/Adolf_Hitler%27s_Declaration_of_War_against_the_United_States"
url_r <- "https://www.archives.gov/milestone-documents/president-franklin-roosevelts-annual-message-to-congress#transcript"
Dacă inspectați codul sursă al paginilor web menționate mai sus, vă veți da seama că, în timp ce textul de pe Wikipedia poate fi adunat prin simpla extragere a p elemente, pentru discursul din arhivele americane trebuie precizat particularul div elementul în care se află discursul. Acest lucru se datorează faptului că pagina web conține o secțiune inițială cu mai multe paragrafe care prezintă discursul președintelui Roosevelt. În codul de mai jos, rețineți că discursul lui Roosevelt necesită un pas suplimentar pentru a specifica faptul că discursul se află în div.col-sm-9 (o div cu clasa „col-sm-9”). De asemenea, rețineți că excludem primul element de text al discursului lui Hitler, deoarece este de fapt metadate despre discurs.
content_copy
Copie
# Webscraping Hitler´s speech
speech_h <- read_html(url_h) %>%
html_elements("p") %>%
html_text()
# Webscraping Roosevelt´s speech
speech_r <- read_html(url_r) %>%
html_elements("div.col-sm-9") %>%
html_elements("p") %>%
html_text()
# Excluding first text element of Hitler's speech, because it is meta data
speech_h <- speech_h(2:155)
3. Efectuarea analizei sentimentelor în R cu sentimentr
Următorul nostru obiectiv este să împărțim în continuare fiecare paragraf al discursurilor noastre în propoziții. Acest lucru se poate realiza cu get_sentences funcția de la sentimentr pachet. Această funcție preia un caracter vetor, împarte fiecare element al acestui vector în propoziții și le livrează într-un obiect listă. Fiecare paragraf al discursurilor noastre devine un element de listă care constă dintr-un vector de caractere care conține propozițiile paragrafului respectiv.
content_copy
Copie
sentences_h <- get_sentences(speech_h)
sentences_r <- get_sentences(speech_r)

În cele din urmă, putem aplica analiza sentimentelor propozițiilor noastre. Facem asta folosind sentiment funcţie. Furnizează un cadru de date care conține:
- element_id: identifică paragraful;
- sentence_id: identifică propoziţia;
- număr_cuvinte: informează câte cuvinte are propoziţia;
- sentiment: informează scorul de sentiment atribuit propoziției respective;
În codul de mai jos verificăm, de asemenea, cea mai negativă propoziție din ambele discursuri, ordonând cadrele de date după sentiment (crescător) și obținerea ID-urilor propozițiilor. Rețineți că pentru a accesa o propoziție din listă, utilizați următoarea sintaxă: list((element_id))(sentence_id).
content_copy
Copie
sentiment_h <- sentiment(sentences_h)
sentiment_r <- sentiment(sentences_r)
# Checking the most negative sentences (element n sentence id)
sentiment_h %>%
arrange(sentiment) %>%
head(1)
sentiment_r %>%
arrange(sentiment) %>%
head(1)
# Checking the most negative sentences (text)
sentences_h((148))(1)
sentences_r((39))(1)
- Cea mai negativă propoziție a lui Hitler: Guvernul Statelor Unite ale Americii, care a încălcat în modul cel mai flagrant și într-o măsură din ce în ce mai mare toate regulile de neutralitate în favoarea adversarilor Germaniei și a fost în mod continuu vinovat de cele mai severe provocări la adresa Germaniei încă de la izbucnirea războiul european, provocat de declarația de război britanică împotriva Germaniei din 3 septembrie 1939, a recurs în cele din urmă la acte militare deschise de agresiune.
- Cea mai negativă propoziție a lui Roosevelt: Nu sunt mulțumit de progresele făcute până acum.
Următorul pas este de a vizualiza modul în care sentimentul ambilor autori s-a schimbat pe durata discursului. Pentru aceasta, vom adăuga două variabile la cadrul de date. Unul pentru a identifica autorul discursului și celălalt pentru a identifica ordinea propoziției în discurs (un fel de variabilă de timp). De asemenea, unim cele două cadre de date pentru a face codificarea parcelei cu care ggplot2 Mai uşor.
content_copy
Copie
# adding a column to identify author and sentence order
sentiment_h$author <- "Adolf Hitler"
sentiment_h$sentence_n <- as.numeric(rownames(sentiment_h))
sentiment_r$author <- "Franklin Roosevelt"
sentiment_r$sentence_n <- as.numeric(rownames(sentiment_r))
# union of the two df
df_union <- rbind(sentiment_h, sentiment_r)
Pentru a trasa sentimentul folosind ggplot2atribuim ordinea propoziției pe axa x, sentimentul pe axa y și autorul esteticii culorii. Folosim apoi geom_point pentru a reprezenta un punct pe propoziție în funcție de sentimentul și ordinea acestuia în discurs. Noi folosim geom_smooth pentru a vizualiza tendinţa sentimentului prin discurs. Citiți mai multe despre geom_smooth Aici.
The scale_color_manual stratul ne permite să alegem culorile atribuite fiecărui autor. Simțiți-vă liber să vă alegeți culorile și ggplot2 temă. Pentru a adăuga aceeași temă ggplot2 ca cea utilizată în aceste parcele, vă rugăm să verificați theme_coding_the_past()tema noastră care este disponibilă aici: „Vizualizarea datelor climatice cu ggplot2”.
content_copy
Copie
ggplot(data = df_union, aes(x = sentence_n,
y = sentiment,
color = author))+
geom_point(alpha = .4)+
scale_color_manual(name = "", values=c("#FF6885", "white"))+
geom_smooth(se=FALSE)+
xlab("Sentence Order")+
ylab("Sentiment")+
theme_coding_the_past()


Rețineți că durata discursului lui Roosevelt este mai scurtă în comparație cu cea a lui Hitler. Amândoi abordează declarația de război făcută de Germania împotriva SUA, dar este destul de clar că tonul și emoțiile lui Roosevelt sunt mai pozitive. Începe jos și crește tonusul emoțional până la sfârșitul discursului. Amplitudinea emoțiilor lui Hitler este mult mai mare și, în general, emoțiile sunt mai negative.
În acest caz, analiza sentimentelor ar putea fi un instrument puternic pentru ca un cercetător să preselecteze ce discursuri să analizeze în continuare în funcție de tonul emoțional de interes. Metoda ar putea, de asemenea, îmbogăți o cercetare care compară discursurile a mai mult de două personalități și poate ajuta la găsirea stilurilor și urmelor personale în discursurile fiecărei personalități. În cele din urmă, din perspectiva științei datelor, ar fi interesant să cunoaștem diferențele dintre rezultatele analizei sentimentelor la nivel de cuvânt față de analiza la nivel de propoziție (așa cum este realizată în acest post).
Simțiți-vă liber să lăsați comentariul sau întrebarea dvs. mai jos și codificare fericită!
4. Concluzii
sentimentrpachetul vă permite să efectuați o analiză a sentimentelor în R, oferind un instrument puternic pentru a estima tonul emoțional al propozițiilor;- Analiza sentimentelor poate fi un instrument puternic pentru preselectarea unor cantități mari de texte și pentru a găsi anumite caracteristici ale diferiților autori.
