Files
TextNLPClassifierApp/graphify-out/cache/ast/v0.9.47-s2/e10035c73584efc6d043bec17d43388ecbf25b576ca3475d0b9906cbc16fad90.json
T
andreferraro 6a45368cb0 feat(extractor): implement multi-engine article content extractor
- Added scripts/extract_article_contents.py for batch scraping with stealth Foxcape and triple extraction (Trafilatura, Newspaper4k, Readability)
- Created unit, integration, and E2E test suite in tests/test_extract_article_contents.py (90/90 passing)
- Updated specs/003-article-content-extractor and README.md with usage documentation and CLI contracts
- Passed ruff linting/formatting and mypy type checking cleanly
2026-08-20 19:22:20 -03:00

1 line
13 KiB
JSON

{"nodes": [{"id": "$graphify-root$_docs_prd_extrator_artigos_nlp_md", "label": "prd_extrator_artigos_nlp.md", "file_type": "document", "node_kind": "page", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L1"}, {"id": "$graphify-root$_docs_prd_extrator_artigos_nlp_prd_extrator_e_parser_de_artigos_multimotor_foxcape_trafilatura_newspaper4k_readability", "label": "PRD \u2014 Extrator e Parser de Artigos Multimotor (Foxcape + Trafilatura + Newspaper4k + Readability)", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L1"}, {"id": "$graphify-root$_docs_prd_extrator_artigos_nlp_1_vis\u00e3o_geral_e_contexto", "label": "1. Vis\u00e3o Geral e Contexto", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L11"}, {"id": "$graphify-root$_docs_prd_extrator_artigos_nlp_1_1_objetivo_do_produto", "label": "1.1 Objetivo do Produto", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L13"}, {"id": "$graphify-root$_docs_prd_extrator_artigos_nlp_2_personas_e_casos_de_uso", "label": "2. Personas e Casos de Uso", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L25"}, {"id": "$graphify-root$_docs_prd_extrator_artigos_nlp_3_arquitetura_e_fluxo_do_sistema", "label": "3. Arquitetura e Fluxo do Sistema", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L35"}, {"id": "$graphify-root$_docs_prd_extrator_artigos_nlp_4_requisitos_funcionais_fr", "label": "4. Requisitos Funcionais (FR)", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L58"}, {"id": "$graphify-root$_docs_prd_extrator_artigos_nlp_rf01_ingest\u00e3o_de_arquivo_json_de_not\u00edcias", "label": "RF01 \u2014 Ingest\u00e3o de Arquivo JSON de Not\u00edcias", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L60"}, {"id": "$graphify-root$_docs_prd_extrator_artigos_nlp_rf02_navega\u00e7\u00e3o_e_coleta_com_foxcape_obrigat\u00f3rio", "label": "RF02 \u2014 Navega\u00e7\u00e3o e Coleta com Foxcape (Obrigat\u00f3rio)", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L65"}, {"id": "$graphify-root$_docs_prd_extrator_artigos_nlp_rf03_extra\u00e7\u00e3o_m\u00e1xima_com_trafilatura", "label": "RF03 \u2014 Extra\u00e7\u00e3o M\u00e1xima com Trafilatura", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L71"}, {"id": "$graphify-root$_docs_prd_extrator_artigos_nlp_rf04_extra\u00e7\u00e3o_m\u00e1xima_com_newspaper4k", "label": "RF04 \u2014 Extra\u00e7\u00e3o M\u00e1xima com Newspaper4k", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L84"}, {"id": "$graphify-root$_docs_prd_extrator_artigos_nlp_rf05_extra\u00e7\u00e3o_com_readability_readability_lxml", "label": "RF05 \u2014 Extra\u00e7\u00e3o com Readability (`readability-lxml`)", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L96"}, {"id": "$graphify-root$_docs_prd_extrator_artigos_nlp_rf06_consolida\u00e7\u00e3o_e_exporta\u00e7\u00e3o_de_resultados", "label": "RF06 \u2014 Consolida\u00e7\u00e3o e Exporta\u00e7\u00e3o de Resultados", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L103"}, {"id": "$graphify-root$_docs_prd_extrator_artigos_nlp_rf07_interface_de_linha_de_comando_cli_e_logs_em_tempo_real", "label": "RF07 \u2014 Interface de Linha de Comando (CLI) e Logs em Tempo Real", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L114"}, {"id": "$graphify-root$_docs_prd_extrator_artigos_nlp_rf08_toler\u00e2ncia_a_falhas_e_resili\u00eancia", "label": "RF08 \u2014 Toler\u00e2ncia a Falhas e Resili\u00eancia", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L132"}, {"id": "$graphify-root$_docs_prd_extrator_artigos_nlp_5_requisitos_n\u00e3o_funcionais_nfr", "label": "5. Requisitos N\u00e3o Funcionais (NFR)", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L138"}, {"id": "$graphify-root$_docs_prd_extrator_artigos_nlp_6_esquema_de_dados_contratos_de_interface", "label": "6. Esquema de Dados (Contratos de Interface)", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L150"}, {"id": "$graphify-root$_docs_prd_extrator_artigos_nlp_6_1_esquema_do_json_de_entrada_input", "label": "6.1 Esquema do JSON de Entrada (`Input`)", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L152"}, {"id": "$graphify-root$_docs_prd_extrator_artigos_nlp_6_2_esquema_do_json_consolidado_de_sa\u00edda_output", "label": "6.2 Esquema do JSON Consolidado de Sa\u00edda (`Output`)", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L173"}, {"id": "$graphify-root$_docs_prd_extrator_artigos_nlp_7_depend\u00eancias_do_projeto", "label": "7. Depend\u00eancias do Projeto", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L230"}, {"id": "$graphify-root$_docs_prd_extrator_artigos_nlp_8_crit\u00e9rios_de_aceite", "label": "8. Crit\u00e9rios de Aceite", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L246"}], "edges": [{"source": "$graphify-root$_docs_prd_extrator_artigos_nlp_md", "target": "$graphify-root$_docs_prd_extrator_artigos_nlp_prd_extrator_e_parser_de_artigos_multimotor_foxcape_trafilatura_newspaper4k_readability", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_extrator_artigos_nlp_prd_extrator_e_parser_de_artigos_multimotor_foxcape_trafilatura_newspaper4k_readability", "target": "$graphify-root$_docs_prd_extrator_artigos_nlp_1_vis\u00e3o_geral_e_contexto", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L11", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_extrator_artigos_nlp_1_vis\u00e3o_geral_e_contexto", "target": "$graphify-root$_docs_prd_extrator_artigos_nlp_1_1_objetivo_do_produto", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L13", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_extrator_artigos_nlp_prd_extrator_e_parser_de_artigos_multimotor_foxcape_trafilatura_newspaper4k_readability", "target": "$graphify-root$_docs_prd_extrator_artigos_nlp_2_personas_e_casos_de_uso", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L25", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_extrator_artigos_nlp_prd_extrator_e_parser_de_artigos_multimotor_foxcape_trafilatura_newspaper4k_readability", "target": "$graphify-root$_docs_prd_extrator_artigos_nlp_3_arquitetura_e_fluxo_do_sistema", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L35", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_extrator_artigos_nlp_prd_extrator_e_parser_de_artigos_multimotor_foxcape_trafilatura_newspaper4k_readability", "target": "$graphify-root$_docs_prd_extrator_artigos_nlp_4_requisitos_funcionais_fr", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L58", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_extrator_artigos_nlp_4_requisitos_funcionais_fr", "target": "$graphify-root$_docs_prd_extrator_artigos_nlp_rf01_ingest\u00e3o_de_arquivo_json_de_not\u00edcias", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L60", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_extrator_artigos_nlp_4_requisitos_funcionais_fr", "target": "$graphify-root$_docs_prd_extrator_artigos_nlp_rf02_navega\u00e7\u00e3o_e_coleta_com_foxcape_obrigat\u00f3rio", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L65", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_extrator_artigos_nlp_4_requisitos_funcionais_fr", "target": "$graphify-root$_docs_prd_extrator_artigos_nlp_rf03_extra\u00e7\u00e3o_m\u00e1xima_com_trafilatura", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L71", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_extrator_artigos_nlp_4_requisitos_funcionais_fr", "target": "$graphify-root$_docs_prd_extrator_artigos_nlp_rf04_extra\u00e7\u00e3o_m\u00e1xima_com_newspaper4k", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L84", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_extrator_artigos_nlp_4_requisitos_funcionais_fr", "target": "$graphify-root$_docs_prd_extrator_artigos_nlp_rf05_extra\u00e7\u00e3o_com_readability_readability_lxml", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L96", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_extrator_artigos_nlp_4_requisitos_funcionais_fr", "target": "$graphify-root$_docs_prd_extrator_artigos_nlp_rf06_consolida\u00e7\u00e3o_e_exporta\u00e7\u00e3o_de_resultados", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L103", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_extrator_artigos_nlp_4_requisitos_funcionais_fr", "target": "$graphify-root$_docs_prd_extrator_artigos_nlp_rf07_interface_de_linha_de_comando_cli_e_logs_em_tempo_real", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L114", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_extrator_artigos_nlp_4_requisitos_funcionais_fr", "target": "$graphify-root$_docs_prd_extrator_artigos_nlp_rf08_toler\u00e2ncia_a_falhas_e_resili\u00eancia", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L132", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_extrator_artigos_nlp_prd_extrator_e_parser_de_artigos_multimotor_foxcape_trafilatura_newspaper4k_readability", "target": "$graphify-root$_docs_prd_extrator_artigos_nlp_5_requisitos_n\u00e3o_funcionais_nfr", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L138", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_extrator_artigos_nlp_prd_extrator_e_parser_de_artigos_multimotor_foxcape_trafilatura_newspaper4k_readability", "target": "$graphify-root$_docs_prd_extrator_artigos_nlp_6_esquema_de_dados_contratos_de_interface", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L150", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_extrator_artigos_nlp_6_esquema_de_dados_contratos_de_interface", "target": "$graphify-root$_docs_prd_extrator_artigos_nlp_6_1_esquema_do_json_de_entrada_input", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L152", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_extrator_artigos_nlp_6_esquema_de_dados_contratos_de_interface", "target": "$graphify-root$_docs_prd_extrator_artigos_nlp_6_2_esquema_do_json_consolidado_de_sa\u00edda_output", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L173", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_extrator_artigos_nlp_prd_extrator_e_parser_de_artigos_multimotor_foxcape_trafilatura_newspaper4k_readability", "target": "$graphify-root$_docs_prd_extrator_artigos_nlp_7_depend\u00eancias_do_projeto", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L230", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_extrator_artigos_nlp_prd_extrator_e_parser_de_artigos_multimotor_foxcape_trafilatura_newspaper4k_readability", "target": "$graphify-root$_docs_prd_extrator_artigos_nlp_8_crit\u00e9rios_de_aceite", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_extrator_artigos_nlp.md", "source_location": "L246", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}