#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")