Comparando léxico

É baseado no livro:

Silge, Julia, and David Robinson. 2017. Text Mining with R: A Tidy Approach. First edition. Beijing/Boston: O’Reilly.

Algumas modificações foram feitas de forma a:

  1. Possibilitar o uso de ferramentas em português
  2. Facilitar a navegação pelo público a que se destina.

Este documento é baseado no uso do pacote tidyr. Em outra ocasião, este mesmo processo de pesquisa será realizado com outro pacote e código.

Por favor, me mande um email, caso precisar de ajuda ou para algum contato de pesquisa. O Script com a função final se encontra no rodapé desta página.

Comparando as obras

Neste tutorial utilizaremos as obras de Eça de Queiros diponíveis no Projeto Gutemberg de forma a criar uma comparação entre as diferentes palavras presentes em sua obra.

Carregando pacotes

Para realizar este trabalho, precisamos carregar alguns pacotes principais, entre eles estão, aqui já com o seu output:

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
library(tidytext)
library(ggplot2)
library(gutenbergr)
  1. Os pacotes library(dplyr) e library(tidytext) sõo usados para manipulação de textos
  2. O pacote library(ggplot2) para visualização
  3. O pacote library(gutenbergr) para baixar os dados do Projeto Gutemberg

O comando a seguir fará o download dos livros que

eca.bruto <- gutenberg_download(c(40409, 31971, 17515, 42942,16384, 23145),
                                meta_fields = "title")
## Determining mirror for Project Gutenberg from http://www.gutenberg.org/robot/harvest
## Using mirror http://aleph.gutenberg.org
eca.livros <- eca.bruto %>% 
  mutate(text=iconv(text, from = "latin1", to = "UTF-8"))

Organização

Os comandos a seguir tem função de organizar as palavras no arquivo a partir de alguns critérios que podem ajudar no levantamento das palavras. Entre estes critérios estão: – Colocar uma palavra por linha: o comando unnest_tokens(word, text) separa uma palavra por linha, a parrit da coluna text que contém as linhas de texto – O comando count(title, word, sort = TRUE) conta as palavras em cada livro, organizando-as – O comando ungroup() separa as palavras por linha

eca.p.1 <- eca.livros %>%
  unnest_tokens(word, text) %>%
  count(title, word, sort = TRUE) %>%
  ungroup()

O comando a seguir cria uma contagem geral de palavras por título, para que tenhamos uma ideia da dimensão

eca.total.p <- eca.p.1 %>%
  group_by(title) %>%
  summarize(total = sum(n))

Agora, nós vamos agregar o número de palavras à tabela geral. De forma a termos uma lista de palavras.

eca.palavras <- left_join(eca.p.1, eca.total.p)
## Joining, by = "title"

Visualização

Agora, vamos realizar uma visualização dessas palavras. O Pacote ggplot nos ajudará

ggplot(eca.palavras, aes(n/total, fill = title)) +
  geom_histogram(show.legend = FALSE) +
  xlim(NA, 0.0009) +
  facet_wrap(~title, ncol = 2, scales = "free_y")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 707 rows containing non-finite values (stat_bin).
## Warning: Removed 6 rows containing missing values (geom_bar).

Raquenado as palavras

Os gráficos acima comparam as palavras em seu modo absoluto. Seria interessante que estabelecêssemos um ranqueamento estre essas palavras. Isso nos ajudaria a separar as palavras meramente gramaticais daquelas que podem trazer alguma reflexão sobre o conteúdo.

A Formula a sefuis nos ajurará, cauculando sua frequência relativa e atribuindo um valor mais baixo no ranqueamento às palavras mais frequentes

eca.palavras.ranqueadas <- eca.palavras %>%
  group_by(title) %>%
  mutate(rank = row_number(),
         `term frequency` = n/total)

Agora vamos visualizar essas palavras ranqueadas. Usando o ggplot novamente

eca.palavras.ranqueadas  %>%
  ggplot(aes(rank, `term frequency`, color = title)) +
  geom_line(size = 1.1, alpha = 0.8, show.legend = TRUE) +
  scale_x_log10() +
  scale_y_log10()

Agora vamos calcular a regrressão dessas palavras. Isso nos ajudará a saber se, dentro das repetições que vemos, tais médias são esperadas ou não.

rank_subset <- eca.palavras.ranqueadas %>%
  filter(rank < 500,
         rank > 10)

lm(log10(`term frequency`) ~ log10(rank), data = rank_subset)
## 
## Call:
## lm(formula = log10(`term frequency`) ~ log10(rank), data = rank_subset)
## 
## Coefficients:
## (Intercept)  log10(rank)  
##      -0.966       -1.004

Esses resultados são agregados ao nosso léxico. Veja o gráfico.

eca.palavras.ranqueadas %>%
  ggplot(aes(rank, `term frequency`, color = title)) +
  geom_abline(intercept = -0.966, slope = -1.0004, color = "black", linetype = 1) +
  geom_line(size = 1.1, alpha = 0.9, show.legend = TRUE) +
  scale_x_log10() +
  scale_y_log10()

A linha preta nos dá essa normalidade. Observamos que poucas palavras estão acima ou abaixo dela, com vrariações em cada obra.

Feito isso, vamos calcular a importância que cada uma dessas palavas possuem em nossos textos, para depois viauslizá-la.

eca.palavras.imp  <- eca.palavras  %>%
  bind_tf_idf(word, title, n)

agora o gráfico, considerando as 10 palavras mais importantes:

eca.palavras.imp  %>%
  arrange(desc(tf_idf)) %>%
  mutate(word = factor(word, levels = rev(unique(word)))) %>%
  group_by(title) %>%
  top_n(10) %>%
  ungroup %>%
  ggplot(aes(word, tf_idf, fill = title)) +
  geom_col(show.legend = FALSE) +
  labs(x = NULL, y = "tf-idf") +
  facet_wrap(~title, ncol = 2, scales = "free") +
  coord_flip()
## Selecting by tf_idf

Downloads

 

Comparando Léxico - Scripts

 

Comparando Léxico-PDF

Deixe um comentário