NLP

Tidy


In [11]:
texto <- c('Minha terra tem palmeiras', 
           'onde canta o sabiá;',
           'As aves que aqui gorjeiam,',
           'não gorjeiam como lá.',
            'Nosso céu tem mais estrelas,',
            'Nossas várzeas têm mais flores,',
            'Nossos bosques têm mais vida,',
            'Nossa vida mais amores.',
            'Em cismar – sozinho – à noite – ',
            'Mais prazer encontro eu lá;',
            'Minha terra tem palmeiras,',
            'Onde canta o Sabiá.',
            'Minha terra tem primores,',
            'Que tais não encontro eu cá;',
            'Em cismar – sozinho – à noite –',
            'Mais prazer encontro eu lá;',
            'Minha terra tem palmeiras,',
            'Onde canta o Sabiá.',
            'Não permita Deus que eu morra,',
            'Sem que eu volte para lá;',
            'Sem que eu desfrute os primores',
            'Que não encontro por cá;',
            'Sem que ainda aviste as palmeiras,',
            'Onde canta o Sabiá.'
          )

In [12]:
texto


  1. 'Minha terra tem palmeiras'
  2. 'onde canta o sabiá;'
  3. 'As aves que aqui gorjeiam,'
  4. 'não gorjeiam como lá.'
  5. 'Nosso céu tem mais estrelas,'
  6. 'Nossas várzeas têm mais flores,'
  7. 'Nossos bosques têm mais vida,'
  8. 'Nossa vida mais amores.'
  9. 'Em cismar – sozinho – à noite – '
  10. 'Mais prazer encontro eu lá;'
  11. 'Minha terra tem palmeiras,'
  12. 'Onde canta o Sabiá.'
  13. 'Minha terra tem primores,'
  14. 'Que tais não encontro eu cá;'
  15. 'Em cismar – sozinho – à noite –'
  16. 'Mais prazer encontro eu lá;'
  17. 'Minha terra tem palmeiras,'
  18. 'Onde canta o Sabiá.'
  19. 'Não permita Deus que eu morra,'
  20. 'Sem que eu volte para lá;'
  21. 'Sem que eu desfrute os primores'
  22. 'Que não encontro por cá;'
  23. 'Sem que ainda aviste as palmeiras,'
  24. 'Onde canta o Sabiá.'

Vamos transformar em um dataframe com o pacote dplyr:


In [3]:
library(dplyr)


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


In [13]:
df_texto <- data_frame(line = 1:length(texto), text = texto)

In [14]:
df_texto


linetext
1 Minha terra tem palmeiras
2 onde canta o sabiá;
3 As aves que aqui gorjeiam,
4 não gorjeiam como lá.
5 Nosso céu tem mais estrelas,
6 Nossas várzeas têm mais flores,
7 Nossos bosques têm mais vida,
8 Nossa vida mais amores.
9 Em cismar – sozinho – à noite –
10 Mais prazer encontro eu lá;
11 Minha terra tem palmeiras,
12 Onde canta o Sabiá.
13 Minha terra tem primores,
14 Que tais não encontro eu cá;
15 Em cismar – sozinho – à noite –
16 Mais prazer encontro eu lá;
17 Minha terra tem palmeiras,
18 Onde canta o Sabiá.
19 Não permita Deus que eu morra,
20 Sem que eu volte para lá;
21 Sem que eu desfrute os primores
22 Que não encontro por cá;
23 Sem que ainda aviste as palmeiras,
24 Onde canta o Sabiá.

In [15]:
#install.packages("tidytext",repos='http://cran.us.r-project.org')

In [16]:
library(tidytext)

In [17]:
df_texto %>% unnest_tokens(word,text)


lineword
1 minha
1 terra
1 tem
1 palmeiras
2 onde
2 canta
2 o
2 sabiá
3 as
3 aves
3 que
3 aqui
3 gorjeiam
4 não
4 gorjeiam
4 como
4
5 nosso
5 céu
5 tem
5 mais
5 estrelas
6 nossas
6 várzeas
6 têm
6 mais
6 flores
7 nossos
7 bosques
7 têm
19 que
19 eu
19 morra
20 sem
20 que
20 eu
20 volte
20 para
20
21 sem
21 que
21 eu
21 desfrute
21 os
21 primores
22 que
22 não
22 encontro
22 por
22
23 sem
23 que
23 ainda
23 aviste
23 as
23 palmeiras
24 onde
24 canta
24 o
24 sabiá

Note que há muitas palavras sem importância, como: artigos, preposições etc. São chamadas de "stop words" e somente atrapalham a análise.


In [20]:
library(readr)
stopwords <- read_csv('portuguese-stopwords.txt', col_names = 'word')
filtrado <- df_texto %>%
                unnest_tokens(word,text) %>%
                anti_join(stopwords,by='word')


Parsed with column specification:
cols(
  word = col_character()
)

In [21]:
filtrado


lineword
1 terra
1 palmeiras
2 canta
2 sabiá
3 aves
3 gorjeiam
4 gorjeiam
5 céu
5 estrelas
6 várzeas
6 flores
7 bosques
7 vida
8 vida
8 amores
9 cismar
9 sozinho
10 prazer
10 encontro
11 terra
11 palmeiras
12 canta
12 sabiá
13 terra
13 primores
14 tais
14 encontro
15 cismar
15 sozinho
16 prazer
16 encontro
17 terra
17 palmeiras
18 canta
18 sabiá
19 permita
19 deus
19 morra
20 volte
21 desfrute
21 primores
22 encontro
23 aviste
23 palmeiras
24 canta
24 sabiá

In [30]:
words <- filtrado %>% 
    group_by(word) %>% 
    summarise(freq = n()) %>% 
    arrange(desc(freq)) 
words <- as.data.frame(words)

rownames(words) <- words$word
head(words)


wordfreq
cantacanta 4
encontroencontro 4
palmeiraspalmeiras4
sabiásabiá 4
terraterra 4
cismarcismar 2

In [25]:
#install.packages('wordcloud',repos='http://cran.us.r-project.org')
library(wordcloud)


also installing the dependency ‘slam’

Updating HTML index of packages in '.Library'
Making 'packages.html' ... done
Loading required package: RColorBrewer

In [28]:
options(warn=-1)
wordcloud(words$word,words$freq,scale=c(5,.01),min.freq = 1,max.words=Inf,colors=brewer.pal(8,"Dark2"))
options(warn=0)



In [ ]: