#Text Mining Fundamentals
Sys.setenv(LANG = "en")
# Install packages
#install.packages("tm") # for text mining
#install.packages("SnowballC") # for text manipulation
#install.packages("wordcloud") # word-cloud generator
#install.packages("RColorBrewer") # color palettes
# Load libraries
library("tm")
## Warning: package 'tm' was built under R version 4.3.2
## Loading required package: NLP
## Warning: package 'NLP' was built under R version 4.3.1
library("SnowballC")
## Warning: package 'SnowballC' was built under R version 4.3.1
library("wordcloud")
## Warning: package 'wordcloud' was built under R version 4.3.2
## Loading required package: RColorBrewer
library("RColorBrewer")
#Let's start by importing the text to analyze
text <- readLines(("C:/Users/Mauri/Downloads/EL PRINCIPITO.txt"), warn=FALSE, encoding = "UTF-8")
#We need to convert the text to a corpus
docs <- Corpus(VectorSource(text))
#inspect(docs)
#General text cleaning
# Convert the text to lower case
docs <- tm_map(docs, content_transformer(tolower))
## Warning in tm_map.SimpleCorpus(docs, content_transformer(tolower)):
## transformation drops documents
# Remove numbers
docs <- tm_map(docs, removeNumbers)
## Warning in tm_map.SimpleCorpus(docs, removeNumbers): transformation drops
## documents
# Remove english common stopwords
docs <- tm_map(docs, removeWords, stopwords("english"))
## Warning in tm_map.SimpleCorpus(docs, removeWords, stopwords("english")):
## transformation drops documents
# Remove your own stop word
# specify your stopwords as a character vector
docs <- tm_map(docs, removeWords, c("blabla1", "blabla2"))
## Warning in tm_map.SimpleCorpus(docs, removeWords, c("blabla1", "blabla2")):
## transformation drops documents
# Remove punctuations
docs <- tm_map(docs, removePunctuation)
## Warning in tm_map.SimpleCorpus(docs, removePunctuation): transformation drops
## documents
# Eliminate extra white spaces
docs <- tm_map(docs, stripWhitespace)
## Warning in tm_map.SimpleCorpus(docs, stripWhitespace): transformation drops
## documents
#Term-document matrix. Document matrix is a table containing the frequency of the words.
dtm <- TermDocumentMatrix(docs)
m <- as.matrix(dtm)
v <- sort(rowSums(m),decreasing=TRUE)
d <- data.frame(word = names(v),freq=v)
head(d, 100)
## word freq
## que que 383
## principito principito 178
## una una 164
## los los 151
## las las 143
## para para 104
## por por 95
## pero pero 90
## más más 80
## con con 79
## muy muy 75
## —dijo —dijo 75
## del del 73
## como como 69
## planeta planeta 63
## — — 54
## flor flor 52
## qué qué 47
## son son 46
## era era 44
## había había 41
## cuando cuando 40
## estrellas estrellas 40
## tan tan 37
## tú tú 37
## poco poco 36
## —le —le 36
## vez vez 35
## dijo dijo 35
## principito— principito— 35
## sin sin 34
## todo todo 33
## sobre sobre 33
## cordero cordero 33
## nada nada 33
## tierra tierra 32
## día día 31
## días días 30
## nunca nunca 28
## estaba estaba 28
## también también 28
## este este 27
## tengo tengo 26
## les les 26
## hay hay 26
## esta esta 25
## mí mí 25
## pues pues 24
## nadie nadie 24
## él él 24
## está está 24
## rey rey 24
## mayores mayores 23
## uno uno 23
## demasiado demasiado 23
## tiempo tiempo 23
## sus sus 23
## mucho mucho 22
## personas personas 22
## sol sol 22
## esto esto 21
## hombre hombre 21
## hombres hombres 21
## hace hace 20
## mil mil 20
## aquí aquí 20
## eso eso 20
## —es —es 20
## —¿y —¿y 20
## tres tres 20
## entonces entonces 19
## algo algo 19
## noche noche 19
## respondió respondió 19
## sólo sólo 19
## mismo mismo 19
## serpiente serpiente 18
## ser ser 18
## eres eres 18
## soy soy 18
## millones millones 18
## zorro zorro 18
## todas todas 17
## puede puede 17
## siempre siempre 17
## mis mis 17
## vida vida 17
## hacer hacer 17
## tiene tiene 17
## exupéry exupéry 16
## saint saint 16
## amigo amigo 16
## bien bien 16
## dibujo dibujo 16
## dos dos 16
## —¡ah —¡ah 16
## baobabs baobabs 16
## —preguntó —preguntó 16
## donde donde 15
## tenía tenía 15
set.seed(1234)
wordcloud(words = d$word, freq = d$freq, min.freq = 5,
max.words=Inf, random.order=T, rot.per=0.5,
colors=brewer.pal(8, "Dark2"))
#https://cran.r-project.org/web/packages/wordcloud/wordcloud.pdf
findFreqTerms(dtm, lowfreq = 20)
## [1] "principito" "este" "los" "por" "tengo"
## [6] "una" "esta" "que" "para" "todo"
## [11] "vez" "mayores" "pero" "pues" "cuando"
## [16] "era" "sobre" "sin" "con" "las"
## [21] "mucho" "les" "personas" "qué" "más"
## [26] "había" "nunca" "muy" "poco" "esto"
## [31] "uno" "demasiado" "estrellas" "del" "hombre"
## [36] "tan" "hace" "nadie" "como" "mí"
## [41] "días" "mil" "estaba" "cordero" "—"
## [46] "él" "hay" "aquí" "tú" "tierra"
## [51] "dijo" "está" "tiempo" "eso" "—le"
## [56] "planeta" "también" "—es" "día" "—¿y"
## [61] "son" "sol" "sus" "tres" "nada"
## [66] "flor" "principito—" "hombres" "rey" "—dijo"
findAssocs(dtm, terms = "principito", corlimit = 0.2)
## $principito
## exupéry saint
## 0.26 0.26
barplot(d[1:10,]$freq, las = 2, names.arg = d[1:10,]$word,
col ="lightblue", main ="Most frequent words",
ylab = "Word frequencies")