Detección de tablas y extracción de información mediante aprendizaje profundo

Nodo de origen: 1325422

Introducción a la extracción de tablas

La cantidad de datos que se recopilan aumenta drásticamente día a día con un número creciente de aplicaciones, software y plataformas en línea.

Para manejar/acceder a estos enormes datos de manera productiva, es necesario desarrollar valiosas herramientas de extracción de información.

Una de las subáreas que exige atención en el campo de Extracción de información es la extracción de tablas de imágenes o la detección de datos tabulares de formularios, PDF y documentos.

Extracción de mesa es la tarea de detectar y descomponer la información de la tabla en un documento.

Table OCR - ¡Nanonets extrayendo datos de tablas de una imagen!
Table OCR: ¡nanoredes que extraen datos de tablas de una imagen!

Imagine que tiene muchos documentos con datos tabulares que necesita extraer para su posterior procesamiento. Convencionalmente, puede copiarlos manualmente (en un papel) o cargarlos en hojas de Excel.

Sin embargo, con el software OCR de tablas, puede detectar tablas automáticamente y extraer todos los datos tabulares de los documentos de una sola vez. Esto ahorra mucho tiempo y retrabajo.

En este artículo, primero veremos cómo Nanonets puede extraer automáticamente tablas de imágenes o documentos. Luego cubriremos algunas técnicas populares de DL para detectar y extraer tablas en documentos.


¿Quiere extraer datos tabulares de facturas, recibos o cualquier otro tipo de documento? Echa un vistazo a Nanonets Extractor de tablas PDF para extraer datos tabulares. Programar una demostración para obtener más información sobre la automatización extracción de mesa.


Índice del contenido

Extraiga la tabla de la imagen con Nanonets Table OCR

  • Regístrate para una cuenta gratuita de Nanonets

    • Cargue imágenes/archivos en el modelo Nanonets Table OCR
    • Nanonets detecta y extrae automáticamente todos los datos tabulares
    • Edite y revise los datos (si es necesario)
    • Exporte los datos procesados ​​como Excel, csv o JSON

Extraer tabla de imagen con Nanonets

¿Quieres raspar datos de PDF documentos, convertir tabla PDF a Excel or automatizar la extracción de tablas? Descubra cómo nanoredes Raspador de PDF or analizador de PDF puede impulsar su negocio para que sea más productivo.


API de OCR de tabla de nanoredes

OCR de mesa con Nanonets
OCR de mesa con Nanonets

La API de OCR de nanonetas le permite construir modelos de OCR con facilidad. No tiene que preocuparse por el preprocesamiento de sus imágenes o preocuparse por las plantillas coincidentes o construir motores basados ​​en reglas para aumentar la precisión de su modelo de OCR.

Puede cargar sus datos, anotarlos, configurar el modelo para que se entrene y esperar a recibir predicciones a través de una interfaz de usuario basada en navegador sin escribir una sola línea de código, preocuparse por las GPU o encontrar las arquitecturas adecuadas para la detección de su tabla mediante modelos de aprendizaje profundo.

También puede adquirir las respuestas JSON de cada predicción para integrarlas con sus propios sistemas y crear aplicaciones basadas en aprendizaje automático basadas en algoritmos de última generación y una infraestructura sólida.

https://nanonets.com/documentation/


¿Su empresa se ocupa del reconocimiento de datos o texto en documentos digitales, PDF o imágenes? ¿Se ha preguntado cómo extraer datos tabulares, extraer texto de imágenes , extraer datos de PDF or extraer texto de PDF precisa y eficientemente?


A quién le resultará útil la extracción de tablas

Como se discutió en la sección anterior, las tablas se usan con frecuencia para representar datos en un formato limpio. Podemos verlos muy a menudo en varias áreas, desde organizar nuestro trabajo estructurando datos en tablas hasta almacenar grandes activos de empresas. Hay muchas organizaciones que tienen que lidiar con millones de mesas todos los días. Para facilitar tareas tan laboriosas de hacerlo todo manualmente, necesitamos recurrir a técnicas más rápidas. Analicemos algunos casos de uso donde tablas de extracción puede ser esencial:

Fuente: patricio tomasso, Despejar

Casos de uso personal

La extracción de mesa El proceso también puede ser útil para pequeños casos de uso personal. A veces capturamos documentos en el teléfono móvil y luego los copiamos a nuestras computadoras. En lugar de usar este proceso, podemos capturar directamente los documentos y guardarlos como formatos editables en nuestras plantillas personalizadas. A continuación se presentan algunos casos de uso sobre cómo podemos incluir la extracción de tablas en nuestra rutina personal:

Escaneo de documentos al teléfono: A menudo capturamos imágenes de tablas importantes en el teléfono y las guardamos, pero con la técnica de extracción de tablas, podemos capturar las imágenes de las tablas y almacenarlas directamente en formato tabular, ya sea en Excel o en hojas de Google. Con esto, no necesitamos buscar imágenes o copiar el contenido de la tabla a ningún archivo nuevo, en su lugar, podemos usar directamente las tablas importadas y comenzar a trabajar en la información extraída.

Documentos a HTML: En las páginas web, encontramos mucha información presentada usando tablas. Nos ayudan en comparación con los datos y nos dan una nota rápida sobre los números de manera organizada. Al utilizar el proceso de extracción de tablas, podemos escanear documentos PDF o imágenes JPG / PNG, y cargar la información directamente en un formato de tabla personalizado de diseño propio. Además, podemos escribir scripts para agregar tablas adicionales basadas en las tablas existentes y, por lo tanto, digitalizar la información. Esto nos ayuda a editar el contenido y acelera el proceso de almacenamiento.


Casos de uso industrial

Hay varias industrias en todo el mundo que se basan enormemente en el papeleo y la documentación, especialmente en los sectores de Banca y Seguros. Desde almacenar los detalles de los clientes hasta atender las necesidades de los clientes, las tablas son ampliamente utilizadas. Esta información nuevamente se pasa como un documento (copia impresa) a diferentes sucursales para su aprobación, en donde a veces, la falta de comunicación puede conducir a errores al obtener información de las tablas. En cambio, usar la automatización aquí hace que nuestras vidas sean mucho más fáciles. Una vez que se capturan y aprueban los datos iniciales, podemos escanear directamente esos documentos en tablas y seguir trabajando en los datos digitalizados. Sin mencionar la reducción del consumo de tiempo y las fallas, podemos notificar a los clientes sobre la hora y el lugar donde se procesa la información. Esto, por lo tanto, garantiza la confiabilidad de los datos y simplifica nuestra forma de abordar las operaciones. Veamos ahora los otros posibles casos de uso:

Control de calidad: El control de calidad es uno de los servicios centrales que brindan las principales industrias. Por lo general, se realiza internamente y para las partes interesadas. Como parte de esto, hay muchos formularios de comentarios que se recopilan de los consumidores para extraer comentarios sobre el servicio prestado. En los sectores industriales, usan tablas para anotar listas de verificación y notas diarias para ver cómo funcionan las líneas de producción. Todo esto puede documentarse en un solo lugar utilizando la extracción de tablas con facilidad.

Seguimiento de activos: En las industrias manufactureras, las personas usan tablas codificadas para realizar un seguimiento de las entidades fabricadas como acero, hierro, plástico, etc. Cada artículo fabricado está etiquetado con un número único en el que usan tablas para realizar un seguimiento de los artículos fabricados y entregados todos los días. La automatización puede ayudar a ahorrar mucho tiempo y activos en términos de extravíos o inconsistencia de datos.


Casos de uso comercial

Hay varias industrias comerciales que se ejecutan en hojas de Excel y formularios sin conexión. Pero en un momento dado, es difícil buscar entre estas hojas y formularios. Si ingresamos manualmente estas tablas, lleva mucho tiempo y la posibilidad de que los datos ingresados ​​de manera incorrecta será alta. Por lo tanto, la extracción de tablas es una mejor alternativa para resolver los casos de uso de negocios, ya que a continuación se detallan pocos.

Factura Automatización: Hay muchas industrias de pequeña y gran escala cuyas facturas todavía se generan en formatos tabulares. Estos no proporcionan declaraciones de impuestos debidamente aseguradas. Para superar tales obstáculos, podemos usar la extracción de tablas para convertir todos facturas en un formato editable y, por lo tanto, actualícelos a una versión más nueva.

Automatización de formularios: Los formularios en línea están revolucionando este método probado y verdadero al ayudar a las empresas a recopilar la información que necesitan y, al mismo tiempo, conectarla a otras plataformas de software integradas en su flujo de trabajo. Además de reducir la necesidad de entrada manual de datos (con entrada de datos automatizada) y correos electrónicos de seguimiento, la extracción de tablas puede eliminar el costo de impresión, envío, almacenamiento, organización y destrucción de las alternativas de papel tradicionales.


¿Tiene un problema de OCR en mente? quiero digitalizar facturas , PDF o matrículas? Dirigirse a Nanonetas y crea modelos OCR gratis!


Aprendizaje profundo en acción

El aprendizaje profundo es parte de la familia más amplia de métodos de aprendizaje automático basados ​​en redes neuronales artificiales.

Neural Network es un marco que reconoce las relaciones subyacentes en los datos dados a través de un proceso que imita la forma en que opera el cerebro humano. Tienen diferentes capas artificiales a través de las cuales pasan los datos, donde aprenden sobre las características. Existen diferentes arquitecturas como NN de convolución, NN recurrentes, Autoencoders, NN adversarios generativos para procesar diferentes tipos de datos. Estos son complejos pero representan un alto rendimiento para abordar problemas en tiempo real. Veamos ahora la investigación que se ha llevado a cabo en el campo de extracción de tablas usando Redes Neurales y también, repasemos brevemente.


TableNet

Papel: TableNet: modelo de aprendizaje profundo para la detección de tablas de extremo a extremo y la extracción de datos tabulares de imágenes de documentos escaneados

Introducción: TableNet es una arquitectura moderna de aprendizaje profundo que fue propuesta por un equipo del año de TCS Research en el año 2019. La principal motivación fue extraer información de las tablas escaneadas a través de teléfonos móviles o cámaras.

Propusieron una solución que incluye la detección precisa de la región tabular dentro de una imagen y, posteriormente, detectar y extraer información de las filas y columnas de la tabla detectada.

Conjunto de datos: El conjunto de datos utilizado fue Marmot. Tiene 2000 páginas en formato PDF que fueron recopiladas con las correspondientes verdades fundamentales. Esto también incluye páginas en chino. Enlace - http://www.icst.pku.edu.cn/cpdp/sjzy/index.htm

arquitectura: La arquitectura se basa en Long et al., un modelo codificador-decodificador para la segmentación semántica. La misma red de codificador/descodificador se utiliza como arquitectura FCN para la extracción de tablas. Las imágenes son preprocesadas y modificadas usando el Tesseract OCR.

El modelo se deriva en dos fases sometiendo la entrada a técnicas de aprendizaje profundo. En la primera fase, utilizaron los pesos de una red VGG-19 previamente entrenada. Han reemplazado las capas completamente conectadas de la red VGG usada por capas convolucionales 1 × 1. Todas las capas convolucionales son seguidas por la activación de ReLU y una capa de abandono de probabilidad 0.8. Llaman a la segunda fase como la red decodificada que consta de dos ramas. Esto es según la intuición de que la región de la columna es un subconjunto de la región de la tabla. Por lo tanto, la red de codificación única puede filtrar las regiones activas con mayor precisión utilizando características de las regiones de tabla y columna. La salida de la primera red se distribuye a las dos ramas. En la primera rama, se aplican dos operaciones de convolución y el mapa de características final se escala para cumplir con las dimensiones de la imagen original. En la otra rama para la detección de columnas, hay una capa de convolución adicional con una función de activación ReLU y una capa de abandono con la misma probabilidad de abandono que se mencionó anteriormente. Los mapas de características se muestrean utilizando convoluciones fraccionadas después de una capa de convolución (1 × 1). A continuación se muestra una imagen de la arquitectura:

La arquitectura de TableNet

Salidas: Después de que los documentos se procesan utilizando el modelo, se generan las máscaras de tablas y columnas. Estas máscaras se utilizan para filtrar la tabla y sus regiones de columna de la imagen. Ahora, utilizando el OCR Tesseract, la información se extrae de las regiones segmentadas. A continuación se muestra una imagen que muestra las máscaras que se generan y luego se extraen de las tablas:

También propusieron el mismo modelo que está ajustado con ICDAR que funcionó mejor que el modelo original. El Recall, Precision y F1-Score del modelo ajustado son 0.9628, 0.9697, 0.9662 respectivamente. El modelo original tiene las métricas registradas de 0.9621, 0.9547, 0.9583 en el mismo orden. Vamos a sumergirnos en una arquitectura más.


ProfundoDeSRT

Papel: DeepDeSRT: aprendizaje profundo para detección y reconocimiento de estructuras de tablas en imágenes de documentos

Introducción: DeepDeSRT es un marco de red neuronal que se utiliza para detectar y comprender las tablas en los documentos o imágenes. Tiene dos soluciones como se menciona en el título:

  1. Presenta una solución basada en el aprendizaje profundo para la detección de tablas en imágenes de documentos.
  2. Propone un enfoque novedoso basado en el aprendizaje profundo para el reconocimiento de la estructura de la tabla, es decir, identificar filas, columnas y posiciones de celdas en las tablas detectadas.

El modelo propuesto está completamente basado en datos, no requiere heurística o metadatos de los documentos o imágenes. Una ventaja principal con respecto a la capacitación es que no utilizaron grandes conjuntos de datos de capacitación, sino que utilizaron el concepto de transferencia de aprendizaje y adaptación de dominio tanto para la detección de tablas como para el reconocimiento de la estructura de las tablas.

Conjunto de datos: El conjunto de datos utilizado es un conjunto de datos de competencia de mesa ICDAR 2013 que contiene 67 documentos con 238 páginas en total.

arquitectura:

  • Detección de mesa El modelo propuesto utilizó Fast RCNN como marco básico para detectar las tablas. La arquitectura se divide en dos partes diferentes. En la primera parte, generaron propuestas de región basadas en la imagen de entrada de una llamada red de propuesta de región (RPN). En la segunda parte, clasificaron las regiones utilizando Fast-RCNN. Para respaldar esta arquitectura, utilizaron ZFNet y los pesos de VGG-16.
  • Reconocimiento de estructura Una vez que se ha detectado con éxito una tabla y el sistema conoce su ubicación, el siguiente desafío para comprender su contenido es reconocer y ubicar las filas y columnas que conforman la estructura física de la tabla. Por lo tanto, han utilizado una red totalmente conectada con los pesos de VGG-16 que extrae información de las filas y columnas. A continuación se muestran las salidas de DeepDeSRT:

Salidas:

Salidas de detección de tabla
Salidas de reconocimiento de estructura [6]

Los resultados de la evaluación revelan que DeepDeSRT supera a los métodos más avanzados para la detección de tablas y el reconocimiento de estructuras y logra medidas F1 de 96.77% y 91.44% para la detección de tablas y el reconocimiento de estructuras, respectivamente hasta 2015.


Graficar redes neuronales

Papel: Repensar el reconocimiento de tablas utilizando redes neuronales gráficas

Introducción: En esta investigación, los autores del Laboratorio de Aprendizaje Profundo, Centro Nacional de Inteligencia Artificial (NCAI) propusieron Redes Neurales Gráficas para extraer información de las tablas. Argumentaron que las redes de gráficos son una opción más natural para estos problemas y exploraron más a fondo dos redes neuronales de gráficos basadas en gradientes.

Este modelo propuesto combina los beneficios de ambas redes neuronales convolucionales para la extracción de características visuales y redes de gráficos para tratar la estructura del problema.

Conjunto de datos: Los autores propusieron un nuevo conjunto de datos generados sintéticamente de 0.5 millones de tablas divididas en cuatro categorías.

  1. Las imágenes son imágenes simples sin fusión y con líneas de decisión.
  2. Las imágenes tienen diferentes tipos de borde, incluida la ausencia ocasional de líneas de control.
  3. Introduce la fusión de celdas y columnas
  4. La cámara capturó imágenes con la transformación de perspectiva lineal.

arquitectura: Utilizaron una red convolucional superficial que genera las características convolucionales respectivas. Si las dimensiones espaciales de las características de salida no son las mismas que la imagen de entrada, recopilan posiciones que se reducen linealmente según la relación entre las dimensiones de entrada y salida y las envían a una red de interacción que tiene dos redes de gráficos conocidas como DGCNN y GravNet. Los parámetros de la red de gráficos son los mismos que los de la CNN original. Al final, usaron un muestreo de pares de tiempo de ejecución para clasificar el contenido extraído que internamente utilizó el algoritmo basado en Monte Carlo. A continuación se muestran los resultados:

Salidas:

Salidas generadas por Graph Neural Networks

A continuación se muestran los números de precisión tabulados que generan las redes para cuatro categorías de la red tal como se presentan en el Conjunto de datos sección:


CGANs y Algoritmos Genéticos

Papel: Extracción de tablas de documentos utilizando redes adversas generativas condicionales y algoritmos genéticos

Introducción: En esta investigación, los autores utilizaron un enfoque de arriba hacia abajo en lugar de un enfoque de abajo hacia arriba (integrando líneas en celdas, filas o columnas).

En este método, utilizando una red de confrontación generativa, mapearon la imagen de la tabla en una forma de tabla 'esqueleto' estandarizada. Esta tabla esquemática denota los bordes aproximados de fila y columna sin el contenido de la tabla. Luego, ajustan las representaciones de las estructuras de tabla latentes candidatas a la estructura del esqueleto utilizando una medida de distancia optimizada por un algoritmo genético.

Conjunto de datos: Los autores utilizaron su propio conjunto de datos que tiene 4000 tablas.

arquitectura: El modelo propuesto consta de dos partes. En la primera parte, las imágenes de entrada se abstraen en tablas de esqueleto utilizando una red neuronal adversaria generativa condicional. Una GAN tiene dos redes nuevamente, el generador que genera muestras aleatorias y el discriminador que indica si las imágenes generadas son falsas u originales. El generador G es una red codificador-decodificador donde se pasa una imagen de entrada a través de una serie de capas de disminución progresiva hasta una capa de cuello de botella donde se invierte el proceso. Para pasar suficiente información a las capas de decodificación, se utiliza una arquitectura U-Net con conexiones de omisión y se agrega una conexión de omisión entre las capas i y n - i mediante concatenación, donde n es el número total de capas e i es el número de capa en el codificador Se utiliza una arquitectura PatchGAN para el discriminador D. Esto penaliza la estructura de la imagen de salida a escala de parches. Estos producen la salida como una tabla esqueleto.

En la segunda parte, optimizan el ajuste de las estructuras de datos latentes candidatas a la imagen de esqueleto generada utilizando una medida de la distancia entre cada candidato y el esqueleto. Así es como se extrae el texto dentro de las imágenes. A continuación se muestra una imagen que representa la arquitectura:

Esquema general del enfoque.

Salida: Las estructuras de tablas estimadas se evalúan comparando: Número de fila y columna, posición de la esquina superior izquierda, alturas de fila y anchos de columna

El algoritmo genético dio 95.5% de precisión en fila y 96.7% de precisión en columna mientras extraía información de las tablas.


Necesidad de digitalizar documentos, recibos or facturas pero demasiado perezoso para codificar? Dirigirse a Nanonetas y crea modelos OCR gratis!


[Código] Enfoques tradicionales

En esta sección, aprenderemos el proceso de cómo extraer información de las tablas usando Deep Learning y OpenCV. Puede pensar en esta explicación como una introducción, sin embargo, la construcción de modelos de vanguardia necesitará mucha experiencia y práctica. Esto lo ayudará a comprender los fundamentos de cómo podemos entrenar computadoras con varios enfoques y algoritmos posibles.

Para comprender el problema de una manera más precisa, definimos algunos términos básicos, que se utilizarán a lo largo del artículo:

  • Texto: contiene una cadena y cinco atributos (arriba, izquierda, ancho, alto, fuente)
  • línea: contiene objetos de texto que se supone que están en la misma línea en el archivo original
  • Linea sola: objeto de línea con un solo objeto de texto.
  • Multilínea: objeto de línea con más de un objeto de texto.
  • Multilínea Bloquear: un conjunto de objetos continuos de varias líneas.
  • Fila: Bloques horizontales en la mesa
  • Columna: Bloques verticales en la mesa
  • Celular: la intersección de una fila y columna
  • Cell - Acolchado: el relleno interno o espacio dentro de la celda.

Detección de tablas con OpenCV

Utilizaremos técnicas tradicionales de visión por computadora para extraer información de las tablas escaneadas. Aquí está nuestra tubería; inicialmente capturamos los datos (las tablas de donde necesitamos extraer la información) usando cámaras normales, y luego usando la visión por computadora, trataremos de encontrar los bordes, bordes y celdas. Usaremos diferentes filtros y contornos, y destacaremos las características principales de las tablas.

Necesitaremos una imagen de una mesa. Podemos capturar esto en un teléfono o usar cualquier imagen existente. A continuación se muestra el fragmento de código,

file = r’table.png’
table_image_contour = cv2.imread(file, 0)
table_image = cv2.imread(file)

Aquí, hemos cargado la misma imagen image dos variables ya que usaremos el contorno_imagen_tabla al dibujar nuestros contornos detectados en la imagen cargada. A continuación se muestra la imagen de la tabla que estamos utilizando en nuestro programa:

Imagen de la mesa

Emplearemos una técnica llamada Umbral de imagen inversa que mejora los datos presentes en la imagen dada.

ret, thresh_value = cv2.threshold( table_image_contour, 180, 255, cv2.THRESH_BINARY_INV)

Otro paso importante de preprocesamiento es dilatación de la imagen. La dilatación es una operación matemática simple aplicada a imágenes binarias (Blanco y negro) que amplía gradualmente los límites de las regiones de píxeles en primer plano (es decir, píxeles blancos, típicamente).

kernel = np.ones((5,5),np.uint8)
dilated_value = cv2.dilate(thresh_value,kernel,iterations = 1)

En OpenCV, usamos el método, encontrarContornos para obtener los contornos en la imagen actual. Este método toma tres argumentos, el primero es la imagen dilatada (la imagen que se usa para generar la imagen dilatada es table_image_contour; el método findContours solo admite imágenes binarias), el segundo es el cv2.RETR_TREE que nos dice que usemos el modo de recuperación de contorno, el tercero es el  cv2.CHAIN_APPROX_SIMPLE que es el modo de aproximación de contorno. los encontrarContornos desempaqueta dos valores, por lo que agregaremos una variable más llamada jerarquía. Cuando las imágenes están anidadas, los contornos irradian interdependencia. Para representar tales relaciones, se utiliza la jerarquía.

contours, hierarchy = cv2.findContours( dilated_value, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

Los contornos marcan dónde están exactamente los datos presentes en la imagen. Ahora, iteramos sobre la lista de contornos que calculamos en el paso anterior y calculamos las coordenadas de los cuadros rectangulares como se observa en la imagen original usando el método,  cv2.boundingRect. En la última iteración, colocamos esos cuadros en la imagen original table_image usando el método cv2.rectangle ().

for cnt in contours: x, y, w, h = cv2.boundingRect(cnt) # bounding the images if y < 50: table_image = cv2.rectangle(table_image, (x, y), (x + w, y + h), (0, 0, 255), 1) 

Este es nuestro último paso. Aquí usamos el método ventana llamada para representar nuestra tabla con el contenido extraído y los contornos incrustados en ella. A continuación se muestra el fragmento de código:

plt.imshow(table_image)
plt.show()
cv2.namedWindow('detecttable', cv2.WINDOW_NORMAL)

Salidas

Cambie el valor de y a 300 en el fragmento de código anterior, esta será su salida:

Una vez que haya extraído las tablas, puede ejecutar cada recorte de contorno a través del motor tesseract OCR, cuyo tutorial se puede encontrar esta página. Una vez que tenemos cuadros de cada texto, podemos agruparlos en función de sus coordenadas x e y para derivar a qué fila y columna correspondientes pertenecen.

Además de esto, existe la opción de usar PDFMiner para convertir tus documentos pdf en archivos HTML que podemos analizar usando expresiones regulares para finalmente obtener nuestras tablas. Así es como puedes hacerlo.


Análisis PDFMiner y Regex

Para extraer información de documentos más pequeños, lleva tiempo configurar modelos de aprendizaje profundo o escribir algoritmos de visión por computadora. En cambio, podemos usar expresiones regulares en Python para extraer texto de los documentos PDF. Además, recuerda que esta técnica no funciona para imágenes. Solo podemos usar esto para extraer información de archivos HTML o documentos PDF. Esto se debe a que, cuando usa una expresión regular, debe hacer coincidir el contenido con la fuente y extraer información. Con las imágenes, no podrá hacer coincidir el texto y las expresiones regulares fallarán. Ahora trabajemos con un documento PDF simple y extraigamos información de las tablas que contiene. A continuación se muestra la imagen:

En el primer paso, cargamos el PDF en nuestro programa. Una vez hecho esto, convertimos el PDF a HTML para que podamos usar directamente expresiones regulares y, por lo tanto, extraer contenido de las tablas. Para esto, el módulo que usamos es pdfminer Esto ayuda a leer contenido de PDF y convertirlo en un archivo HTML.

A continuación se muestra el fragmento de código:

from pdfminer.pdfinterp import PDFResourceManager from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.converter import HTMLConverter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from cStringIO import StringIO
import re def convert_pdf_to_html(path): rsrcmgr = PDFResourceManager() retstr = StringIO() codec = 'utf-8' laparams = LAParams() device = HTMLConverter(rsrcmgr, retstr, codec=codec, laparams=laparams) fp = file(path, 'rb') interpreter = PDFPageInterpreter(rsrcmgr, device) password = "" maxpages = 0 #is for all caching = True pagenos=set() for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages,password=password,caching=caching, check_extractable=True): interpreter.process_page(page) fp.close() device.close() str = retstr.getvalue() retstr.close() return str

Créditos de código: Zevross

Importamos muchos módulos que incluyen bibliotecas relacionadas con Expresión regular y PDF. En el metodo convertir_pdf_a_html, Enviamos la ruta del archivo PDF que debe convertirse a un archivo HTML. El resultado del método será una cadena HTML como se muestra a continuación:

'<span style="font-family: XZVLBD+GaramondPremrPro-LtDisp; font-size:12px">Changing Echoesn<br>7632 Pool Station Roadn<br>Angels Camp, CA 95222n<br>(209) 785-3667n<br>Intake: (800) 633-7066n<br>SA </span><span style="font-family: GDBVNW+Wingdings-Regular; font-size:11px">s</span><span style="font-family: UQGGBU+GaramondPremrPro-LtDisp; font-size:12px"> TX DT BU </span><span style="font-family: GDBVNW+Wingdings-Regular; font-size:11px">s</span><span style="font-family: UQGGBU+GaramondPremrPro-LtDisp; font-size:12px"> RS RL OP PH </span><span style="font-family: GDBVNW+Wingdings-Regular; font-size:11px">s</span><span style="font-family: UQGGBU+GaramondPremrPro-LtDisp; font-size:12px"> CO CJ n<br></span><span style="font-family: GDBVNW+Wingdings-Regular; font-size:11px">s</span><span style="font-family: UQGGBU+GaramondPremrPro-LtDisp; font-size:12px"> SF PI </span><span style="font-family: GDBVNW+Wingdings-Regular; font-size:11px">s</span><span style="font-family: UQGGBU+GaramondPremrPro-LtDisp; font-size:12px"> AH SPn<br></span></div>' 

La expresión regular es una de las técnicas de programación más difíciles y geniales utilizadas para la coincidencia de patrones. Estos son ampliamente utilizados en varias aplicaciones, por ejemplo, para el formato de código, scraping web y fines de validación. Antes de comenzar a extraer contenido de nuestras tablas HTML, aprendamos rápidamente algunas cosas sobre las expresiones regulares.

Esta biblioteca proporciona varios métodos incorporados para unir y buscar patrones. A continuación hay algunos:

import re # Match the pattern in the string
re.match(pattern, string) # Search for a pattern in a string
re.search(pattern, string) # Finds all the pattern in a string
re.findall(pattern, string) # Splits string based on the occurrence of pattern
re.split(pattern, string, [maxsplit=0] # Search for the pattern and replace it with the given string
re.sub(pattern, replace, string)

Los caracteres / expresiones que suele ver en las expresiones regulares incluyen:

  • [AZ] - cualquier letra mayúscula
  • d - dígito
  • w - carácter de palabra (letras, dígitos y guiones bajos)
  • s - espacios en blanco (espacios, tabulaciones y espacios en blanco)

Ahora, para descubrir un patrón particular en HTML, usamos expresiones regulares y luego escribimos patrones en consecuencia. Primero dividimos los datos de manera que los fragmentos de direcciones se segreguen en bloques separados de acuerdo con el nombre del programa (CAMPAMENTO DE ÁNGELES, VALLE DE MANZANAS, etc.):

pattern = '(?<=<span style="font-family: XZVLBD+GaramondPremrPro-LtDisp; font-size:12px">)(.*?)(?=<br></span></div>)' for programinfo in re.finditer(pattern, biginputstring, re.DOTALL): do looping stuff…

Más tarde, encontramos el nombre del programa, la ciudad, el estado y el código postal que siempre siguen el mismo patrón (texto, coma, letras mayúsculas de dos dígitos, 5 números (o 5 números y cuatro números); estos están presentes en el archivo PDF que consideramos como entrada). Verifique el siguiente fragmento de código:

# To identify the program name
programname = re.search('^(?!<br>).*(?=\n)', programinfo.group(0))
# since some programs have odd characters in the name we need to escape
programname = re.escape(programname) citystatezip =re.search('(?<=>)([a-zA-Zs]+, [a-zA-Zs]{2} d{5,10})(?=\n)', programinfo.group(0))
mainphone =re.search('(?<=<br>)(d{3}) d{3}-d{4}x{0,1}d{0,}(?=\n)', programinfo.group(0))
altphones = re.findall('(?<=<br>)[a-zA-Zs]+: (d{3}) d{3}-d{4}x{0,1}d{0,}(?=\n)(?=\n)', programinfo.group(0)) 

Este es un ejemplo simple que explica cómo extraemos información de archivos PDF usando una expresión regular. Después de extraer toda la información requerida, cargamos estos datos en un archivo CSV.

def createDirectory(instring, outpath, split_program_pattern): i = 1 with open(outpath, 'wb') as csvfile: filewriter = csv.writer(csvfile, delimiter=',' , quotechar='"', quoting=csv.QUOTE_MINIMAL) # write the header row filewriter.writerow(['programname', 'address', 'addressxtra1', 'addressxtra2', 'city', 'state', 'zip', 'phone', 'altphone', 'codes']) # cycle through the programs for programinfo in re.finditer(split_program_pattern, instring, re.DOTALL): print i i=i+1 # pull out the pieces programname = getresult(re.search('^(?!<br>).*(?=\n)', programinfo.group(0))) programname = re.escape(programname) # some facilities have odd characters in the name

Entonces, este es un ejemplo simple que explica cómo puede insertar su HTML extraído en un archivo CSV. Primero creamos un archivo CSV, buscamos todos nuestros atributos y empujamos uno por uno a sus respectivas columnas. A continuación se muestra una captura de pantalla:

Captura de pantalla de los elementos extraídos de las tablas usando expresiones regulares

A veces, las técnicas discutidas anteriormente parecen complicadas y plantean desafíos a los programadores si las tablas están anidadas y son complejas. Aquí, elegir un CV o un modelo de aprendizaje profundo ahorra mucho tiempo. Veamos qué inconvenientes y desafíos dificultan el uso de estos métodos tradicionales.


Desafíos con los métodos tradicionales

En esta sección, aprenderemos en profundidad sobre dónde pueden fallar los procesos de extracción de tablas, y comprenderemos mejor las formas de superar estos obstáculos utilizando métodos modernos nacidos del aprendizaje profundo. Sin embargo, este proceso no es fácil. La razón es que las tablas generalmente no permanecen constantes en todo momento. Tienen diferentes estructuras para representar los datos, y los datos dentro de las tablas pueden ser multilingües con varios estilos de formato (estilo de fuente, color, tamaño de fuente y altura). Por lo tanto, para construir un modelo robusto, uno debe ser consciente de todos estos desafíos. Generalmente, este proceso incluye tres pasos: detección de tablas, extracción y conversión. Identifiquemos los problemas en todas las fases, una por una:


Detección de mesa

En esta fase, identificamos dónde están exactamente las tablas presentes en la entrada dada. La entrada puede ser de cualquier formato, como imágenes, documentos PDF / Word y, a veces, videos. Utilizamos diferentes técnicas y algoritmos para detectar las tablas, ya sea por líneas o por coordenadas. En algunos casos, podríamos encontrar tablas sin bordes, donde debemos optar por diferentes métodos. Además de estos, aquí hay algunos otros desafíos:

  • Transformación de imagen: La transformación de imagen es un paso principal en la detección de etiquetas. Esto incluye mejorar los datos y los bordes presentes en la tabla. Necesitamos elegir algoritmos de preprocesamiento adecuados basados ​​en los datos presentados en la tabla. Por ejemplo, cuando trabajamos con imágenes, necesitamos aplicar detectores de umbrales y bordes. Este paso de transformación nos ayuda a encontrar el contenido con mayor precisión. En algunos casos, los contornos pueden salir mal y los algoritmos no mejoran la imagen. Por lo tanto, elegir los pasos correctos de transformación de imagen y el preprocesamiento es crucial.
  • Calidad de la imagen: Cuando escaneamos tablas para extraer información, debemos asegurarnos de que estos documentos se escaneen en entornos más brillantes, lo que garantiza imágenes de buena calidad. Cuando las condiciones de iluminación son malas, los algoritmos CV y ​​DL pueden fallar al detectar tablas en las entradas dadas. Si estamos utilizando el aprendizaje profundo, debemos asegurarnos de que el conjunto de datos sea coherente y tenga un buen conjunto de imágenes estándar. Si usamos estos modelos en tablas presentes en viejos papeles arrugados, primero tenemos que preprocesar y eliminar el ruido en esas imágenes.
  • Variedad de diseños y plantillas estructurales: Todas las tablas no son únicas. Una celda puede abarcar varias celdas, ya sea vertical u horizontalmente, y las combinaciones de celdas de expansión pueden crear una gran cantidad de variaciones estructurales. Además, algunos enfatizan las características del texto, y las líneas de la tabla pueden afectar la forma en que se entiende la estructura de la tabla. Por ejemplo, las líneas horizontales o el texto en negrita pueden enfatizar múltiples encabezados de la tabla. La estructura de la tabla define visualmente las relaciones entre las celdas. Las relaciones visuales en las tablas hacen que sea difícil encontrar computacionalmente las celdas relacionadas y extraer información de ellas. Por lo tanto, es importante construir algoritmos que sean robustos en el manejo de diferentes estructuras de tablas.
  • Relleno de celda, márgenes, bordes: Estos son los elementos esenciales de cualquier tabla: los rellenos, los márgenes y los bordes no siempre serán los mismos. Algunas tablas tienen mucho relleno dentro de las celdas y otras no. El uso de imágenes de buena calidad y los pasos de preprocesamiento ayudarán a que el proceso de extracción de la tabla funcione sin problemas.

Extracción de mesa

Esta es la fase donde se extrae la información después de identificar las tablas. Hay muchos factores con respecto a cómo está estructurado el contenido y qué contenido está presente en la tabla. Por lo tanto, es importante comprender todos los desafíos antes de construir un algoritmo.

  • Contenido denso: El contenido de las celdas puede ser numérico o textual. Sin embargo, el contenido textual suele ser denso, y contiene fragmentos cortos de texto ambiguos con el uso de siglas y abreviaturas. Para comprender las tablas, el texto debe ser desambiguado, y las abreviaturas y siglas deben ampliarse.
  • Diferentes fuentes y formatos: Las fuentes son generalmente de diferentes estilos, colores y alturas. Necesitamos asegurarnos de que sean genéricos y fáciles de identificar. Pocas familias de fuentes, especialmente las que están en cursiva o manuscrita, son un poco difíciles de extraer. Por lo tanto, usar una buena fuente y un formato adecuado ayuda al algoritmo a identificar la información con mayor precisión.
  • Múltiples archivos PDF y saltos de página: La línea de texto en las tablas es sensible a un umbral predefinido. Además, con celdas que abarcan varias páginas, resulta difícil identificar las tablas. En una página de varias tablas, es difícil distinguir diferentes tablas entre sí. Es difícil trabajar con tablas dispersas e irregulares. Por lo tanto, las líneas divisorias gráficas y el diseño del contenido deben usarse juntos como fuentes importantes para detectar regiones de tablas.

Conversión de tabla

La última fase incluye convertir la información extraída de las tablas para compilarlas como un documento editable, ya sea en Excel o usando otro software. Aprendamos sobre algunos desafíos.

  • Establecer diseños: Cuando se extraen diferentes formatos de tablas de documentos escaneados, necesitamos tener un diseño de tabla adecuado para insertar el contenido. A veces, el algoritmo no puede extraer información de las celdas. Por lo tanto, diseñar un diseño adecuado también es igualmente importante.
  • Variedad de patrones de presentación de valor: Los valores en las celdas se pueden presentar utilizando diferentes patrones de representación sintáctica. Considere que el texto en la tabla es 6 ± 2. El algoritmo podría fallar al convertir esa información en particular. Por lo tanto, la extracción de valores numéricos requiere el conocimiento de posibles patrones de presentación.
  • Representación para visualización: La mayoría de los formatos de representación para tablas, como los lenguajes de marcado en los que se pueden describir tablas, están diseñados para su visualización. Por lo tanto, es un desafío procesar tablas automáticamente.

Estos son los desafíos que enfrentamos durante el proceso de extracción de tablas utilizando técnicas tradicionales. Ahora veamos cómo superarlos con la ayuda de Deep Learning. Está siendo ampliamente investigado en varios sectores.



Necesita digitalizar documentos, recibos o facturas pero demasiado perezoso para codificar? Dirigirse a Nanonetas y crea modelos OCR gratis!


Resumen

En este artículo, hemos revisado en detalle la extracción de información de las tablas. Hemos visto cómo las tecnologías modernas como Deep Learning y Computer Vision pueden automatizar tareas mundanas mediante la creación de algoritmos robustos para generar resultados precisos. En las secciones iniciales, aprendimos sobre el papel de la extracción de tablas para facilitar las tareas de los individuos, las industrias y los sectores comerciales, y también revisamos los casos de uso que elaboran sobre la extracción de tablas de PDF/HTML, automatización de formularios, factura Automatización, etc. Hemos codificado un algoritmo usando Computer Vision para encontrar la posición de la información en las tablas usando técnicas de umbralización, dilatación y detección de contorno. Hemos discutido los desafíos que podríamos enfrentar durante los procesos de detección, extracción y conversión de tablas cuando usamos las técnicas convencionales, y explicamos cómo el aprendizaje profundo puede ayudarnos a superar estos problemas. Por último, revisamos algunas arquitecturas de redes neuronales y comprendimos sus formas de lograr la extracción de tablas en función de los datos de entrenamiento proporcionados.



Actualizar:
‌ Se agregó más material de lectura sobre diferentes enfoques en la detección de tablas y la extracción de información mediante el aprendizaje profundo.

Sello de tiempo:

Mas de IA y aprendizaje automático