Para usar Camelot para identificar tablas en archivos pdf, además de agregar sabor = 'stream' y especificar el área de identificación table_areas, se encontraron problemas adicionales al identificar tablas pdf, como datos de varias líneas, arriba y abajo Configuración de parámetros para situaciones como el marcado.
Para la instalación y el uso básico de Camelot, consulte Python analizando formularios PDF: PDFPlumber vs Camelot.
Bajo los parámetros predeterminados, Camelot no puede reconocer todas las áreas de la tabla. Como se muestra en la imagen de arriba, solo se reconocen 15 filas en la página 3, lo que es mucho menos que el número de filas en la página donde se encuentra la tabla.
Además de usar el comando camelot.plot() para ver el área de la tabla y luego especificar table_areas para procesar como se presenta en Análisis de tablas PDF en Python - PDFPlumber vs Camelot, también puede especificar el parámetro 'edge_tol' como un número mayor. Un número grande, como edge_tol = 500 en este ejemplo, permite a Camelot expandir automáticamente el área de reconocimiento.
En este ejemplo, el encabezado de la tabla y las barras y celdas de datos individuales contienen varias líneas de texto. Puede que sea necesario fusionar automáticamente varias líneas de texto. Esto implica ajustar el parámetro 'row_tel'. Aumentar el valor de este parámetro hará que Camelot combine automáticamente varias líneas de texto, pero esto también puede generar resultados inesperados.
Como se muestra en la figura anterior, especifique row_tol = 40. Aunque el texto de varias líneas en la parte del encabezado se fusiona automáticamente en una línea, el texto fusionado está conectado con '\n' pero lo siguiente; La parte de la barra de datos también la proporciona Camelot. Combinados, este obviamente no es el resultado que queremos ver. Por lo tanto, el parámetro 'row_tol' debe manejarse de manera flexible según la situación. También nos recuerda que al identificar la tabla, debemos verificar si los resultados intermedios se identifican correctamente en cualquier momento.
Cuando hay un superíndice en la celda, especifique 'flage_size = True', Camelot agregará automáticamente etiquetas lt;sgt;lt;/sgt; al superíndice y al subíndice, como se muestra en la siguiente figura.
El parámetro 'flage_size se utiliza para especificar si se debe dividir la cadena reconocida. Como se muestra en la siguiente figura, cuando 'fage_size = True', la cadena fuera de la tabla se divide y se divide en cada columna. En este ejemplo, el resultado de esta segmentación automática no parece necesario, porque nos interesa la parte de datos dentro de la tabla, y el texto fuera de la tabla será descartado.
El parámetro 'strip_text se utiliza para especificar si se debe dividir la cadena reconocida, como se muestra a continuación, strip_text= '?§\n(lt;gt;)(lt;/).'*, Camelot reconocer Después del texto, los estándares de superíndice y subíndice como 'lt;sgt;', 'lt;/sgt;', '\n' en celdas entre líneas, etc. se eliminan automáticamente.
Después de la identificación de Camelot, los datos epidémicos de cada país son una cadena en lugar de un número, por lo que debe usar pandas.to_numeric o astype(int) para convertir el tipo de datos en un tipo numérico.
En este ejemplo, los parámetros anteriores se configuran de la siguiente manera.
Finalmente se utilizó Pyecharts para dibujar el mapa, y los resultados son los siguientes: