Como recuperar um valor em PDF, sua posição na página
Este artigo demonstra o uso do PyMuPDF para localizar texto de quantidade repetida em um retângulo especificado. Ao analisar os primeiros cinco campos do octeto de palavras e verificar o número de candidatos, erros de julgamento na emenda de fragmentos podem ser evitados. Fornece exemplos de Python em nível de memória, estratégias de processamento de limites e tabelas de aceitação, além de sugestões práticas para conexão com o fluxo de trabalho de tradução de documentos OmniDoc.
Como localizar valores duplicados? Conclusão de uma frase
Quando o layout estiver fixo, primeiro limite a área conhecida e depois verifique o texto, deixando o número de candidatos para julgamento do chamador. É mais fácil interpretar do que continuar acumulando expressões regulares e é menos provável que cometa erros silenciosos.
| sua situação | Práticas recomendadas | razão |
|---|---|---|
| A mesma quantia aparece em vários lugares da página | Limite a pesquisa à área retangular onde o ramo de negócio está localizado e depois pesquise | A pesquisa de texto completo não pode determinar qual campo é o campo comercial |
| Existem vários candidatos na área de consulta | Devolver todos os candidatos, combinados com rótulos ou desambiguação manual | Os programas não devem fazer escolhas para o negócio |
| Não há ocorrências na área de consulta | Marque o motivo e verifique a página original, sem preenchimento de zeros | Região errada, valores divididos ou camadas de texto ausentes podem resultar em zero acertos |
| A posição do quadro parece deslocada | Cadeias de transformação explícitas para rotação, corte e dimensionamento de renderização | A mistura de coordenadas de exibição e coordenadas extraídas causará desvios |
Dois valores idênticos em um extrato
1,200.00 aparece duas vezes em um extrato: uma vez na coluna do valor devido e uma vez no texto descritivo. A pesquisa de texto completo pode encontrá-los, mas não pode decidir qual é a área de negócios.
Se o layout do formulário for fixo, geralmente é mais fácil interpretar limitando primeiro uma área conhecida e depois pesquisando o texto do que continuando a ajustar a expressão regular. A chave não é "encontrar apenas uma caixa", mas tratar tanto os zero acertos quanto os acertos múltiplos como resultados claros, e não permitir que o programa faça escolhas não autorizadas.
Deixe a posição da palavra, não apenas do texto
`page.get_text("words")` do PyMuPDF retorna um registro de palavra com posição, o campo comum é (x0, y0, x1, y1, text, block_no, line_no, word_no). O exemplo a seguir utiliza apenas os primeiros cinco campos e os três últimos números não estão envolvidos na filtragem regional por enquanto.
A"palavra"aqui é o fragmento fornecido pelo extrator, que não é necessariamente igual a uma palavra no sentido linguístico, nem é garantido que uma quantidade será sempre um fragmento completo.1,200.00 pode ser desmontado ou pode ter tags adjacentes. Este artigo trata apenas da correspondência exata de fragmentos completos: prefiro entregar registros que não atendam às condições para revisão do que dividi-los silenciosamente em um valor aparentemente legal.
Verifique com duas páginas sintéticas do mesmo valor
Criamos uma nova página PDF na memória e colocamos a mesma quantidade próxima às coordenadas verticais 120 e 420 respectivamente. A área de consulta cobre apenas o valor acima.
O ponto de inserção do texto é a posição da linha de base, não o canto superior esquerdo da caixa de texto. A altura e a largura da caixa real serão afetadas pela fonte e pelo tamanho da fonte, portanto, as coordenadas não podem ser codificadas em um valor fixo.
A saída correta deve atender a duas condições:
- Existe apenas um candidato na área de consulta e o retângulo candidato está totalmente incluído na área.
- Após expandir o escopo da consulta para toda a página, deverão ser obtidos dois candidatos, entrando assim no ramo da ambiguidade.
Por fim, verifique se há zero acertos com uma string que não está na página. Isso está mais próximo do contrato exigido por uma interface real do que apenas demonstrar uma pesquisa bem-sucedida.
Código executável: entregue o número de candidatos ao chamador
A dependência é pymupdf, instale e bloqueie a versão no ambiente de teste. O código a seguir não acessa a rede, não grava arquivos e não modifica o documento original do cliente. Ele constrói apenas um PDF de demonstração.
import pymupdf
def locate(page, target, query):
query = pymupdf.Rect(query)
candidates = []
for word in page.get_text("words"):
x0, y0, x1, y1, text = word[:5]
box = pymupdf.Rect(x0, y0, x1, y1)
if text == target and query.contains(box):
candidates.append(tuple(box))
return candidates
def decide(candidates):
if len(candidates) == 0:
return "missing"
if len(candidates) > 1:
return "ambiguous"
return "unique"
with pymupdf.open() as doc:
page = doc.new_page(width=595, height=842)
page.insert_text((80, 120), "1,200.00", fontsize=11)
page.insert_text((80, 420), "1,200.00", fontsize=11)
query = pymupdf.Rect(72, 100, 300, 150)
local = locate(page, "1,200.00", query)
assert decide(local) == "unique"
assert query.contains(pymupdf.Rect(local[0]))
assert decide(locate(page, "1,200.00", page.rect)) == "ambiguous"
assert decide(locate(page, "999.99", query)) == "missing"
print("unique / ambiguous / missing cases passed")
contains requer inclusão completa, em vez de apenas tocar a borda da região. Se a caixa de consulta for muito apertada, os valores laterais podem cair em zero acertos, o que não é motivo para que ela deva ser automaticamente ampliada para a página inteira. Você deve verificar o sistema de coordenadas usado ao medir a área antes de decidir como ajustar o intervalo.
Se a empresa permitir que o ponto central caia, regras adicionais deverão ser escritas e testes adicionais para sobreposição de limites deverão ser feitos. Não altere secretamente o significado do julgamento na mesma função.
A lógica de produção não deve depender apenas de assert para interceptar exceções, pois os modos de otimização podem remover asserções. As asserções no exemplo são usadas para verificação de regressão. Ao realmente acessar a fila de tarefas, devem ser usadas ramificações condicionais e estados de negócios claros.
Três resultados, três métodos de processamento
Os resultados da consulta são normalmente divididos em três categorias, cada uma exigindo diferentes ações de processamento:
- Apenas um hit: Há apenas um fragmento correspondente completo na área, e o número da página, o texto original, o retângulo e a versão da regra são salvos.
- Acerto zero: Pode ser que a área esteja errada, a quantidade esteja dividida ou a camada de texto esteja faltando. Marque a causa candidata, verifique a página original e não adicione zeros.
- Múltiplos Acertos: Existem valores duplicados na mesma área, ou o modelo foi alterado, devolver todos os candidatos, combinar rótulos ou desambiguação manual.
As outras duas situações também precisam ser tratadas separadamente:
- Há um quadro, mas o valor está errado: A própria camada de texto pode estar errada ou o alvo correspondente está errado. Você deve voltar à página original para verificar e evitar que as coordenadas endossem o valor.
- Deslocamento de aparência de quadro: as coordenadas de exibição e as coordenadas de extração podem ser misturadas, e a cadeia de transformação de rotação, corte e escala de renderização precisa ser clara.
📊 Comparação principal
| Método de consulta | Critérios de julgamento | preciso de atenção |
|---|---|---|
| Inclusão completa (exemplo adotado) | O retângulo candidato cai completamente dentro da área de consulta | Quando a caixa de consulta é muito apertada, o valor ao lado pode ter zero acertos. |
| O ponto central cai (precisa escrever outra regra) | O ponto central candidato está dentro da região | A sobreposição de limites requer testes separados |
| Consulta de página inteira | Pesquise todos os candidatos | Os resultados são em sua maioria ambíguos e requerem rotulagem ou julgamento manual adicional. |
Este não é um extrator de quantidade universal
O código não analisa moeda, separadores de milhares ou regras decimais, nem reconhece semânticas como "a pagar neste período" versus "saldo no período anterior". Só porque há apenas um candidato não significa que o significado comercial esteja correto.
A digitalização também precisa primeiro ter texto e localização disponíveis. Páginas com camada de texto, mas com conteúdo incorreto, não podem ser liberadas simplesmente porque podem ser copiadas.
Este artigo usa páginas sintéticas não giradas. Quando a página real é girada, você deve primeiro indicar se a caixa de consulta vem da tela de exibição ou das coordenadas extraídas e, em seguida, convertê-la, se necessário. Não multiplique por uma matriz, independentemente da fonte.
Ao salvar as páginas de origem, você também deve distinguir entre índices baseados em zero e números de páginas orientados a humanos para evitar que os revisores pensem erroneamente que a evidência não existe após a abertura de páginas adjacentes.
🎯 Qual método é adequado para você?
Se você precisar obter números de um formulário de layout fixo
Primeiro limite a área onde está localizado o campo comercial, depois pesquise o valor e salve o número da página, o retângulo e a versão da regra.
Se você encontrar vários candidatos
Não escolha o primeiro diretamente, retorne todos os candidatos e determine as áreas de negócios com base em rótulos ou julgamento manual.
Se sua página costuma ter zero acessos
Verifique as coordenadas da área, se o valor está dividido e se a camada de texto existe antes de decidir ajustar o intervalo ou usar outra rota de extração.
Se você quiser fazer tradução de documentos
Incorpore conteúdos importantes como valor, data, quantidade, etc. na revisão manual e tenha uma divisão clara de trabalho entre inspeção técnica e revisão manual.
Deixe números-chave para revisão pós-tradução
A tradução de documentos não depende apenas da fluidez das frases, mas também de conteúdos importantes como valor, data e quantidade devem ser confirmados um por um. OmniDoc (portal de produtos) fornece portais de tradução para uma variedade de documentos. A comparação bilíngue introduzida no site oficial pode ser utilizada como portal de avaliações; o script de posicionamento de coordenadas é adequado para reter evidências do texto original e ajudar a localizar áreas problemáticas.
Recomenda-se usar primeiro amostras dessensibilizadas que você tem permissão para carregar para avaliação. Quando a tradução se torna mais longa, a posição do conteúdo pode mudar razoavelmente."As coordenadas antigas e novas são exatamente iguais"não pode ser considerada uma condição difícil para uma tradução correta.
Verificações mais valiosas são: se o valor foi retido, se a moeda está clara e se a etiqueta correspondente ainda aponta para o mesmo significado comercial.
❓ Perguntas frequentes (FAQ)
1. Por que não dar o primeiro golpe?
Como a pesquisa de texto completo só pode informar onde o valor aparece, ela não pode determinar qual local é o campo comercial. Basta dar o primeiro golpe e o resultado pode parecer correto, mas a fonte pode estar errada.
2. Por que a caixa de consulta precisa ser completamente incluída em vez de apenas tocar na borda?
O exemplo usa um método de determinação de inclusão completa para evitar tratar fragmentos incompletos como ocorrências válidas. Se a caixa de consulta for muito estreita e resultar em zero ocorrências, o sistema de coordenadas e o intervalo deverão ser verificados primeiro, em vez de ampliar automaticamente para a página inteira.
3. O que você deve fazer quando o resultado da consulta for zero?
Marque os candidatos de causa e verifique a página original sem preenchimento zero. Áreas erradas, valores divididos ou camadas de texto ausentes podem resultar em zero acertos.
4. Este código pode ser usado diretamente para notas reais?
Não pode ser usado diretamente. Os exemplos não tratam de moeda, separadores de milhares e semântica comercial, e os exemplos sintéticos neste artigo não representam o teste de precisão de notas reais.
📝 Resumo
Ao localizar o valor, primeiro limite a área e depois entregue o número completo de candidatos ao chamador para julgamento. Deve haver ações de processamento claras para zero acertos e múltiplos acertos. Primeiro use amostras dessensibilizadas para verificar as regras e, em seguida, acesse gradualmente documentos reais.
Experimente agora: carregue o documento para iniciar a tradução, mantendo o layout original


