Files
analise-artigo/analise_artigo/__main__.py
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

86 lines
2.2 KiB
Python

"""Linha de comando.
Exemplos:
python -m analise_artigo artigos/rumo-a-eficiencia --out relatorios
python -m analise_artigo caminho/para/main.tex
"""
from __future__ import annotations
import argparse
import sys
from pathlib import Path
from .bib import parse_bib
from .report import write_reports
from .texparse import parse_article
from .analyze import analyze
def find_tex(target: Path) -> Path | None:
if target.is_file() and target.suffix == ".tex":
return target
if target.is_dir():
candidates = sorted(target.glob("*.tex"))
return candidates[0] if candidates else None
return None
def find_bib(tex: Path) -> Path | None:
bib = tex.with_name(tex.stem + ".bib")
if bib.exists():
return bib
for candidate in sorted(tex.parent.glob("*.bib")):
return candidate
return None
def main(argv: list[str] | None = None) -> int:
p = argparse.ArgumentParser(
prog="analise-artigo",
description="Analisa um artigo LaTeX (ABNT) e gera relatório de "
"estrutura, métricas e citações.",
)
p.add_argument(
"artigo",
help="arquivo .tex ou diretório que contém o .tex",
)
p.add_argument(
"--out", "-o",
default="relatorios",
help="diretório de saída do relatório (padrão: relatorios/)",
)
args = p.parse_args(argv)
target = Path(args.artigo)
tex = find_tex(target)
if tex is None:
print(f"erro: nenhum .tex encontrado em {target}", file=sys.stderr)
return 1
bib = find_bib(tex)
print(f"→ artigo: {tex}")
print(f"→ referências: {bib or 'nenhum .bib encontrado'}")
article = parse_article(tex)
refs = parse_bib(bib) if bib else {}
analysis = analyze(article, refs)
outdir = Path(args.out)
md, js = write_reports(analysis, outdir)
resumo = analysis.metrics["resumo_checks"]
print(f"\nResumo: {resumo['ok']} ok, "
f"{resumo['warn']} aviso(s), "
f"{resumo['fail']} falha(s), "
f"{len(analysis.issues)} questão(ões) de prosa")
print(f"\n→ relatório: {md}")
print(f"→ dados: {js}")
return 0 if resumo["fail"] == 0 else 2
if __name__ == "__main__":
raise SystemExit(main())