Biblioteca GROBID: use la biblioteca de solicitudes para solicitar GROBID Web para mejorar la velocidad de análisis y la precisión de los documentos PDF

(1) Hay un problema al llamar directamente a la biblioteca GROBID

En las últimas semanas, se completó el análisis por lotes de cientos de documentos PDF utilizando la biblioteca GROBID, como se registra en estos dos blogs.

Biblioteca GROBID: instalación y uso

Biblioteca GROBID: una solución para ejecutar la biblioteca GROBID para analizar documentos en el entorno de Windows


El código clave es el siguiente:

from grobid_client.grobid_client import GrobidClient
client = GrobidClient(config_path="./config.json")
client.process("processHeaderDocument","D:/pdf",output="D:/xml",consolidate_citations=True, tei_coordinates=True, force=True)

El proceso general es el siguiente:

  1. Instalé la biblioteca en GitHub y descubrí que no es compatible con el sistema Windows
  2. Cambie a Docker para completar el uso normal de la biblioteca GROBID en el entorno de Windows
  3. Lea el documento oficial y llame a la API para completar el análisis de lotes

Pensé que esta parte de la tarea había terminado, pero cuando revisé el documento analizado hoy, algunos archivos tenían un tamaño de 1 KB:
inserte la descripción de la imagen aquí

Obviamente, el análisis no es correcto. Abra el documento y observe este mensaje:

[BAD_INPUT_DATA] PDF to XML conversion failed with error code: 1

o una pista como esta

[TIMEOUT] PDF to XML conversion timed out

Entonces no es recomendable simplemente llamar a la API de Python como lo hice antes debido a las siguientes desventajas:

  • La velocidad de ejecución es extremadamente lenta; lleva horas ejecutar cientos de documentos en el caso de subprocesos múltiples.

  • La tasa de precisión es baja; el documento de análisis a menudo informa de un error y no genera un documento XML.

  • La documentación es incorrecta; incluso generar documentación XML a menudo da resultados incorrectos.

Por supuesto, también puede deberse a la mala configuración de mi computadora personal o la configuración incorrecta de algunos parámetros.En resumen, decidí probar un nuevo método.

(2) análisis de páginas web y captura de paquetes

Usando rutinas similares a los rastreadores convencionales, por supuesto, esto no es un rastreador, sino una simple solicitud de página web.

Primero observe la estructura de la página web de Grobid:

inserte la descripción de la imagen aquí

El usuario envía dinámicamente el archivo de tesis en la página web, solicita el servicio a continuación y devuelve el resultado del análisis de la tesis, pero la barra de direcciones del sitio web permanece sin cambios .

Obviamente, los datos del archivo XML se cargan dinámicamente, por lo que podemos pensar fácilmente en la tecnología relacionada AJAX

Use el modo de desarrollador para capturar paquetes y capturar con éxito las solicitudes relacionadas

inserte la descripción de la imagen aquí

(3) Usar solicitudes para solicitar

Entonces el siguiente trabajo es muy simple.

  • Enviar una solicitud para cargar un archivo
  • Obtenga los datos binarios XML devueltos y escríbalos en el documento local.
import os
import re
import requests
import glob

def getXml(filename, path):
    url = "http://localhost:8070/api/processFulltextDocument"
    params = dict(input=open(path + filename + ".pdf", 'rb'))
    response = requests.post(url, files=params, timeout=300)
    fh = open("D:/xml/" + filename + ".xml", "w", encoding="utf-8")
    fh.write(response.text)
    fh.close()

def main():
    path = "D:/pdf/"
    inpdf = glob.glob(path + '*')
    for num in range(len(inpdf)):
        filename = re.findall(r'\\(.*?)\.pdf', str(inpdf[num]))[0]
        getXml(filename, path)

glob es obtener la lista de nombres del documento re expresión regular es extraer los nombres de archivo en todas las direcciones

Simplemente ajuste las direcciones de carpeta del PDF de entrada y XML de salida cuando sea necesario.

Se pueden analizar casi cien archivos PDF en cinco minutos y el documento XML se puede guardar localmente.

Supongo que te gusta

Origin blog.csdn.net/yt266666/article/details/127539343
Recomendado
Clasificación