550440f4a7180017289eca5896436d9c01ae3b03
- 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)
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
- citações no corpo vs. entradas do
- 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
- palavras repetidas / redundâncias (
Como usar
# 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
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,reportcom nomenclatura própria) exigem pequenas adaptações emtexparse.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
Description
Análise ABNT/NBR de artigos LaTeX (texparse, .bib, checklist NBR 10520/6022/14724, métricas textuais)
Languages
TeX
57.3%
Python
42.7%