Motivação Link para o cabeçalho
Como exercício de programação, decidi verificar quantas citações cada um dos três personagens principais de Dom Casmurro (Bentinho, Capitu e Escobar) tiveram em cada capítulo da obra. A ideia é contar as ocorrências de cada nome em cada capítulo e, a partir disso, fazer o somatório geral desses valores.
Obtenção e Preparação dos Dados Link para o cabeçalho
O primeiro passo foi utilizar o Projeto Gutenberg para obter os dados. Isso permite que eu tenha acesso a uma versão razoavelmente oficial da obra, mas principalmente gratuita e em formato txt.
library(tidyverse)
theme_set(theme_minimal())
# devtools::install_github("ropensci/gutenbergr")
library(gutenbergr)
library(tidytext)
library(stringi)
# encontrar o codigo de dom casmurro
gutenberg_metadata |>
filter(title == "Dom Casmurro")
## # A tibble: 1 × 8
## gutenberg_id title author gutenberg_author_id language gutenberg_bookshelf
## <int> <chr> <chr> <int> <fct> <chr>
## 1 55752 Dom Casm… Macha… 9685 pt Browsing: Literatu…
## # ℹ 2 more variables: rights <fct>, has_text <lgl>
# baixar o arquivo correspondente
dom_casmurro_gutenberg <- gutenberg_download(55752)
# retirando o indice ao final
dom_casmurro_gutenberg <- head(dom_casmurro_gutenberg, -150)
A partir disso, é necessário separar o texto. Originalmente ele vem em parágrafos e é necessário separá-lo em palavras, removendo acentos e deixando todas as palavras em letras minúsculas:
dom_casmurro <-
dom_casmurro_gutenberg |>
unnest_tokens(word, text) |>
mutate(word = stri_trans_general(str = word, id = "Latin-ASCII")) |>
mutate(word = tolower(word))
Entretanto, algumas dessas palavras são marcadores de capítulos. Capítulos esses que estão em numeração romana. Para isso, foi necessário converter estes valores para numeração arábica:
dom_casmurro <-
dom_casmurro |>
mutate(capitulo = as.roman(word)) |>
mutate(capitulo = as.numeric(capitulo))
Em seguida, veio a parte mais complicada. Foi preciso criar uma coluna extra, chamada capitulo_novo
, para manter a identificação de cada palavra. Isto é, todas as palavras do Capítulo I (1, na verdade), terão o valor 1 ao seu lado. Todas as palavras do Capítulo II (2), terão o valor 2 ao seu lado e assim por diante, para todos os capítulos (são 148, para quem ficou curioso).
Ao fim, renomeei capitulo_novo
para capitulo
, de modo a evitar confusões.
# encontrar o número do capítulo
capitulo <- dom_casmurro$capitulo
capitulo[is.na(capitulo)] <- 0
capitulo_novo <- 0
i <- 0
for (j in 1:length(capitulo)){
if (capitulo[j] == i){
capitulo_novo[j] <- i
i <- i + 1
}
}
capitulo_novo <- data.frame(capitulo = c(capitulo_novo, rep(NA, length(capitulo)-length(capitulo_novo))))
rm(capitulo)
dom_casmurro <-
dom_casmurro |>
select(-capitulo) |>
bind_cols(capitulo_novo) |>
fill(capitulo) |>
filter(capitulo > 0)
Visualização Link para o cabeçalho
Com os dados preparados, basta contar as ocorrências de cada personagem no livro. Em particular, Bentinho e Casmurro foram considerados como sendo o mesmo personagem.
personagens <-
dom_casmurro |>
mutate(word = ifelse(word == "casmurro", "bentinho", word)) |>
filter(word %in% c("bentinho", "capitu", "escobar"))
personagens_por_capitulo <-
personagens |>
group_by(capitulo) |>
count(word)
personagens_por_capitulo <-
expand_grid(capitulo = 1:max(dom_casmurro$capitulo),
word = c("bentinho", "capitu", "escobar")) |>
left_join(personagens_por_capitulo) |>
replace_na(list(n = 0)) |>
group_by(word) |>
mutate(n_acumulado = cumsum(n)) |>
mutate(word = str_to_title(word)) |>
mutate(word = ifelse(word == "Bentinho", "Bentinho/\nDom Casmurro", word))
Com as contagens feitas, basta fazer o gráfico:
ggplot(personagens_por_capitulo, aes(x = capitulo, y = n_acumulado, colour = word)) +
geom_line() +
scale_colour_viridis_d() +
labs(x = "Capítulo",
y = "Quantidade de Citações Acumuladas",
colour = "Personagem",
title = "Comparação de Citações entre os\nPersonagens Principais de Dom Casmurro",
caption = "marcusnunes.me")

Claramente, Capitu é a personagem mais citada, o que não é um absurdo imaginar. Mas note como próximo ao capítulo 100 há um salto no número de citação de Escobar. Se refizermos o gráfico a partir do capítulo 90, Capitu e Escobar possuem um número de citações bem similar.
personagens_por_capitulo |>
filter(capitulo >= 90) |>
mutate(n_acumulado = cumsum(n)) |>
ggplot(aes(x = capitulo, y = n_acumulado, colour = word)) +
geom_line() +
scale_colour_viridis_d() +
labs(x = "Capítulo",
y = "Quantidade de Citações Acumuladas",
colour = "Personagem",
title = "Comparação de Citações entre os\nPersonagens Principais de Dom Casmurro\na Partir da Metade da Obra",
caption = "marcusnunes.me")
