Use a ferramenta pdfread.py ao lado deste arquivo para ler PDFs. Execute de qualquer uma das seguintes formas:
- Com uv 0.11+ (preferencial): invoque
pdfread.pydiretamente — o shebang executa viauv run, e a primeira invocação baixa dependências e pode levar um minuto. - Sem uv:
python3 pdfread.py …funciona em qualquer Python 3.10+ que tenhapymupdf4llm>=0.0.17instalado (pip install pymupdf4llm).
O comando search precisa de SQLite com FTS5; Pythons gerenciados por uv e quase todos
os Pythons modernos de sistema o incluem, e o script exibe um erro claro caso contrário.
Execute pdfread.py --help para uso completo. Em resumo:
pdfread.py info ARQUIVO— contagem de páginas, metadados, sumário/índice. Comece por aqui.pdfread.py search ARQUIVO "termos"— páginas que mencionam as palavras-chave, ranqueadas por BM25 com um trecho por resultado. A primeira busca constrói um índice em cache (segundos); buscas posteriores são instantâneas. Os termos são combinados com E,termo*corresponde a prefixos,--rawativa a sintaxe completa do FTS5 ("frase exata", OU, PERTODE). Apenas camada de texto — páginas escaneadas são invisíveis para busca.pdfread.py text ARQUIVO --pages 10-25— texto Markdown para um intervalo de páginas baseado em 1. Figuras aparecem como placeholders[image: p12-img2 640x480px].pdfread.py image ARQUIVO p12-img2— salva essa figura como PNG e imprime seu caminho; visualize-a com sua ferramenta de leitura de arquivos.pdfread.py images ARQUIVO --pages 12— lista os IDs das figuras nas páginas.pdfread.py render ARQUIVO 7— renderiza uma página inteira (ou--rect x0,y0,x1,y1recorte) como PNG; a alternativa para páginas escaneadas e qualquer coisa que a camada de texto não capturou.
Preservando contexto em PDFs grandes
Para perguntas pontuais ("onde o contrato menciona taxas de resgate?"),
execute search primeiro e leia apenas as páginas com resultados com text --pages — sem
necessidade de subagentes. O cache do índice é compartilhado, então subagentes também podem usar search
sem reconstruí-lo.
Para síntese ampla, não despeje um documento inteiro na conversa principal. Em vez disso:
- Execute
infopara obter a contagem de páginas e o sumário, e divida o documento em intervalos sensatos (por capítulo, ou ~15–25 páginas). - Crie um subagente por intervalo com instruções como: "Execute
<caminho>/pdfread.py text <arquivo> --pages 10-25e responda <à pergunta do usuário> / resuma em no máximo N palavras. Se um placeholder[image: ...]parecer relevante, extraia-o com o comandoimagee examine-o." - Mantenha apenas os resumos/respostas na conversa principal e sintetize a partir deles. Reconsulte páginas específicas você mesmo apenas quando um resumo indicar que a resposta está ali.
Notas
- Não há OCR: uma página sem camada de texto retorna apenas seu placeholder
[image: ...]de página inteira (ou uma nota "nenhum texto extraível") — extraia ourendera página e leia a imagem visualmente. - A extração é determinística: os IDs das imagens são estáveis entre execuções, então o ID reportado por um subagente pode ser extraído posteriormente da conversa principal.