Files
analise-artigo/README.md
Jário José 550440f4a7 Projeto analise-artigo: análise ABNT de artigos LaTeX
- texparse.py: extração de estrutura abntex2 (título, autores, resumo,
  palavras-chave, seções, citações, figuras), sem dependências externas
- bib.py: parser .bib (BibTeX) com normalização de autores e diacríticos
- analyze.py: checklist NBR 10520/6022/14724, métricas textuais, Flesch
  adaptado pt-BR e heurísticas de prosa
- report.py: relatório Markdown + JSON
- artigos/rumo-a-eficiencia: artigo analisado (main.tex + referencias.bib)
2026-09-25 13:24:56 -03:00

110 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# analise-artigo
Projeto de análise de artigos acadêmicos escritos em **LaTeX (ABNT/abntex2)**.
É 100% Python puro (biblioteca padrão), sem dependências externas — roda em
qualquer máquina com Python ≥ 3.10.
## O que ele analisa
- **Estrutura e conformidade ABNT** (NBR 10520 / 6022 / 14724)
- título, autores, local/data, resumo (150–500 palavras), palavras-chave
- presença de seções: Introdução, Metodologia, Revisão de Literatura, Conclusão
- **Citações e referências**
- citações no corpo vs. entradas do `.bib` (detecta órfãs e não citadas)
- referências mais citadas e distribuição por ano
- **Métricas textuais**
- palavras, frases, média de tamanho de frase, vocabulário único
- legibilidade (Flesch adaptado ao português)
- distribuição de palavras por seção
- **Qualidade de prosa (heurísticas)**
- palavras repetidas / redundâncias (`de de`, `que que`, `mas mas` …)
- frases > 60 palavras e parágrafos > 160 palavras
- expressões mais repetidas no corpo do artigo
## Como usar
```bash
# a partir da raiz do projeto
python -m analise_artigo artigos/rumo-a-eficiencia
# ou apontando direto para o .tex (o .bib é descoberto automaticamente)
python -m analise_artigo artigos/rumo-a-eficiencia/main.tex
# saída em outro diretório
python -m analise_artigo caminho/do/artigo --out relatorios/
```
Saídas geradas no diretório de saída (padrão `relatorios/`):
| Arquivo | Conteúdo |
|-----------------|---------------------------------------------------|
| `relatorio.md` | relatório legível em Markdown |
| `relatorio.json`| dados estruturados (para plotar/automatizar) |
Código de saída do processo: `0` quando não há verificações em `fail`,
`2` quando há, `1` em erro de uso/entrada.
## Estrutura do projeto
```
analise-artigo/
├── analise_artigo/
│ ├── __init__.py # API pública do pacote
│ ├── texparse.py # LaTeX → texto (seções, resumo, citações)
│ ├── bib.py # parser .bib (BibTeX), sem dependências
│ ├── analyze.py # métricas + checklist ABNT + heurísticas
│ ├── report.py # geração do .md e do .json
│ └── __main__.py # CLI
├── artigos/
│ └── rumo-a-eficiencia/ # o artigo analisado (main.tex + referencias.bib)
├── relatorios/ # saída gerada
├── requirements.txt
└── README.md
```
## Usando como biblioteca
```python
from analise_artigo import parse_article, parse_bib, analyze, write_reports
from pathlib import Path
artigo = parse_article("artigos/rumo-a-eficiencia/main.tex")
refs = parse_bib("artigos/rumo-a-eficiencia/referencias.bib")
an = analyze(artigo, refs)
print(an.metrics["flesch"], an.metrics["flesch_faixa"])
for c in an.checks:
print(c.icon, c.code, c.detail)
```
## Limitações conhecidas
- O parser é orientado a abntex2/ABNT; documentos em outras classes
(`article`, `report` com nomenclatura própria) exigem pequenas adaptações
em `texparse.py`.
- **Uma frase/parágrafo por linha**: as heurísticas de sentença/travessão
e de "parágrafo extenso" presumem que cada parágrafo do .tex ocupe uma
linha (convenção verificada nas fontes analisadas). Textos com parágrafos
múltiplos de linha tendem a ser fragmentados.
- **Flesch adaptado (pt-BR)**: usa a fórmula 206,835 − 1,015·MPF − 84,6·VMP
com sílabas estimadas por grupos de vogais (resultado clamped em 0–100).
Texto acadêmico técnico costuma pontuar baixo (p. ex. 0–15) — o índice
reflete vocabulário denso, não um "erro".
- **"se se" excluído** da detecção de palavras repetidas: é uso pronominal
legítimo ("avaliou-se se cada estudo…").
- **Simplificação de `.bib`**: nomes com escapes LaTeX recebem diacríticos
removidos para exibição (`Ki\vs\vs\, M.` → `Kiss`), apenas na apresentação
— o arquivo original não é modificado.
- Heurísticas de prosa não substituem revisão humana ou ferramentas como
LanguageTool.
## Ideias de evolução
- [ ] Exportar relatório em HTML com gráficos (referências por ano,
palavras por seção) a partir do `relatorio.json`
- [ ] Suporte a bibliografia biblatex (`.bbx`) e listas de referências
manualmente digitadas no corpo do .tex
- [ ] Detecção de consistência terminológica (ex.: "agentes pedagógicos"
vs. "agente pedagógico")
- [ ] Integração com LanguageTool via CLI para correção gramatical completa