Directorio de artículos
(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
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:
- Instalé la biblioteca en GitHub y descubrí que no es compatible con el sistema Windows
- Cambie a Docker para completar el uso normal de la biblioteca GROBID en el entorno de Windows
- 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:
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:
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
(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.