Cómo recuperar una cantidad en PDF, su posición en la página
Este artículo demuestra el uso de PyMuPDF para ubicar una cantidad repetida de texto dentro de un rectángulo específico. Al analizar los primeros cinco campos del octeto de palabras y verificar el número de candidatos, se pueden evitar errores de juicio en el empalme de fragmentos. Proporciona ejemplos de Python a nivel de memoria, estrategias de procesamiento de límites y tablas de aceptación, y ofrece sugerencias prácticas para conectarse con el flujo de trabajo de traducción de documentos OmniDoc.
¿Cómo localizar importes duplicados? Conclusión de una frase
Cuando el diseño sea fijo, primero limite el área conocida y luego verifique el texto y deje el número de candidatos a la persona que llama para que lo juzgue. Es más fácil de interpretar que seguir acumulando expresiones regulares y es menos probable que se cometan errores silenciosos.
| tu situación | Prácticas recomendadas | razón |
|---|---|---|
| La misma cantidad aparece en varios lugares de la página. | Limite la búsqueda al área rectangular donde se encuentra el campo comercial y luego busque | La búsqueda de texto completo no puede determinar qué campo es el campo comercial |
| Hay varios candidatos en el área de consulta. | Devolver todos los candidatos, combinados con etiquetas o desambiguación manual | Los programas no deben tomar decisiones para el negocio. |
| No hay resultados en el área de consulta. | Marque el motivo y compruebe la página original, sin relleno de ceros. | Una región incorrecta, cantidades divididas o capas de texto faltantes pueden dar como resultado cero resultados |
| La posición del marco parece desplazada. | Cadenas de transformación explícitas para rotación, recorte y escalado de renderizado | Mezclar coordenadas de visualización y coordenadas extraídas provocará desviaciones |
Dos cantidades idénticas en un solo extracto
1,200.00 aparece dos veces en un extracto: una vez en la columna de monto adeudado y otra en el texto de descripción. La búsqueda de texto completo puede encontrarlos, pero no puede decidir cuál es el campo comercial.
Si el diseño del formulario es fijo, normalmente es más fácil de interpretar limitando primero un área conocida y luego buscando en el texto que continuando ajustando la expresión regular. La clave no es "encontrar sólo un cuadro", sino tratar tanto los resultados cero como los resultados múltiples como resultados claros y no permitir que el programa tome decisiones no autorizadas.
Deja la posición de la palabra, no solo el texto.
`page.get_text("words")` de PyMuPDF devuelve un registro de palabra con posición, el campo común es (x0, y0, x1, y1, text, block_no, line_no, word_no). El siguiente ejemplo solo toma los primeros cinco campos y los últimos tres números no participan en el filtrado regional por el momento.
La "palabra" aquí es el fragmento dado por el extractor, que no es necesariamente igual a una palabra en el sentido lingüístico, ni se garantiza que una cantidad sea siempre un fragmento completo. 1,200.00 puede estar desarmado o puede tener etiquetas adyacentes. Este artículo solo trata sobre la comparación exacta de fragmentos completos: prefiero entregar registros que no cumplen con las condiciones para su revisión que unirlos silenciosamente en una cantidad aparentemente legal.
Verificar con dos páginas sintéticas del mismo importe
Creamos una nueva página PDF en la memoria y colocamos la misma cantidad cerca de las coordenadas verticales 120 y 420 respectivamente. El área de consulta solo cubre la cantidad anterior.
El punto de inserción de texto es la posición de la línea base, no la esquina superior izquierda del cuadro de texto. La altura y el ancho del cuadro real se verán afectados por la fuente y el tamaño de la fuente, por lo que las coordenadas no se pueden codificar en un valor fijo.
La salida correcta debe cumplir dos condiciones:
- Solo hay un candidato en el área de consulta y el rectángulo del candidato está completamente incluido en el área.
- Luego de ampliar el alcance de la consulta a toda la página, se deben obtener dos candidatos, ingresando así a la rama de ambigüedad.
Finalmente, verifique que no haya ningún resultado con una cadena que no esté en la página. Esto se acerca más al contrato requerido por una interfaz real que simplemente demostrar una búsqueda exitosa.
Código ejecutable: entregue el número de candidatos a la persona que llama
La dependencia es pymupdf, instale y bloquee la versión en el entorno de prueba. El siguiente código no accede a la red, no escribe archivos y no modifica el documento original del cliente. Construye sólo un PDF de demostración.
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 requiere una inclusión completa, en lugar de limitarse a tocar el borde de la región. Si el cuadro de consulta es demasiado estrecho, los montos laterales pueden caer en cero resultados, lo que no es una razón por la que deba ampliarse automáticamente a la página completa. Debe verificar el sistema de coordenadas utilizado al medir el área antes de decidir cómo ajustar el rango.
Si el negocio permite que el punto central caiga, se deben escribir reglas adicionales y se deben realizar pruebas adicionales para detectar la superposición de límites. No cambiar en secreto el sentido de la sentencia en la misma función.
La lógica de producción no debe depender únicamente de assert para interceptar excepciones, ya que los modos de optimización pueden eliminar afirmaciones. Las afirmaciones del ejemplo se utilizan para la comprobación de regresión. Al acceder realmente a la cola de tareas, se deben utilizar ramas condicionales y estados comerciales claros.
Tres resultados, tres métodos de procesamiento.
Los resultados de las consultas suelen dividirse en tres categorías, cada una requiriendo diferentes acciones de procesamiento:
- Only One Hit: Solo hay un fragmento completo que coincide en la región, guardando el número de página, el texto original, el rectángulo y la versión de la regla.
- Cero Acerto: Posiblemente debido a regiones incorrectas, cantidades divididas o capas de texto ausentes. Marca la causa como candidata, revisa la página original y no rellenes ceros.
- Múltiples Resultados: Si hay cantidades duplicadas en la misma zona o la plantilla ha cambiado, devuelva todos los candidatos, combina etiquetas o desambigua manualmente.
Las otras dos situaciones también deben gestionarse por separado:
- Caja pero valores incorrectos: La capa de texto puede ser incorrecta o el destino correspondiente es incorrecto; Volver a la página original para verificación y no permitir que las coordenadas sean avaladas por valores numéricos.
- Box Offset: Las coordenadas de visualización y extracción pueden mezclarse, requiriendo cadenas de transición claras para rotación, recorte y escalado de renderizado.
📊 Comparación de núcleos
| Métodos de investigación | Criterios de determinación | Se necesita precaución |
|---|---|---|
| Inclusión completa (ejemplo utilizado) | El rectángulo candidato se coloca completamente dentro del área de consulta | Si la caja de consulta es demasiado ajustada, la cantidad en el borde puede ser cero |
| Cae el punto central (las reglas deben escribirse por separado) | Los puntos centrales candidatos se encuentran dentro de la región | La superposición de límites requiere pruebas suplementarias separadas |
| Buscando páginas completas | Buscar a todos los candidatos | La mayoría de los resultados son ambiguos y requieren etiquetado o un juicio manual adicional |
Esto no es un extractor de cantidad universal
El código no analiza la moneda, los miles de separadores ni las reglas decimales, ni reconoce semánticas como "periodo actual a pagar" y "saldo del periodo anterior". Que solo haya un candidato no significa que el negocio sea el significado correcto.
La copia escaneada también debe estar disponible primero con texto y ubicación. No se pueden permitir páginas con capas de texto pero contenido incorrecto solo porque puedan copiarse.
Este artículo utiliza una página de composición sin rotar. Cuando la página real gira, primero especifica si la caja de consulta proviene de la pantalla o extrae coordenadas, y solo convierte si es necesario. No multipliques por una matriz independientemente de la fuente.
Al guardar páginas fuente, distingue entre índices de cero a cero y números de página orientados a la persona para evitar pensar erróneamente que no existe evidencia al revisar páginas adyacentes.
🎯 ¿Qué método te conviene?
Si necesitas extraer datos de un formulario de diseño fijo
Primero, limita el área donde se encuentra el campo de negocio, luego busca la cantidad y guarda el número de página, el rectángulo y la versión de la regla.
Si te encuentras con varios candidatos
No tomes la primera opción directamente; devuelves a todos los candidatos y determina los campos de negocio basándote en etiquetas o en el juicio manual.
Si tu página suele quedarse sin acerto
Primero, comprueba si existen las coordenadas de área, la cantidad y la capa de texto, y luego decide si ajustar el alcance o cambiar a otras rutas de extracción.
Si quieres hacer traducción de documentos
Detalles clave como la cantidad, la fecha y la cantidad se incluyen en la revisión manual, con una clara división del trabajo entre inspección técnica y revisión manual.
Deja los números clave para la revisión de la traducción
La traducción de documentos no debe basarse solo en la fluidez de las frases, sino también en aspectos clave como la cantidad, la fecha y la cantidad. OmniDoc (Entrada de producto) ofrece múltiples portales de traducción de documentos, y la comparación bilingüe introducida en la web oficial puede servir como punto de entrada para la revisión; Los scripts de posicionamiento coordinado son adecuados para preservar la evidencia original y ayudar a localizar áreas problemáticas.
Se recomienda primero evaluar usando una muestra de desensibilización que hayas autorizado a subir. A medida que la traducción se alarga, la posición del contenido puede cambiar razonablemente, y "las coordenadas nueva y antigua son exactamente iguales" no debe tomarse como una condición estricta para una traducción correcta.
Controles más valiosos son: si se retiene la cantidad, si la moneda está claramente definida y si la etiqueta correspondiente sigue apuntando al mismo significado comercial.
❓ Preguntas frecuentes (FAQ)
1. ¿Por qué no dar la primera calada?
Porque la búsqueda en texto completo solo puede indicarte dónde aparece la cantidad y no puede determinar qué parte pertenece al campo de negocio. Recibir el primer golpe directamente puede parecer correcto, pero la fuente podría estar ya equivocada.
2. ¿Por qué la caja de consulta requiere inclusión completa, en lugar de limitarse a tocar el borde?
El ejemplo utiliza un método de determinación completamente incluido para evitar tratar segmentos incompletos como coincidencias válidas. Si la caja de consulta es demasiado ajustada y causa cero coincidencias, primero comprueba el sistema de coordenadas y el rango, en lugar de ampliar automáticamente toda la página.
3. ¿Qué deberías hacer cuando el resultado de la consulta es cero?
Marca la causa candidata y revisa la página original; no añadas ceros. Regiones incorrectas, cantidades divididas o capas de texto faltantes pueden resultar en cero impactos.
4. ¿Se puede usar este código directamente en facturas reales?
No puede usarse directamente. El ejemplo no trata moneda, separador de miles ni semántica empresarial, y la muestra de síntesis de este artículo no representa una prueba de precisión para billetes reales.
📝 Resumen
Al determinar la cantidad, primero define el área y luego da el número completo de candidatos al llamante para su juicio. Tanto cero como múltiples acertos deben tener acciones de manejo claras. Primero, utiliza muestras anximizadas para validar las reglas y luego integra gradualmente documentos reales.
Experiencia ahora: Sube tu documento para empezar a traducir, conservando el formato original


