This file presents some editing and pre-prosessing of text. I have scraped the script of Sir Robins’s Tale from http://montypython.50webs.com/scripts/Holy_Grail/Scene9.htm
This post is about processing it for making comparisons between the three heads of Three-Headed-Knight. I discuss this stuff in my blog, at http://phartiphukborlz.wordpress.com
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
## Loading required package: NLP
The scraped text is stored in the “Knights” - object in RSTudio. Here is some description of this text.
# structure character vector
str(Knights)
## chr [1:11] "" "" "" ...
# the text is on the 6th line in a very unstructured from
Knights[6]
## [1] " \r\n \r\n Monty Python and The Holy Grail\r\n Scene 9: Sir Robin's Minstrals Turn Nasty\r\n [trumpets] \r\n NARRATOR: The Tale of Sir Robin. So, each of the knights went \r\n their separate ways. Sir Robin rode north, through the dark forest of \r\n Ewing, accompanied by his favorite minstrels. \r\n MINSTREL: [singing] \r\n Bravely bold Sir Robin rode forth from Camelot. He was not afraid to \r\n die, O brave Sir Robin. He was not at all afraid to be killed in nasty \r\n ways, Brave, brave, brave, brave Sir Robin! \r\n He was not in the least bit scared to be mashed into a pulp, Or to \r\n have his eyes gouged out and his elbows broken, To have his kneecaps \r\n split and his body burned away And his limbs all hacked and mangled, \r\n brave Sir Robin! \r\n His head smashed in and his heart cut out And his liver removed and \r\n his bowels unplugged And his nostrils raped and his bottom burned off \r\n And his pen-- \r\n SIR ROBIN: That's-- that's, uh-- that's enough music for now, \r\n lads. Heh. Looks like there's dirty work afoot. \r\n DENNIS: Anarcho-syndicalism is a way of preserving freedom.\r\n \r\n WOMAN: Oh, Dennis, forget about freedom. We haven't got enough \r\n mud. \r\n ALL HEADS (THREE-HEADED KNIGHT): Halt! \r\n [dramatic chord] \r\n Who art thou? \r\n MINSTREL: [singing] He is brave Sir Robin, brave Sir \r\n Robin, who-- \r\n ROBIN: Shut up! Um, n-- n-- n-- nobody, really. I'm \r\n j-- j-- j-- ju-- just, um-- just passing through. \r\n ALL HEADS: What do you want? \r\n MINSTREL: [singing] To fight and-- \r\n ROBIN: Shut up! Um, oo, a-- nothing. Nothing, really. I, uh-- \r\n j-- j-- just-- just to, um-- just to p-- pass through, good Sir Knight.\r\n \r\n ALL HEADS: I'm afraid not! \r\n ROBIN: Ah. W-- well, actually I-- I am a Knight of the Round \r\n Table. \r\n ALL HEADS: You're a Knight of the Round Table? \r\n ROBIN: I am. \r\n LEFT HEAD: In that case, I shall have to kill you. \r\n MIDDLE HEAD: Shall I? \r\n RIGHT HEAD: Oh, I don't think so. \r\n MIDDLE HEAD: Well, what do I think? \r\n LEFT HEAD: I think kill him. \r\n RIGHT HEAD: Oh, let's be nice to him. \r\n LEFT HEAD: Oh, shut up. \r\n ROBIN: Perhaps I could-- \r\n LEFT HEAD: And you. Oh, quick! Get the sword out. I want to \r\n cut his head off! \r\n RIGHT HEAD: Oh, cut your own head off! \r\n MIDDLE HEAD: Yes, do us all a favor! \r\n LEFT HEAD: What? \r\n RIGHT HEAD: Yapping on all the time. \r\n MIDDLE HEAD: You're lucky. You're not next to him. \r\n LEFT HEAD: What do you mean? \r\n MIDDLE HEAD: You snore! \r\n LEFT HEAD: Oh, I don't. Anyway, you've got bad breath. \r\n MIDDLE HEAD: Well, it's only because you don't brush my teeth.\r\n \r\n RIGHT HEAD: Oh, stop bitching and let's go have tea. \r\n LEFT HEAD: Oh, all right. All right. All right. We'll kill him \r\n first and then have tea and biscuits. \r\n MIDDLE HEAD: Yes. \r\n RIGHT HEAD: Oh, not biscuits. \r\n LEFT HEAD: All right. All right, not biscuits, but let's kill \r\n him anyway. \r\n ALL HEADS: Right! \r\n MIDDLE HEAD: He buggered off. \r\n RIGHT HEAD: So he has. He's scarpered. \r\n MINSTREL: [singing] Brave Sir Robin ran away, \r\n ROBIN: No! \r\n MINSTREL: [singing] Bravely ran away, away. \r\n ROBIN: I didn't! \r\n MINSTREL: [singing] When danger reared its ugly head, \r\n he bravely turned his tail and fled. \r\n ROBIN: No! \r\n MINSTREL: [singing] Yes, brave Sir Robin turned about\r\n \r\n ROBIN: I didn't! \r\n MINSTREL: [singing] And gallantly, he chickened out. \r\n Bravely taking to his feet, \r\n ROBIN: I never did! \r\n MINSTREL: [singing] He beat a very brave retreat, \r\n ROBIN: All lies! \r\n MINSTREL: [singing] Bravest of the brave, Sir Robin.\r\n \r\n ROBIN: I never! \r\n Cartoon \r\n CARTOON MONKS: [chanting] Pie Iesu domine, dona eis \r\n requiem. \r\n CARTOON CHARACTER: Heh heh heeh ooh... \r\n [twang] \r\n CARTOON MONKS: [chanting] Pie Iesu domine,... \r\n CARTOON CHARACTERS: Wayy! \r\n [splash] \r\n Ho ho. Woa, wayy! \r\n [twang] \r\n [splash] \r\n Heh heh heh heh ho! Heh heh heh! \r\n CARTOON MONKS: [chanting] ...dona eis requiem. \r\n CARTOON CHARACTER: Wayy! \r\n [twang] \r\n Wayy! \r\n [twang] \r\n VOICE: [whispering] Forgive me, for I have sinned. \r\n CARTOON CHARACTER: Oh! Oooo. \r\n \r\n Holy \r\n Grail Scripts\r\n \r\n Next Scene\r\n \r\n \r\n Main Page | Holy Grail Sounds | Holy Grail Script | Flying Circus Scripts | Flying Circus Sounds | The Meaning of Life Script | Life of Brian Script | Silly Links\r\n \r\n \r\n \r\n web counter\r\n \r\n \r\n "
# I'll tidy it a bit:
# tm- package needed for this function: Strip Whitespaces
Knights <- stripWhitespace(Knights)
# Note that the text is a character vector consisting of 11 lines, and actually the script is on 6th and doubled in 7th line
# So, I'll just pick the text and put it to one line
Knights <- paste(Knights[6], collapse = " ")
Knights
## [1] " Monty Python and The Holy Grail Scene 9: Sir Robin's Minstrals Turn Nasty [trumpets] NARRATOR: The Tale of Sir Robin. So, each of the knights went their separate ways. Sir Robin rode north, through the dark forest of Ewing, accompanied by his favorite minstrels. MINSTREL: [singing] Bravely bold Sir Robin rode forth from Camelot. He was not afraid to die, O brave Sir Robin. He was not at all afraid to be killed in nasty ways, Brave, brave, brave, brave Sir Robin! He was not in the least bit scared to be mashed into a pulp, Or to have his eyes gouged out and his elbows broken, To have his kneecaps split and his body burned away And his limbs all hacked and mangled, brave Sir Robin! His head smashed in and his heart cut out And his liver removed and his bowels unplugged And his nostrils raped and his bottom burned off And his pen-- SIR ROBIN: That's-- that's, uh-- that's enough music for now, lads. Heh. Looks like there's dirty work afoot. DENNIS: Anarcho-syndicalism is a way of preserving freedom. WOMAN: Oh, Dennis, forget about freedom. We haven't got enough mud. ALL HEADS (THREE-HEADED KNIGHT): Halt! [dramatic chord] Who art thou? MINSTREL: [singing] He is brave Sir Robin, brave Sir Robin, who-- ROBIN: Shut up! Um, n-- n-- n-- nobody, really. I'm j-- j-- j-- ju-- just, um-- just passing through. ALL HEADS: What do you want? MINSTREL: [singing] To fight and-- ROBIN: Shut up! Um, oo, a-- nothing. Nothing, really. I, uh-- j-- j-- just-- just to, um-- just to p-- pass through, good Sir Knight. ALL HEADS: I'm afraid not! ROBIN: Ah. W-- well, actually I-- I am a Knight of the Round Table. ALL HEADS: You're a Knight of the Round Table? ROBIN: I am. LEFT HEAD: In that case, I shall have to kill you. MIDDLE HEAD: Shall I? RIGHT HEAD: Oh, I don't think so. MIDDLE HEAD: Well, what do I think? LEFT HEAD: I think kill him. RIGHT HEAD: Oh, let's be nice to him. LEFT HEAD: Oh, shut up. ROBIN: Perhaps I could-- LEFT HEAD: And you. Oh, quick! Get the sword out. I want to cut his head off! RIGHT HEAD: Oh, cut your own head off! MIDDLE HEAD: Yes, do us all a favor! LEFT HEAD: What? RIGHT HEAD: Yapping on all the time. MIDDLE HEAD: You're lucky. You're not next to him. LEFT HEAD: What do you mean? MIDDLE HEAD: You snore! LEFT HEAD: Oh, I don't. Anyway, you've got bad breath. MIDDLE HEAD: Well, it's only because you don't brush my teeth. RIGHT HEAD: Oh, stop bitching and let's go have tea. LEFT HEAD: Oh, all right. All right. All right. We'll kill him first and then have tea and biscuits. MIDDLE HEAD: Yes. RIGHT HEAD: Oh, not biscuits. LEFT HEAD: All right. All right, not biscuits, but let's kill him anyway. ALL HEADS: Right! MIDDLE HEAD: He buggered off. RIGHT HEAD: So he has. He's scarpered. MINSTREL: [singing] Brave Sir Robin ran away, ROBIN: No! MINSTREL: [singing] Bravely ran away, away. ROBIN: I didn't! MINSTREL: [singing] When danger reared its ugly head, he bravely turned his tail and fled. ROBIN: No! MINSTREL: [singing] Yes, brave Sir Robin turned about ROBIN: I didn't! MINSTREL: [singing] And gallantly, he chickened out. Bravely taking to his feet, ROBIN: I never did! MINSTREL: [singing] He beat a very brave retreat, ROBIN: All lies! MINSTREL: [singing] Bravest of the brave, Sir Robin. ROBIN: I never! Cartoon CARTOON MONKS: [chanting] Pie Iesu domine, dona eis requiem. CARTOON CHARACTER: Heh heh heeh ooh... [twang] CARTOON MONKS: [chanting] Pie Iesu domine,... CARTOON CHARACTERS: Wayy! [splash] Ho ho. Woa, wayy! [twang] [splash] Heh heh heh heh ho! Heh heh heh! CARTOON MONKS: [chanting] ...dona eis requiem. CARTOON CHARACTER: Wayy! [twang] Wayy! [twang] VOICE: [whispering] Forgive me, for I have sinned. CARTOON CHARACTER: Oh! Oooo. Holy Grail Scripts Next Scene Main Page | Holy Grail Sounds | Holy Grail Script | Flying Circus Scripts | Flying Circus Sounds | The Meaning of Life Script | Life of Brian Script | Silly Links web counter "
It looks a bit tidied now. First, I need to split the text into sentences. I’ll do this with tokenizers -package. This works with the package, but the resulting object-format (or whatever it is called) is a “list”. So, I need to convert it into a data frame. Here I do this, and tidy the data frame a bit.
# For splitting the text into sentences, I used tokenizers -package
library(tokenizers)
sentences <- tokenize_sentences(Knights)
str(sentences)
## List of 1
## $ : chr [1:88] "Monty Python and The Holy Grail Scene 9: Sir Robin's Minstrals Turn Nasty [trumpets] NARRATOR: The Tale of Sir Robin." "So, each of the knights went their separate ways." "Sir Robin rode north, through the dark forest of Ewing, accompanied by his favorite minstrels." "MINSTREL: [singing] Bravely bold Sir Robin rode forth from Camelot." ...
# It is nicely split into sentences in different rows. But it is in a format of "list"
# So, I'll first change into dataframe format.
sentences <- as.data.frame(sentences, stringsAsFactors = FALSE)
str(sentences)
## 'data.frame': 88 obs. of 1 variable:
## $ c..Monty.Python.and.The.Holy.Grail.Scene.9..Sir.Robin.s.Minstrals.Turn.Nasty..trumpets..NARRATOR..The.Tale.of.Sir.Robin....: chr "Monty Python and The Holy Grail Scene 9: Sir Robin's Minstrals Turn Nasty [trumpets] NARRATOR: The Tale of Sir Robin." "So, each of the knights went their separate ways." "Sir Robin rode north, through the dark forest of Ewing, accompanied by his favorite minstrels." "MINSTREL: [singing] Bravely bold Sir Robin rode forth from Camelot." ...
# Looks better, but the column name is very awkwardly long. I'll change it to "text
sentences$text <- sentences$c..Monty.Python.and.The.Holy.Grail.Scene.9..Sir.Robin.s.Minstrals.Turn.Nasty..trumpets..NARRATOR..The.Tale.of.Sir.Robin....
str(sentences)
## 'data.frame': 88 obs. of 2 variables:
## $ c..Monty.Python.and.The.Holy.Grail.Scene.9..Sir.Robin.s.Minstrals.Turn.Nasty..trumpets..NARRATOR..The.Tale.of.Sir.Robin....: chr "Monty Python and The Holy Grail Scene 9: Sir Robin's Minstrals Turn Nasty [trumpets] NARRATOR: The Tale of Sir Robin." "So, each of the knights went their separate ways." "Sir Robin rode north, through the dark forest of Ewing, accompanied by his favorite minstrels." "MINSTREL: [singing] Bravely bold Sir Robin rode forth from Camelot." ...
## $ text : chr "Monty Python and The Holy Grail Scene 9: Sir Robin's Minstrals Turn Nasty [trumpets] NARRATOR: The Tale of Sir Robin." "So, each of the knights went their separate ways." "Sir Robin rode north, through the dark forest of Ewing, accompanied by his favorite minstrels." "MINSTREL: [singing] Bravely bold Sir Robin rode forth from Camelot." ...
# And I'll remove that awkward variable name
sentences$c..Monty.Python.and.The.Holy.Grail.Scene.9..Sir.Robin.s.Minstrals.Turn.Nasty..trumpets..NARRATOR..The.Tale.of.Sir.Robin.... <- NULL
str(sentences)
## 'data.frame': 88 obs. of 1 variable:
## $ text: chr "Monty Python and The Holy Grail Scene 9: Sir Robin's Minstrals Turn Nasty [trumpets] NARRATOR: The Tale of Sir Robin." "So, each of the knights went their separate ways." "Sir Robin rode north, through the dark forest of Ewing, accompanied by his favorite minstrels." "MINSTREL: [singing] Bravely bold Sir Robin rode forth from Camelot." ...
head(sentences, n=5)
## text
## 1 Monty Python and The Holy Grail Scene 9: Sir Robin's Minstrals Turn Nasty [trumpets] NARRATOR: The Tale of Sir Robin.
## 2 So, each of the knights went their separate ways.
## 3 Sir Robin rode north, through the dark forest of Ewing, accompanied by his favorite minstrels.
## 4 MINSTREL: [singing] Bravely bold Sir Robin rode forth from Camelot.
## 5 He was not afraid to die, O brave Sir Robin.
Then I need to separate names of the characters (roles) and their lines (quotes) into separate variables (columns) to the data frame. I do this with a loop. I also remove the empty lines.
for(row in 1:nrow(sentences))
{
sentences$name[row] = strsplit(sentences$text[row], ":")[[1]][1]
sentences$quote[row] = strsplit(sentences$text[row], ":")[[1]][2]
}
str(sentences)
## 'data.frame': 88 obs. of 3 variables:
## $ text : chr "Monty Python and The Holy Grail Scene 9: Sir Robin's Minstrals Turn Nasty [trumpets] NARRATOR: The Tale of Sir Robin." "So, each of the knights went their separate ways." "Sir Robin rode north, through the dark forest of Ewing, accompanied by his favorite minstrels." "MINSTREL: [singing] Bravely bold Sir Robin rode forth from Camelot." ...
## $ name : chr "Monty Python and The Holy Grail Scene 9" "So, each of the knights went their separate ways." "Sir Robin rode north, through the dark forest of Ewing, accompanied by his favorite minstrels." "MINSTREL" ...
## $ quote: chr " Sir Robin's Minstrals Turn Nasty [trumpets] NARRATOR" NA NA " [singing] Bravely bold Sir Robin rode forth from Camelot." ...
# Looks good so far... However, we have empty rows in the file, marked with "<NA>"
# Let's tidy the data frame:
sentences <- subset(sentences, quote != is.na(quote)) # remove rows where "quote" is "<NA>"
str(sentences)
## 'data.frame': 56 obs. of 3 variables:
## $ text : chr "Monty Python and The Holy Grail Scene 9: Sir Robin's Minstrals Turn Nasty [trumpets] NARRATOR: The Tale of Sir Robin." "MINSTREL: [singing] Bravely bold Sir Robin rode forth from Camelot." "His head smashed in and his heart cut out And his liver removed and his bowels unplugged And his nostrils raped"| __truncated__ "DENNIS: Anarcho-syndicalism is a way of preserving freedom." ...
## $ name : chr "Monty Python and The Holy Grail Scene 9" "MINSTREL" "His head smashed in and his heart cut out And his liver removed and his bowels unplugged And his nostrils raped"| __truncated__ "DENNIS" ...
## $ quote: chr " Sir Robin's Minstrals Turn Nasty [trumpets] NARRATOR" " [singing] Bravely bold Sir Robin rode forth from Camelot." " That's-- that's, uh-- that's enough music for now, lads." " Anarcho-syndicalism is a way of preserving freedom." ...
head(sentences)
## text
## 1 Monty Python and The Holy Grail Scene 9: Sir Robin's Minstrals Turn Nasty [trumpets] NARRATOR: The Tale of Sir Robin.
## 4 MINSTREL: [singing] Bravely bold Sir Robin rode forth from Camelot.
## 8 His head smashed in and his heart cut out And his liver removed and his bowels unplugged And his nostrils raped and his bottom burned off And his pen-- SIR ROBIN: That's-- that's, uh-- that's enough music for now, lads.
## 11 DENNIS: Anarcho-syndicalism is a way of preserving freedom.
## 12 WOMAN: Oh, Dennis, forget about freedom.
## 14 ALL HEADS (THREE-HEADED KNIGHT): Halt!
## name
## 1 Monty Python and The Holy Grail Scene 9
## 4 MINSTREL
## 8 His head smashed in and his heart cut out And his liver removed and his bowels unplugged And his nostrils raped and his bottom burned off And his pen-- SIR ROBIN
## 11 DENNIS
## 12 WOMAN
## 14 ALL HEADS (THREE-HEADED KNIGHT)
## quote
## 1 Sir Robin's Minstrals Turn Nasty [trumpets] NARRATOR
## 4 [singing] Bravely bold Sir Robin rode forth from Camelot.
## 8 That's-- that's, uh-- that's enough music for now, lads.
## 11 Anarcho-syndicalism is a way of preserving freedom.
## 12 Oh, Dennis, forget about freedom.
## 14 Halt!
Finally, ready to pick the quotes of the different heads into separate documents. So this is done in this chunk of code. And I form a volatile corpus for subsequent analyses, such as wordclouds and sentiment analyses. I do not explain them in detail here.
# Pick quotes of the three heads into separate documents:
# Three-headed knight
LeftHead <- sentences[sentences$name=="LEFT HEAD",]
MiddleHead <- sentences[sentences$name=="MIDDLE HEAD",]
RightHead <- sentences[sentences$name=="RIGHT HEAD",]
str(LeftHead)
## 'data.frame': 8 obs. of 3 variables:
## $ text : chr "LEFT HEAD: In that case, I shall have to kill you." "LEFT HEAD: I think kill him." "LEFT HEAD: Oh, shut up." "LEFT HEAD: What?" ...
## $ name : chr "LEFT HEAD" "LEFT HEAD" "LEFT HEAD" "LEFT HEAD" ...
## $ quote: chr " In that case, I shall have to kill you." " I think kill him." " Oh, shut up." " What?" ...
# Combine quotes into a single text for each three heads
Left_vec=paste(LeftHead$quote, collapse=" ")
Middle_vec=paste(MiddleHead$quote, collapse=" ")
Right_vec=paste(RightHead$quote, collapse=" ")
# combine in one vector and convert to corpus
All=c(Left_vec, Middle_vec, Right_vec)
KnightCorpus=VCorpus(VectorSource(All))
str(KnightCorpus)
## List of 3
## $ 1:List of 2
## ..$ content: chr " In that case, I shall have to kill you. I think kill him. Oh, shut up. What? What do you mean? Oh, I don'"| __truncated__
## ..$ meta :List of 7
## .. ..$ author : chr(0)
## .. ..$ datetimestamp: POSIXlt[1:1], format: "2021-02-19 16:33:58"
## .. ..$ description : chr(0)
## .. ..$ heading : chr(0)
## .. ..$ id : chr "1"
## .. ..$ language : chr "en"
## .. ..$ origin : chr(0)
## .. ..- attr(*, "class")= chr "TextDocumentMeta"
## ..- attr(*, "class")= chr [1:2] "PlainTextDocument" "TextDocument"
## $ 2:List of 2
## ..$ content: chr " Shall I? Well, what do I think? Yes, do us all a favor! You're lucky. You snore! Well, it's only because "| __truncated__
## ..$ meta :List of 7
## .. ..$ author : chr(0)
## .. ..$ datetimestamp: POSIXlt[1:1], format: "2021-02-19 16:33:58"
## .. ..$ description : chr(0)
## .. ..$ heading : chr(0)
## .. ..$ id : chr "2"
## .. ..$ language : chr "en"
## .. ..$ origin : chr(0)
## .. ..- attr(*, "class")= chr "TextDocumentMeta"
## ..- attr(*, "class")= chr [1:2] "PlainTextDocument" "TextDocument"
## $ 3:List of 2
## ..$ content: chr " Oh, I don't think so. Oh, let's be nice to him. Oh, cut your own head off! Yapping on all the time. Oh, st"| __truncated__
## ..$ meta :List of 7
## .. ..$ author : chr(0)
## .. ..$ datetimestamp: POSIXlt[1:1], format: "2021-02-19 16:33:58"
## .. ..$ description : chr(0)
## .. ..$ heading : chr(0)
## .. ..$ id : chr "3"
## .. ..$ language : chr "en"
## .. ..$ origin : chr(0)
## .. ..- attr(*, "class")= chr "TextDocumentMeta"
## ..- attr(*, "class")= chr [1:2] "PlainTextDocument" "TextDocument"
## - attr(*, "class")= chr [1:2] "VCorpus" "Corpus"
With the formed corpus, the subsquent analyses can be done. For example,
## Loading required package: RColorBrewer
##
## Attaching package: 'ggplot2'
## The following object is masked from 'package:NLP':
##
## annotate
## <<TermDocumentMatrix (terms: 27, documents: 3)>>
## Non-/sparse entries: 32/49
## Sparsity : 60%
## Maximal term length: 7
## Weighting : term frequency (tf)
## Sample :
## Docs
## Terms Left Head Middle Head Right Head
## biscuit 0 0 1
## bitch 0 0 1
## dont 1 1 1
## kill 2 0 0
## let 0 0 2
## right 2 0 0
## shall 1 1 0
## think 1 1 1
## well 0 2 0
## yes 0 2 0
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 2477 obs. of 2 variables:
## $ word : chr "abandon" "abandoned" "abandons" "abducted" ...
## $ value: num -2 -2 -2 -2 -2 -2 -3 -3 -3 -3 ...
## - attr(*, "spec")=
## .. cols(
## .. word = col_character(),
## .. value = col_double()
## .. )
## # A tibble: 27 x 4
## word FreqLeft FreqMiddle FreqRight
## <chr> <dbl> <dbl> <dbl>
## 1 biscuit 0 0 1
## 2 bitch 0 0 1
## 3 brush 0 1 0
## 4 bugger 0 1 0
## 5 case 1 0 0
## 6 cut 0 0 1
## 7 dont 1 1 1
## 8 favor 0 1 0
## 9 head 0 0 1
## 10 kill 2 0 0
## # ... with 17 more rows
## # A tibble: 7 x 8
## word FreqLeft FreqMiddle FreqRight value sentiment_left sentiment_middle
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 bitch 0 0 1 -5 0 0
## 2 cut 0 0 1 -1 0 0
## 3 favor 0 1 0 2 0 2
## 4 kill 2 0 0 -3 -6 0
## 5 nice 0 0 1 3 0 0
## 6 stop 0 0 1 -1 0 0
## 7 yes 0 2 0 1 0 2
## # ... with 1 more variable: sentiment_right <dbl>
## # A tibble: 1 x 3
## afinn_left afinn_middle afinn_right
## <dbl> <dbl> <dbl>
## 1 -3 1.33 -1