Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo utilizar Python para capturar datos tabulares de archivos PDF (ejemplo de código)

Cómo utilizar Python para capturar datos tabulares de archivos PDF (ejemplo de código)

Este artículo le muestra cómo usar Python para capturar datos de tablas de archivos PDF (ejemplos de código). Los amigos que lo necesiten pueden consultarlo. Espero que sea útil para todos. Este artículo demostrará un punto de rastreo ligeramente diferente. En el pasado, nuestros rastreadores rastreaban datos de páginas web. Debido a que las páginas web generalmente están escritas con códigos HTML, CSS y JavaScript, existen muchas tecnologías maduras para capturar diversos datos en las páginas web. Esta vez, el documento que necesitamos capturar es un archivo PDF. En este artículo, le mostraremos cómo obtener datos de formulario de un archivo PDF utilizando el módulo camelot de Python. En nuestra vida diaria y en nuestro trabajo, los archivos PDF son sin duda uno de los formatos de archivo más utilizados. Todos podemos ver este formato de archivo, desde libros de texto y material didáctico hasta contratos y documentos de planificación. Pero cómo extraer el formulario del archivo PDF es un gran problema. Porque no existe ningún formulario dentro del PDF para representarlo. Esto dificulta la extracción de datos tabulares para su análisis. Entonces, ¿cómo obtenemos datos de formularios de PDF? ¡La respuesta es el módulo camelot de Python! camelot es un módulo para Python que permite a cualquiera extraer fácilmente datos tabulares de archivos PDF. El módulo camelot se puede instalar usando el siguiente comando (la instalación lleva más tiempo):

pip install camelot-pycamelot La documentación oficial del módulo camelot se encuentra en https://camelot-py.readthedoc. .... A continuación se mostrará cómo utilizar el módulo camelot para capturar datos tabulares de archivos PDF.

Ejemplo 1: Primero, veamos un ejemplo simple: por ejemplo,.pdf. El archivo completo tiene solo una página y solo hay una tabla en esta página, como se muestra a continuación:

<. p>Usar Con el siguiente código Python, puede extraer tablas de archivos PDF:

importar camelot

# Extraer tablas de archivos PDF<

tables = camelot .read_pdf ('E://eg.pdf', páginas='1', sabor='stream')

# Información de la tabla

imprimir(tablas)

print(tables[0])

# Datos de la tabla

la salida de print(tables[0].data) es:

lt; =1gt ;

lt;Forma de la tabla=(4, 4)gt;

[['ID', 'Nombre', 'Ciudad', 'Género'], [' 1' , 'Alex', 'Shanghai', 'M'], ['2', 'Bob', 'Beijing', 'F'], ['3', 'Cook', 'Nueva York', 'M '] ] Al analizar el código, camelot.read_pdf() es la función de camelot para extraer datos de la tabla. Los parámetros de entrada son la ruta del archivo PDF, el número de página (número de páginas) y el método de análisis de la tabla (hay dos métodos: corriente y celosía). Para el método de análisis de tablas, el método predeterminado es celosía y el método de flujo analizará toda la página PDF como una tabla de forma predeterminada. Si necesita especificar el área de resolución en la página, puede usar el parámetro table_area.

La conveniencia del módulo camelot es que proporciona funciones para extraer directamente datos de tablas en pandas, csv, JSON y html, como la función tablas[0].df, tablas[0].to_csv(), etc. Tomemos el archivo csv de salida como ejemplo:

importar camelot

# Extraer tablas de archivos PDF

tables = camelot.read_pdf('E:/ / eg.pdf', páginas='1', sabor='stream')

# Convertir datos de tabla a archivo csv

tables[0].to_csv('E: // eg.csv') El archivo csv resultante es el siguiente:

¿Ejemplo 2? En el Ejemplo 2, extraeremos datos tabulares de una región de una página PDF. Las páginas (partes) del archivo PDF son las siguientes:

Para extraer la única tabla en toda la página, necesitamos encontrar dónde se encuentra la tabla. El sistema de coordenadas del archivo PDF es diferente al de la imagen. Toma el vértice de la esquina inferior izquierda como origen, el eje x hacia la derecha y el eje y hacia arriba. Puede usar el siguiente código Python. para generar las coordenadas de toda la página de texto:

importar camelot

# Extraer tablas de PDF

tables = camelot.read_pdf('G:// Statistics-Fundamentals-Succinctly.pdf', pages='53 ',

sabor='stream')

# Dibuja las coordenadas del documento PDF y ubica la tabla

tables[0].plot('text' ) Salida:

UserWarning: Tabla no encontrada en la página 53 [stream.py: 292] El código completo no encuentra la tabla, esto es porque el método de transmisión trata toda la página PDF como una tabla de forma predeterminada. Esto se debe a que el método de transmisión trata toda la página PDF como una tabla de forma predeterminada, por lo que no se encuentra la tabla. Sin embargo, la imagen de las coordenadas de la página se dibuja de la siguiente manera:

Al comparar cuidadosamente la página PDF anterior, no es difícil encontrar que las coordenadas de la esquina superior izquierda del área correspondiente de la tabla son (50, 620) y las coordenadas de la esquina inferior derecha son (500, 540).

Agregamos el parámetro table_area en la función read_pdf(). El código Python completo es el siguiente:

importar camelot

# Identificar datos de la tabla en el área especificada

tablas = camelot.read_pdf('G:// Statistics-Fundamentals-Succinctly.pdf', páginas='53',

factory='stream', table_area=['50, 620, 500, 540'] )

#Dibuja las coordenadas del documento PDF para determinar la ubicación de la tabla

table_df = tablas[0].df

print( type(table_df))

print(table_df.head(n=6)) La salida es:

lt; class 'pandas.core.Frame.Data.Data.Frame. Data.Data.Data.Data.Data.Data.DataFrame.DataFrame'gt;

0 1 2 3

0 Diferencia de puntuación previa y posterior a la prueba del estudiante

1 1 70 73 3

2 2 64 65 1

3 3 69 63 -6

4

5 34 82 88 6 Resumen en detalle En la tabla que identifica la página PDF, además del parámetro para especificar el área, también hay parámetros como arriba, abajo, izquierda y derecha, combinación de celdas, etc. Para un uso detallado , consulte la URL en la documentación oficial de camelot: https://camelot-py.readthedoc....