[Python-es] Analizar cadena y extraer valores

Chema Cortes pych3m4 en gmail.com
Vie Mayo 30 02:45:12 CEST 2014


El 30 de mayo de 2014, 0:23, Manuel A. Estevez Fernandez <stvzito en gmail.com>
escribió:

> Gracias por el aporte Chema.
>
> Estoy empezando a echarle una leída al modulo re, de momento se ocurrio
> algo tal vez sencillo y poco elegante para la primera parte de la factura:
>
> _texto.split('Other References')[1].split('Goods description')[0]
>
> E ir sacando la información entre "TAGS".
>
> Aún no comienzo a pensar como extraer, la parte del detalle, ya que el
> único tag que encuentro recurrente es Total:  y cuando hay un salto de
> pagina me encuentro lo siguiente:
>
> - Continue -_________________________   Signed by    Page No. # of #   Inv
> No.  [#######]
>

Seguramente sólo se usan unos pocos tipos de monedas en las facturas, por
lo que puedes usar ése campo para separar las líneas de detalle:

pat_detalle = re.compile("(.*?Total:.*?\d+(USD|Euros)")

En cuanto a los saltos de página, si son así puedes suponer que empiezan
por "- Continue" y acaban por "\d+\]" para poder ignorarlos en las
búsquedas:

pat_remove = re.compile("- Continue -.*?\d+\]")

texto_limpio = pat_remove.sub("", texto)

Tendrás que probar cuál es el patrón RE que mejor funciona.



>
>
> Comenzaré con el proceso de Prueba y Error.
>
> Saludos.
>
>
> by:
>
> ISC. Manuel Alejandro Estévez Fernández
>
>
>
> El 29 de mayo de 2014, 14:28, Chema Cortes <pych3m4 en gmail.com> escribió:
>
>
>>
>>
>> El 29 de mayo de 2014, 19:03, Manuel A. Estevez Fernandez <
>> stvzito en gmail.com> escribió:
>>
>> 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.
>>>
>>
>> Lo que necesitas no sencillo. Según la variedad de facturas, necesitarás
>> muchas horas de prueba/error hasta lograr un proceso depurado que te
>> extraiga la información limpia.
>>
>> Yo empezaria con el módulo re (expresiones regulares) e intentaría
>> dividir el problema en partes.
>>
>> Algo muy sencillo para obtener todo el texto delimitado por TAGs sería:
>>
>> import re
>> pat = re.compile("TAG1(.*?)TAG2(.*?)//////END OF DATA////")
>>
>> data = pat.findall(texto)
>>
>>
>>
>>
>>>
>>> Gracias de antemano.
>>>
>>> by:
>>>
>>> ISC. Manuel Alejandro Estévez Fernández
>>>
>>>
>>> _______________________________________________
>>> Python-es mailing list
>>> Python-es en python.org
>>> https://mail.python.org/mailman/listinfo/python-es
>>> FAQ: http://python-es-faq.wikidot.com/
>>>
>>>
>>
>>
>> --
>> Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
>> http://ch3m4.org/blog
>> Buscador Python Hispano: http://ch3m4.org/python-es
>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> https://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
>>
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
Buscador Python Hispano: http://ch3m4.org/python-es
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20140530/9f7220ec/attachment.html>


Más información sobre la lista de distribución Python-es