Tabla 및 Azure 함수를 사용하여 PDF 테이블 자동 추출

데이터 섭취


빅데이터 항목은 일반적으로 각종 형식으로 각종 출처에서 필요한 데이터를 얻는 경향이 있다.
ETL(Extract Transform Load, 추출-변환-로드) 도구는 소스에서 데이터를 추출하고 여러 소스 간에 데이터를 이동하며 최종적으로 처리된 데이터를 타겟 데이터 저장소에 로드하여 추가 분석 및 보고를 위한 데이터 수신 프로세스를 자동화합니다.
Microsoft는 ADF(Azure 데이터 팩토리)를 제공하여 데이터 섭취 과정을 조율합니다.Azure Data Factory는 파이프라인을 사용하여 데이터 섭취를 생성, 스케줄링, 모니터링 및 관리하는 인터페이스를 제공합니다.또한 Azure Data Factory는 복잡한 ETL 시나리오를 Azure 함수로 해결하는 맞춤형 코드 실행도 지원하므로 이에 대해 소개하고자 합니다.Azure 기능은 많은 도구와 통합되어 필요에 따라 코드를 실행할 수 있습니다.

PDF 테이블 추출


서로 다른 형식에서 데이터를 추출하는 것은 서로 다른 도전을 가져올 수 있다.대부분의 데이터 추출 과정은 ADF와 같은 ETL 도구를 통해 직접 실현할 수 있고 다른 것은 인코딩이 필요하다.그 중 하나는 pdf 형식의 표에서 데이터를 추출하는 것이다.PDF에는 테이블에 잠긴 정보가 많이 들어 있습니다.pdf표에서 데이터를 추출하여 구조화된 형식으로 바꾸는 것은 이미 빅데이터 프로젝트의 흔한 업무 수요가 되었다.그렇다면, 우리는 어떻게 pdf표에 잠긴 데이터를 추출하는 번거로운 임무를 자동화합니까?만약 우리가 pdf표에서 데이터를 추출하고 몇 줄의 코드(한 줄만!!)로 소비 가능한 형식으로 변환할 수 있다면 어떻게 될까요?
tabla-py는 무료python 라이브러리로 PDF 추출 자동화에 우수한 프로그래밍 인터페이스를 제공합니다.

테이블 사용자 인터페이스


Tabula app
해결 방안을 토론하기 전에, 나는 tabla의 GUI 버전을 소개하고 싶다.tabla는 다운로드하여 쉽게 설치할 수 있는 GUI 인터페이스를 제공합니다.이 도구는 표를 추출할 수 있는지 확인하는 데 사용할 수 있습니다.이 테이블을 포함하는 pdf를 업로드하고 추출 과정이 성공했는지 확인하십시오.본질적으로 PDF가 추가 리소스가 필요하지 않은 상태에서 작동하는지 신속하게 확인할 수 있는 도구입니다.

선택 사각형 태그를 사용하여 원하는 부분을 추출합니다.나중에 참조할 수 있도록 템플릿으로 저장할 수 있습니다.

tabla는 데이터 선택을 저장하는 템플릿을 제공합니다.이 템플릿들은 pdf에서 어떤 데이터를 추출할지 결정합니다.Tabla py library를 사용하여 템플릿 기반 테이블 추출을 사용하려면 다음 방법을 사용합니다.tabula.read_pdf_with_template(pdf_path, "/path/to/tabula-template.json")tabla는 흐름과 격자 두 가지 추출 옵션을 제공합니다.테이블에 칸을 구분하는 선이 있으면lattice 파라미터를 사용하십시오.만약 테이블에 구분선이 없다면stream 파라미터를 사용해 보십시오.tabula.read_pdf("/path/to/sample.pdf", pages="all",stream=True)마지막으로 데이터를 내보내고 데이터가 올바르게 추출되었는지 확인합니다.일단 우리가 데이터를 미리 보고 정확하게 확보하면, 우리는 이 과정을 계속 자동화할 수 있다.엉망진창인 pdf 형식을 찾습니다.만약 우리가 Table GUI 프로그램을 통해 필요한 출력을 볼 수 있다면 이것은 라이브러리를 사용하여 추출 과정을 자동화하는 좋은 예이다.

고위층


tablapy는 pdf 형식의 표를 csv/tsv 파일로 변환하는 것을 지원합니다.일단 데이터가 csv 형식으로 사용할 수 있으면 프로그래밍이나 Azure data Factory를 통해 데이터베이스에 쉽게 불러올 수 있다.대부분의 프로그래밍 언어와 ETL 도구는 csv를 데이터베이스 테이블로 쉽게 변환할 수 있습니다.ADF는 추가 프로그래밍 없이 csv를 데이터베이스에 불러올 수 있는 OOTB 기능을 제공합니다.

Azure 함수에 배치된python 코드는 Azure blob 저장소에서 pdf를 읽습니다.tabla-py 패키지는 pdf에서 표를 추출하여 csv로 변환합니다.생성된 csv 파일은 Azure blob 저장소의 다른 위치에 저장됩니다.

파이썬 코드



import logging

import tabula

import azure.functions as func

import os

import csv

from azure.storage.blob import BlobClient,ContainerClient



def main(req: func.HttpRequest) -> func.HttpResponse:

    logging.info('Python HTTP trigger function processed a request.')



    try:

        # [ create_blob_client_sas_url for source blob location]

        sas_url = "https://pdfextracts.blob.core.windows.net/pdfcontainer/1.pdf"



        #[Download Blob]

        blob_client = BlobClient.from_blob_url(sas_url)

        blob_data = blob_client.download_blob()

        blob_name = blob_data.name

        logging.info(blob_name +' downloaded')



        #save to tmp folder

        pdf_path = '/tmp/{}'.format(blob_name)

        with open(pdf_path, "wb") as my_blob:

            blob_data.readinto(my_blob)

        #logging.info(blob_name +' contents read')

        logging.info('Saved PDF to path: '+ pdf_path)



        #strip .pdf extension from downloaded blob

        file_name_without_extension = os.path.splitext(blob_name)[0]



        csv_file_name = file_name_without_extension+'.csv'

        csv_path = '/tmp/{}'.format(csv_file_name)

        #csv_path = '/tmp/{}'.format(file_name_without_extension)+'.csv'



        logging.info('CSV path '+ csv_path)



        tabula.convert_into(pdf_path,csv_path, output_format="csv", stream=True)

        logging.info(blob_name +' processed by tabula')



        #Create SAS client from a different container on the same blob

        sas_url = "https:/pdfextraction.blob.core.windows.net/csvcontainer?"

        container_Client = ContainerClient.from_container_url(sas_url)



        logging.info('created sas for upload')



        #Read the csv from temp and upload to blob

        with open(csv_path , "rb") as data:

            container_Client.upload_blob(name=csv_file_name, data=data)

        logging.info(csv_file_name+' uploaded post extraction')



    except ValueError:

        pass



    logging.info('process completed')

        return func.HttpResponse("PDF function executed successfully.")

Azure 기능 컨테이너의 호스트


테이블 추출 과정은tabla-py 라이브러리를 설치해야 하고 자바가 실행될 때에도 의존해야 한다.pdf 추출 코드를 배치하는 가장 좋은 방법은 응용 프로그램과 의존 항목을 포장하는 것이다.
Docker는 코드와 의존항을 이식 가능한 형식으로 포장한 다음 용기 기반 트랜잭션 솔루션에 배치할 수 있는 방법을 제공합니다.What is docker?
Azure Functions는 컨테이너를 지원하는 관리형 옵션입니다.Azure Functions in a docker container
Azure 기능은 개발자가 인프라 관리를 걱정하지 않고 응용 프로그램 코드에 전념할 수 있도록 한다.Azure 함수를 Azure Data Factory와 통합하려면 최종 응답에 상태 코드를 추가할 수 있도록 python 코드를 수정해야 합니다.
return_msg= {
            'statusCode': 200,
            'body': msg
        }   
        return func.HttpResponse(json.dumps(return_msg))
이 Azure 기능은 현재 Azure 데이터 공장에서 실행할 수 있습니다.위 코드를 호출하기 위해 데이터 파이프에 Azure 함수 활동을 추가합니다.
Azure Functions - Azure Data Factory Integration
API 역할 외에도 Azure 함수는 트리거와 바인딩으로 여러 다른 서비스와의 통합을 제공합니다.예를 들어, 새 파일이 blob 저장소에 추가되면 Azure 함수를 자동으로 호출할 수 있습니다.
일단 배치되면 이 프로그램은 웹 응용 프로그램에서 접근하여 필요에 따라 처리할 수도 있고 ADF와 통합하여 계획 처리에 사용할 수도 있다.어떤 방식이든 pdf의 데이터를 텍스트 파일이나 csv로 사용할 수 있는 이상 프로그래밍이나 ADF를 통해 데이터를 데이터 저장소에 불러와 더욱 분석하기 쉽다.

좋은 웹페이지 즐겨찾기