{"id":48027002,"url":"https://github.com/bdcdo/exam2bench","last_synced_at":"2026-04-04T13:51:56.956Z","repository":{"id":345632886,"uuid":"1118589909","full_name":"bdcdo/exam2bench","owner":"bdcdo","description":null,"archived":false,"fork":false,"pushed_at":"2026-03-20T00:33:57.000Z","size":950,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-20T15:58:46.962Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bdcdo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-18T01:53:26.000Z","updated_at":"2026-03-20T00:34:01.000Z","dependencies_parsed_at":"2026-03-20T16:02:57.863Z","dependency_job_id":null,"html_url":"https://github.com/bdcdo/exam2bench","commit_stats":null,"previous_names":["bdcdo/exam2bench"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/bdcdo/exam2bench","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bdcdo%2Fexam2bench","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bdcdo%2Fexam2bench/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bdcdo%2Fexam2bench/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bdcdo%2Fexam2bench/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bdcdo","download_url":"https://codeload.github.com/bdcdo/exam2bench/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bdcdo%2Fexam2bench/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31402276,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-04T13:51:56.345Z","updated_at":"2026-04-04T13:51:56.948Z","avatar_url":"https://github.com/bdcdo.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# exam2bench\n\nExtrator de questões de provas de concursos públicos brasileiros para avaliação de LLMs.\n\nTransforma PDFs de provas e gabaritos em CSVs estruturados, permitindo criar benchmarks para avaliar modelos de linguagem.\n\n## Funcionalidades\n\n- Converte PDFs de provas em imagens de alta qualidade (300 DPI)\n- Utiliza Google Gemini para extrair questões de forma estruturada\n- Lida com páginas pré/pós-textuais automaticamente\n- Extrai gabaritos de múltiplos tipos de prova (usa o Tipo 1/A)\n- Combina questões com respostas corretas\n- Exporta para CSV em formato padronizado\n- Contabiliza tokens utilizados na extração\n\n## Instalação\n\nRequer Python 3.11+.\n\n```bash\n# Clone o repositório\ngit clone https://github.com/bdcdo/exam2bench.git\ncd exam2bench\n\n# Instale as dependências com uv\nuv sync\n```\n\n## Configuração\n\nConfigure sua API key do Google AI:\n\n```bash\nexport GOOGLE_API_KEY=\"sua-api-key\"\n```\n\n## Uso\n\n### Convenção de Nomes dos PDFs\n\nOs PDFs devem seguir a convenção de nomes:\n- Prova: `nome-prova.pdf`\n- Gabarito: `nome-gabarito.pdf`\n\nExemplo:\n```\nexams/\n├── vunesp-2025-tj-sp-prova.pdf\n├── vunesp-2025-tj-sp-gabarito.pdf\n├── cespe-2024-pf-prova.pdf\n└── cespe-2024-pf-gabarito.pdf\n```\n\n### Executando\n\nColoque os PDFs na pasta `exams/` e execute:\n\n```bash\nuv run exam2bench\n```\n\nPara modo debug (mostra detalhes da extração):\n\n```bash\nuv run exam2bench --debug\n```\n\nOs CSVs serão gerados na pasta `output/`.\n\n### Saída\n\nO CSV gerado contém as seguintes colunas:\n\n| Coluna | Descrição |\n|--------|-----------|\n| `numero` | Número da questão |\n| `pergunta` | Texto completo do enunciado |\n| `alternativas` | Alternativas em JSON: `[{\"letra\": \"A\", \"texto\": \"...\"}]` |\n| `resposta_correta` | Letra da resposta correta (A, B, C, D ou E) |\n| `prova_origem` | Identificador da prova |\n\nExemplo:\n```csv\nnumero,pergunta,alternativas,resposta_correta,prova_origem\n1,\"Qual é a capital do Brasil?\",\"[{\"\"letra\"\": \"\"A\"\", \"\"texto\"\": \"\"Rio de Janeiro\"\"}, {\"\"letra\"\": \"\"B\"\", \"\"texto\"\": \"\"Brasília\"\"}]\",B,vunesp-2025-tj-sp\n```\n\nAo final da execução, é exibido um resumo com o total de tokens utilizados:\n```\nTokens utilizados:\n  Input: 1,234,567 | Output: 12,345 | Total: 1,246,912\n```\n\n## Estrutura do Projeto\n\n```\nexam2bench/\n├── src/\n│   └── exam2bench/\n│       ├── __init__.py\n│       ├── main.py           # CLI e orquestração\n│       ├── models.py         # Modelos Pydantic\n│       ├── pdf_processor.py  # PDF → imagens\n│       ├── extractor.py      # LangChain + Gemini\n│       ├── merger.py         # Merge questões + gabarito\n│       └── exporter.py       # Exportação CSV\n├── tests/\n│   ├── test_pdf_processor.py\n│   ├── test_merger.py\n│   └── test_exporter.py\n├── exams/                    # PDFs de entrada\n├── output/                   # CSVs gerados\n└── pyproject.toml\n```\n\n## Testes\n\n```bash\nuv run pytest -v\n```\n\n## Tecnologias\n\n- [LangChain](https://python.langchain.com/) - Framework para LLMs\n- [Google Gemini](https://ai.google.dev/) - Modelo de visão/linguagem\n- [PyMuPDF](https://pymupdf.readthedocs.io/) - Processamento de PDFs\n- [Pydantic](https://docs.pydantic.dev/) - Validação de dados estruturados\n- [Pandas](https://pandas.pydata.org/) - Manipulação de dados\n\n## Licença\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbdcdo%2Fexam2bench","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbdcdo%2Fexam2bench","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbdcdo%2Fexam2bench/lists"}