----- Mensaje original -----
De: "Manuel A. Estevez Fernandez" <stvz...@gmail.com>
Para: "La lista de python en castellano" <Python-es@python.org>
Enviados: Jueves, 29 de Mayo 2014 19:03:47
Asunto: [Python-es] Analizar cadena y extraer valores




Saludos a todos 


Tengo la siguiente necesidad: 


Extraer el texto de un archivo PDF (una factura), el cual lo resolví utilizando 
pyPdf, sin embargo el texto texto resultante de la lectura, es una sola linea 
de texto de la cual debo extraer. 
El patrón de la información siempre es el mismo: 


COMMERCIAL INVOICESeller [Datos] Consignee [Datos] Notify Party [Datos] 
Departure Date: [datos] Delivery and Payment Term [Datos] Country of origin 
[Datos] Invoice No. & Date [Datos] PO no. & Date [Datos] Buyer Reference NO & 
Date [Datos] Buyer [Datos] Remarks [Datos] Other References [Datos ]Goods 
description Model code Quantity Unit priceAmount [descripcion] [Modelo] 
[Cantidad] [PrecioUnitario][Monto] Total: [Descripcion] [Cantidad] 
[Importe][Moneda][descripcion] [Modelo] [Cantidad] [PrecioUnitario][Monto] 
Total: [Descripcion] [Cantidad] [Importe][Moneda][descripcion] [Modelo] 
[Cantidad] [PrecioUnitario][Monto] Total: [Descripcion] [Cantidad] 
[Importe][Moneda] /////////END OF DATA////////////// 


Las que se encuentran en negritas son los tags que se repiten de forma fija. 


Sería de mucha ayuda si me pudieran indicar cuáles herramientas utilizar o 
algún método general para realizar este proceso. 


Gracias de antemano. 

by: 

ISC. Manuel Alejandro Estévez Fernández 

-------------------------------------------
Hola.
No conozco pyPDF.
Para analizar PDFs uso el programa pdftotext incluido en el paquete 
poppler-utils en linux. Creo que hay algo parecido también en Windows. La 
salida es un html en el que separa cada palabra con sus coordenadas indicando 
también los saltos de página.

$ pdftotext -htmlmeta -bbox impreso.pdf impreso.html

Y el documento generado tiene este aspecto:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";><html 
xmlns="http://www.w3.org/1999/xhtml";>
<head>
<title></title>
<meta name="Producer" content="Acrobat Distiller 4.0 for Windows"/>
<meta name="CreationDate" content=""/>
</head>
<body>
<doc>
  <page width="595.000000" height="842.000000">
    <word xMin="462.760000" yMin="30.882720" xMax="476.708536" 
yMax="37.320720">Sello</word>
    <word xMin="478.599568" yMin="30.882720" xMax="501.197992" 
yMax="37.320720">registro</word>
    <word xMin="41.699520" yMin="197.208240" xMax="48.137520" 
yMax="243.360000">SOLICITANTE</word>
    <word xMin="54.040000" yMin="176.562820" xMax="66.043216" 
yMax="183.000820">DNI</word>
    <word xMin="77.422120" yMin="176.562820" xMax="88.506616" 
yMax="183.000820">CIF</word>
  </page>
</doc>
</body>
</html>

Puede ser un poco pesado tener que tratar palabra a palabra pero en mi caso es 
porque los programas que pasan pdf a texto plano, en caso de texto en tablas 
pueden mezclar unos campos con otros. Con esta solución, no es difícil hacer 
algunas funciones que recojan el texto en una región determinada. Las tengo en 
python, si te interesa te las paso.



_______________________________________________
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a