Kurz: Zpracování uložených dokumentů pomocí Azure Functions a Pythonu

Funkci Document Intelligence je možné použít jako součást kanálu automatizovaného zpracování dat vytvořeného pomocí Azure Functions. V této příručce se dozvíte, jak pomocí Azure Functions zpracovávat dokumenty nahrané do kontejneru úložiště objektů blob v Azure. Tento pracovní postup extrahuje data tabulky z uložených dokumentů pomocí modelu rozložení Document Intelligence a uloží data tabulky do .csv souboru v Azure. Data pak můžete zobrazit pomocí Microsoft Power BI (není zde popsáno).

Snímek obrazovky s diagramem pracovního postupu služby Azure

V tomto kurzu se naučíte:

  • Vytvořit účet služby Azure Storage
  • Vytvořte projekt Azure Functions.
  • Extrahujte data rozložení z nahraných formulářů.
  • Nahrajte extrahovaná data rozložení do služby Azure Storage.

Požadavky

Vytvoření účtu Azure Storage

  1. V Azure Portal vytvořte účet Azure Storage pro obecné účely verze 2. Pokud nevíte, jak vytvořit účet úložiště Azure s kontejnerem úložiště, postupujte podle těchto rychlých startů:

    • Vytvoření účtu úložiště Když vytváříte účet úložiště, v poli Podrobnosti o> instanci Výkon vyberte Výkon úrovně Standard.
    • Vytvořte kontejner. Při vytváření kontejneru nastavte úroveň veřejného přístupu na Kontejner (anonymní přístup pro čtení ke kontejnerům a souborům) v okně Nový kontejner .
  2. V levém podokně vyberte kartu Sdílení prostředků (CORS) a odeberte existující zásady CORS, pokud nějaké existují.

  3. Po nasazení účtu úložiště vytvořte dva prázdné kontejnery úložiště objektů blob s názvem input a output.

Vytvoření projektu služby Azure Functions

  1. Vytvořte novou složku functions-app , která bude obsahovat projekt, a zvolte Vybrat.

  2. Otevřete Visual Studio Code a otevřete paletu příkazů (Ctrl+Shift+P). Vyhledejte a zvolte Python:Select Interpreter → zvolte nainstalovaný interpret Pythonu verze 3.6.x, 3.7.x, 3.8.x nebo 3.9.x. Tento výběr přidá cestu interpreta Pythonu, kterou jste vybrali, do projektu.

  3. V levém navigačním podokně vyberte logo Azure.

    • V zobrazení Prostředky se zobrazí vaše stávající prostředky Azure.

    • Vyberte předplatné Azure, které používáte pro tento projekt, a níže by se měla zobrazit aplikace Funkcí Azure.

      Snímek obrazovky se seznamem prostředků Azure v jednom sjednoceného zobrazení

  4. Vyberte část Pracovní prostor (místní) umístěnou pod uvedenými prostředky. Vyberte symbol plus a zvolte tlačítko Vytvořit funkci .

    Snímek obrazovky znázorňující, kde začít vytvářet funkci Azure

  5. Po zobrazení výzvy zvolte Vytvořit nový projekt a přejděte do adresáře function-app . Zvolte Vybrat.

  6. Zobrazí se výzva ke konfiguraci několika nastavení:

    • Vyberte jazyk → zvolte Python.

    • Vyberte interpret Pythonu a vytvořte virtuální prostředí → vyberte interpret, který jste dříve nastavili jako výchozí.

    • Vyberte šablonu → zvolte Azure Blob Storage aktivační událost a pojmenujte ji nebo přijměte výchozí název. Potvrďte to stisknutím klávesy Enter .

    • Vyberte nastavení → v rozevírací nabídce zvolte ➕Vytvořit nové nastavení místní aplikace .

    • Vyberte předplatné → zvolte předplatné Azure s účtem úložiště, který jste vytvořili, → vyberte svůj účet úložiště → pak vyberte název vstupního kontejneru úložiště (v tomto případě input/{name}). Potvrďte to stisknutím klávesy Enter .

    • Vyberte, jak chcete projekt otevřít , → v rozevírací nabídce zvolte Open the project in the current window (Otevřít projekt v aktuálním okně ).

  7. Po dokončení těchto kroků přidá VS Code nový projekt Funkce Azure se skriptem Pythonu __init__.py . Tento skript se aktivuje při nahrání souboru do vstupního kontejneru úložiště:

import logging

import azure.functions as func


def main(myblob: func.InputStream):
    logging.info(f"Python blob trigger function processed blob \n"
                 f"Name: {myblob.name}\n"
                 f"Blob Size: {myblob.length} bytes")

Testování funkce

  1. Stisknutím klávesy F5 spusťte základní funkci. VS Code vás vyzve k výběru účtu úložiště, se kterým budete mít rozhraní.

  2. Vyberte účet úložiště, který jste vytvořili, a pokračujte.

  3. Otevřete Průzkumník služby Azure Storage a nahrajte ukázkový dokument PDF do vstupního kontejneru. Pak zkontrolujte terminál VS Code. Skript by měl protokolovat, že se aktivovalo při nahrání DO SOUBORU PDF.

    Snímek obrazovky terminálu VS Code po nahrání nového dokumentu

  4. Než budete pokračovat, zastavte skript.

Přidání kódu pro zpracování dokumentů

Dále do skriptu Pythonu přidáte vlastní kód pro volání služby Document Intelligence a parsování nahraných dokumentů pomocí modelu rozložení Document Intelligence.

  1. Ve VS Code přejděte do souborurequirements.txt funkce. Tento soubor definuje závislosti pro váš skript. Do souboru přidejte následující balíčky Pythonu:

    cryptography
    azure-functions
    azure-storage-blob
    azure-identity
    requests
    pandas
    numpy
    
  2. Pak otevřete skript __init__.py . Přidejte následující příkazy import:

    import logging
    from azure.storage.blob import BlobServiceClient
    import azure.functions as func
    import json
    import time
    from requests import get, post
    import os
    import requests
    from collections import OrderedDict
    import numpy as np
    import pandas as pd
    
  3. Vygenerovanou main funkci můžete nechat tak, jak je. Do této funkce přidáte vlastní kód.

    # This part is automatically generated
    def main(myblob: func.InputStream):
        logging.info(f"Python blob trigger function processed blob \n"
        f"Name: {myblob.name}\n"
        f"Blob Size: {myblob.length} bytes")
    
  4. Následující blok kódu volá rozhraní API analýza rozložení document intelligence v nahraném dokumentu. Vyplňte hodnoty koncového bodu a klíče.

    # This is the call to the Document Intelligence endpoint
        endpoint = r"Your Document Intelligence Endpoint"
        apim_key = "Your Document Intelligence Key"
        post_url = endpoint + "/formrecognizer/v2.1/layout/analyze"
        source = myblob.read()
    
        headers = {
        # Request headers
        'Content-Type': 'application/pdf',
        'Ocp-Apim-Subscription-Key': apim_key,
            }
    
        text1=os.path.basename(myblob.name)
    

    Důležité

    Až budete hotovi, nezapomeňte klíč z kódu odebrat a nikdy ho nezveřejníte. V produkčním prostředí použijte zabezpečený způsob ukládání a přístupu k přihlašovacím údajům, jako je Azure Key Vault. Další informace najdete v tématuZabezpečení služeb Azure AI.

  5. Dále přidejte kód pro dotazování služby a získání vrácených dat.

    resp = requests.post(url=post_url, data=source, headers=headers)
    
    if resp.status_code != 202:
        print("POST analyze failed:\n%s" % resp.text)
        quit()
    print("POST analyze succeeded:\n%s" % resp.headers)
    get_url = resp.headers["operation-location"]
    
    wait_sec = 25
    
    time.sleep(wait_sec)
    # The layout API is async therefore the wait statement
    
    resp = requests.get(url=get_url, headers={"Ocp-Apim-Subscription-Key": apim_key})
    
    resp_json = json.loads(resp.text)
    
    status = resp_json["status"]
    
    if status == "succeeded":
        print("POST Layout Analysis succeeded:\n%s")
        results = resp_json
    else:
        print("GET Layout results failed:\n%s")
        quit()
    
    results = resp_json
    
    
  6. Přidejte následující kód pro připojení k výstupnímu kontejneru Azure Storage. Zadejte vlastní hodnoty pro název a klíč účtu úložiště. Klíč můžete získat na kartě Přístupové klíče prostředku úložiště v Azure Portal.

    # This is the connection to the blob storage, with the Azure Python SDK
        blob_service_client = BlobServiceClient.from_connection_string("DefaultEndpointsProtocol=https;AccountName="Storage Account Name";AccountKey="storage account key";EndpointSuffix=core.windows.net")
        container_client=blob_service_client.get_container_client("output")
    

    Následující kód analyzuje vrácenou odpověď funkce Document Intelligence, vytvoří soubor .csv a nahraje ho do výstupního kontejneru.

    Důležité

    Pravděpodobně budete muset tento kód upravit tak, aby odpovídal struktuře vašich vlastních dokumentů.

        # The code below extracts the json format into tabular data.
        # Please note that you need to adjust the code below to your form structure.
        # It probably won't work out-of-the-box for your specific form.
        pages = results["analyzeResult"]["pageResults"]
    
        def make_page(p):
            res=[]
            res_table=[]
            y=0
            page = pages[p]
            for tab in page["tables"]:
                for cell in tab["cells"]:
                    res.append(cell)
                    res_table.append(y)
                y=y+1
    
            res_table=pd.DataFrame(res_table)
            res=pd.DataFrame(res)
            res["table_num"]=res_table[0]
            h=res.drop(columns=["boundingBox","elements"])
            h.loc[:,"rownum"]=range(0,len(h))
            num_table=max(h["table_num"])
            return h, num_table, p
    
        h, num_table, p= make_page(0)
    
        for k in range(num_table+1):
            new_table=h[h.table_num==k]
            new_table.loc[:,"rownum"]=range(0,len(new_table))
            row_table=pages[p]["tables"][k]["rows"]
            col_table=pages[p]["tables"][k]["columns"]
            b=np.zeros((row_table,col_table))
            b=pd.DataFrame(b)
            s=0
            for i,j in zip(new_table["rowIndex"],new_table["columnIndex"]):
                b.loc[i,j]=new_table.loc[new_table.loc[s,"rownum"],"text"]
                s=s+1
    
    
  7. Poslední blok kódu nakonec nahraje extrahovaná tabulka a textová data do elementu úložiště objektů blob.

        # Here is the upload to the blob storage
        tab1_csv=b.to_csv(header=False,index=False,mode='w')
        name1=(os.path.splitext(text1)[0]) +'.csv'
        container_client.upload_blob(name=name1,data=tab1_csv)
    

Spuštění funkce

  1. Stisknutím klávesy F5 spusťte funkci znovu.

  2. Pomocí Průzkumník služby Azure Storage nahrajte ukázkový formulář PDF do kontejneru vstupního úložiště. Tato akce by měla aktivovat spuštění skriptu a pak by se měl ve výstupním kontejneru zobrazit výsledný soubor .csv (zobrazený jako tabulka).

Tento kontejner můžete připojit k Power BI a vytvořit tak bohaté vizualizace dat, která obsahuje.

Další kroky

V tomto kurzu jste zjistili, jak pomocí funkce Azure napsané v Pythonu automaticky zpracovávat nahrané dokumenty PDF a vypisovat jejich obsah ve formátu, který je pro data přívětivější. Dále se dozvíte, jak pomocí Power BI zobrazit data.