Extraccion de texto de documentos

Descripción

Este documento describe la forma de obtener texto de diferentes tipos de documentos

Prerequistos

Hasta ahora se requiere tener un linux (en algun momento futuro windows) y un conjunto de herramientas

  • Libreoffice  (todo lo que hago con soffice, seguro tambien se puede con el servicio de unoconv como se hace en el orfeo tradicional)
  • poppler-tools  (revisando hay varios wrappers en php de esta funcion. ver referencias pero hay que cogerlas con pinzas)

Proceso de extracción

1. Hoja de Calculo  (ods | fods | xls| xlsb| xlsx | ODS | FODS | XLS| XLSB| XLSX)

Lo natural es convertir la hoja de calculo en un archivo csv. Exiten dos posibilidades:

1.1  Usando el ejecutable nativo de libreoffice

El siguiente comando convierte el archivo en un archivo con el nombre y extension csv en el directorio tmpdir

$> soffice –headless –convert-to csv –outdir tmpdir archivo

1.2  Usando unoconv o unoserver

Se puede usar unoconvert  de la siguiente forma

$>  unoconvert –convert-to csv archivo $tmpdir/salida.csv

2. Documento Office (odt | doc| docx| rtf | htm | html | ODT | DOC| DOCX| RTF | HTM | HTML)

Lo natural es convertir el documento en un archivo txt.  Al igual que el anterior pueden usarse los mismoscomandos

El siguiente comando convierte el archivo en un archivo con el nombre y extension txt en el directorio tmpdir

$>  soffice –headless –convert-to txt –outdir tmpdir archivo

$>  unoconvert –convert-to txt archivo $tmpdir/salida.txt


* Hay una opcion menos generica llamada odt2txt, pero nos complicaría.

3. PDF / A

Aqui el problema es si es un PDF o un PDF/A, El primero no tiene texto y el segundo si. Entonces primero hay que testearlo. Entonces para hacer eso, verificamos un campo de texto del PDF/A que es el creador

$>  pdfinfo archivo

Este comando bota toda la información del PDF … entonces por ejemplo, filtramos el creador y si el campo existe, consideramos que es un PDF/A entonces podemos extraer texto del mismo.

Lo anterior fue nuestra primera aproximacion, pero hay excepciones, asi que buscamos otro mecanismo y surge.. los fonts usados.

pdffonts archivo | grep -v name.*type.*encoding  grep -v “^\\-\\-\\-\\-\\-“`

Si no hay fonts .. es solo una foto

Igual que los anteriores lo asignamos a un archivo tipo txt

$>  pdftotext archivo tmpdir/nuevo_nombre

Aqui tambien se suele validar la cantidad de texto extraido. En nuestro script verificamos que sean mas de 10 bits (arbitrario) para determinar si vale la pena incluir el texto.

** OJO .. aqui no hay nada de si el PDF esta protegido por contraseña.

4. Imagenes  (PDFs, TIFF, PNG, JPG, etc)

Esto no lo hemos contemplado porque involucra OCR en serio .. que suele ser muy pesado y tocaria usar una herramienta libre como tesseract. Se puede .. pero se tiene descartado en este punto. De todas maneras como informacion:

#> tesseract archivo.tiff archivo.txt -l spa  

Suponiendo el texto en español. Este proces puede optimizarse con spellcheckers .. y demas, pero este no es el lugar para esa discusion.

Hemos encontrado una herramienta ya mas madura llamada ocrmypdf

}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}

Trucos

Problemas

1. Si el instale_mrtg.sh no le funciona

-

Referencias

- Poppler-tools wrappers     https://phppackages.org/s/poppler

- https://github.com/ncjoes/poppler-php
- https://github.com/php-poppler/php-poppler
- https://www.phpclasses.org/package/9423-PHP-Convert-PDF-to-HTML-using-Poppler.html
 

FIN


Advertencia

Este documento es privado y es de u so exclusivo de sus autores y de SKINA TECH. Cualquier uso sin una autorización escrita es contra la ley de derechos de autor y de propiedad intelectual, y será motivo de una acción legal.


 

20-Agosto-2020 J.E.Gomez v1.0 Primera version

Volver arriba