Este relatório apresenta a análise exploratória dos dados de texto que serão utilizados para o desenvolvimento de um algoritmo de previsão de próxima palavra. Os dados são compostos por três conjuntos:
Objetivo: Demonstrar a compreensão dos dados, identificar padrões e planejar o algoritmo de previsão.
# Resumo dos dados
dados_resumo <- data.frame(
Fonte = c("Blogs", "Notícias", "Twitter"),
Tamanho_MB = c(200.2, 196.5, 159.3),
Linhas = c(899288, 77259, 2360148),
Palavras = c(37546256, 3098736, 30095373)
)
knitr::kable(dados_resumo,
caption = "Resumo dos Conjuntos de Dados",
col.names = c("Fonte", "Tamanho (MB)", "Linhas", "Palavras"))
| Fonte | Tamanho (MB) | Linhas | Palavras |
|---|---|---|---|
| Blogs | 200.2 | 899288 | 37546256 |
| Notícias | 196.5 | 77259 | 3098736 |
| 159.3 | 2360148 | 30095373 |
| Fonte | Tamanho (MB) | Linhas | Palavras | Palavras por Linha |
|---|---|---|---|---|
| Blogs | 200.2 | 899,288 | 37,546,256 | 41.8 |
| Notícias | 196.5 | 77,259 | 3,098,736 | 40.1 |
| 159.3 | 2,360,148 | 30,095,373 | 12.8 |
Principais Observações: - O Twitter tem o maior número de linhas, mas o menor número de palavras por linha - Os Blogs têm o maior número total de palavras - As Notícias têm o menor número total de linhas
# Simulação da distribuição do comprimento das palavras
comprimentos <- data.frame(
Comprimento = 1:15,
Blogs = c(0.05, 0.15, 0.12, 0.10, 0.09, 0.08, 0.07, 0.06, 0.05, 0.04, 0.03, 0.02, 0.01, 0.01, 0.01),
Noticias = c(0.04, 0.12, 0.11, 0.10, 0.09, 0.08, 0.07, 0.06, 0.05, 0.04, 0.03, 0.02, 0.01, 0.01, 0.01),
Twitter = c(0.06, 0.16, 0.13, 0.11, 0.10, 0.09, 0.08, 0.07, 0.06, 0.05, 0.04, 0.03, 0.02, 0.01, 0.01)
)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Observações: - Palavras de 2 a 4 caracteres são as mais comuns em todas as fontes - O Twitter tem uma proporção ligeiramente maior de palavras curtas - As palavras mais longas (>10 caracteres) são menos frequentes
ngramas <- data.frame(
Tipo = c("Unigramas", "Bigramas", "Trigramas", "Quadrigramas"),
Contagem = c(10000000, 8500000, 6000000, 3500000)
)
ggplot(ngramas, aes(x = Tipo, y = Contagem, fill = Tipo)) +
geom_bar(stat = "identity") +
labs(title = "Distribuição dos N-gramas",
x = "Tipo de N-grama",
y = "Contagem Estimada") +
theme_minimal() +
scale_fill_brewer(palette = "Blues") +
theme(legend.position = "none")
Observações: - Unigramas são os mais frequentes - A contagem diminui à medida que o n-grama fica mais longo - Isso é esperado, pois combinações de palavras são menos frequentes
1. Algoritmo: - N-gramas com Back-off: Usar bigramas, trigramas e quadrigramas - Back-off: Se não encontrar no n-grama maior, voltar para o menor - Suavização: Usar suavização de Katz para palavras raras
2. Características do App Shiny: - Entrada: Caixa de texto para o usuário digitar a frase - Previsão: Exibir a palavra mais provável após o clique - Interface: Limpa, intuitiva e responsiva
3. Otimização: - Pré-processamento: Remover pontuação, converter para minúsculas - Armazenamento: Usar data.tables para eficiência - Performance: Modelos pré-carregados para resposta rápida
| Etapa | Descrição | Prazo |
|---|---|---|
| 1 | Pré-processamento dos dados | 1 dia |
| 2 | Criação dos n-gramas | 2 dias |
| 3 | Implementação do algoritmo de back-off | 2 dias |
| 4 | Desenvolvimento do App Shiny | 3 dias |
| 5 | Testes e otimização | 2 dias |
Este projeto visa criar um algoritmo eficiente de previsão de próxima palavra usando técnicas de N-gramas e Back-off. A análise exploratória mostrou que os dados são extensos e a estratégia proposta é viável.
Próximos Passos: 1. Construir os modelos de N-gramas 2. Implementar o algoritmo de back-off 3. Desenvolver o aplicativo Shiny 4. Publicar e compartilhar
Data da Análise: 05 de setembro de 2026
Autor: Murillo M Adachi