Megosztás a következőn keresztül:


Oktatóanyag: Tárolt dokumentumok feldolgozása az Azure Functions és a Python használatával

A dokumentumintelligencia az Azure Functions használatával létrehozott automatizált adatfeldolgozási folyamat részeként használható. Ez az útmutató bemutatja, hogyan használhatja az Azure Functionst egy Azure Blob Storage-tárolóba feltöltött dokumentumok feldolgozására. Ez a munkafolyamat a dokumentumintelligencia-elrendezési modellel kinyeri a táblaadatokat a tárolt dokumentumokból, és a táblaadatokat egy .csv-fájlba menti az Azure-ban. Ezután megjelenítheti az adatokat a Microsoft Power BI használatával (ez itt nem szerepel).

Képernyőkép az Azure Service munkafolyamat-diagramról

Ebben az oktatóanyagban az alábbiakkal fog megismerkedni:

  • Azure Storage-fiók létrehozása.
  • Azure Functions-projekt létrehozása.
  • Elrendezési adatok kinyerve a feltöltött űrlapokból.
  • Kinyert elrendezési adatok feltöltése az Azure Storage-ba.

Előfeltételek

  • Azure-előfizetés - – Ingyenes létrehozás

  • Dokumentumintelligencia-erőforrás. Miután megkapta az Azure-előfizetését, hozzon létre egy dokumentumintelligencia-erőforrást az Azure Portalon a kulcs és a végpont lekéréséhez. Az ingyenes tarifacsomag (F0) használatával kipróbálhatja a szolgáltatást, és később frissíthet egy fizetős szintre az éles környezetben.

    • Az erőforrás üzembe helyezése után válassza az Ugrás az erőforrásra lehetőséget. Az alkalmazás a Document Intelligence API-hoz való csatlakoztatásához szüksége van a létrehozott erőforrás kulcsára és végpontjára. Az oktatóanyag későbbi részében illessze be a kulcsot és a végpontot az alábbi kódba:

      Képernyőkép a kulcsok és a végpontok helyéről az Azure Portalon.

  • Python 3.6.x, 3.7.x, 3.8.x vagy 3.9.x (a Python 3.10.x nem támogatott ebben a projektben).

  • A Visual Studio Code (VS Code) legújabb verziója a következő bővítményekkel:

  • Az Azure Storage Explorer telepítve van.

  • Elemezni kívánt helyi PDF-dokumentum. Ehhez a projekthez használhatja pdf-mintadokumentumunkat.

Azure Storage-fiók létrehozása

  1. Hozzon létre egy általános célú v2-es Azure Storage-fiókot az Azure Portalon. Ha nem tudja, hogyan hozhat létre Azure Storage-fiókot egy tárolóval, kövesse az alábbi rövid útmutatókat:

    • Tárfiók létrehozása. A tárfiók létrehozásakor válassza a Standard teljesítmény lehetőséget a Példány részletei>teljesítmény mezőjében.
    • Hozzon létre egy tárolót. A tároló létrehozásakor az Új tároló ablakban állítsa a nyilvános hozzáférési szintet tárolóra (tárolók és fájlok névtelen olvasási hozzáférésére ).
  2. A bal oldali panelen válassza az Erőforrás-megosztás (CORS) lapot, és távolítsa el a meglévő CORS-szabályzatot, ha van ilyen.

  3. A tárfiók üzembe helyezése után hozzon létre két üres blobtárolót, a bemenetet és a kimenetet.

Azure Functions-projekt létrehozása

  1. Hozzon létre egy függvényalkalmazás nevű új mappát, amely tartalmazza a projektet, és válassza a Kiválasztás lehetőséget.

  2. Nyissa meg a Visual Studio Code-ot, és nyissa meg a parancskatalógust (Ctrl+Shift+P). Keresse meg és válassza a Python:Értelmező kiválasztása → válasszon egy telepített Python-értelmezőt, amely 3.6.x, 3.7.x, 3.8.x vagy 3.9.x verziójú. Ez a kijelölés hozzáadja a kiválasztott Python-értelmező útvonalat a projekthez.

  3. Válassza ki az Azure-emblémát a bal oldali navigációs panelen.

    • A meglévő Azure-erőforrások az Erőforrások nézetben láthatók.

    • Válassza ki a projekthez használt Azure-előfizetést, és alább az Azure-függvényalkalmazásnak kell megjelennie.

      Képernyőkép az Azure-erőforrásokat egyetlen, egységes nézetben megjelenítő listáról.

  4. Válassza ki a munkaterület (helyi) szakaszt a felsorolt erőforrások alatt. Válassza a pluszjelet, és válassza a Függvény létrehozása gombot.

    Az Azure-függvények létrehozásának helyét bemutató képernyőkép.

  5. Amikor a rendszer kéri, válassza az Új projekt létrehozása lehetőséget, és keresse meg a függvényalkalmazás könyvtárát. Válassza a Kiválasztás lehetőséget

  6. A rendszer több beállítás konfigurálását kéri:

    • Válasszon ki egy nyelvet , → válassza a Pythont.

    • Válasszon ki egy Python-értelmezőt egy virtuális környezet létrehozásához, → válassza ki a korábban alapértelmezettként beállított értelmezőt.

    • Válasszon egy sablont , → válassza az Azure Blob Storage-eseményindítót , adjon nevet az eseményindítónak, vagy fogadja el az alapértelmezett nevet. A megerősítéshez nyomja le az Enter billentyűt .

    • Válassza ki a beállítást , → válassza ➕az Új helyi alkalmazás létrehozása beállítást a legördülő menüből.

    • Válassza ki az előfizetést , → válassza ki az Azure-előfizetést a létrehozott tárfiókkal, → válassza ki a tárfiókot → majd válassza ki a tároló bemeneti tárolójának nevét (ebben az esetben input/{name}). A megerősítéshez nyomja le az Enter billentyűt .

    • Válassza ki, hogyan szeretné megnyitni a projektet , → válassza a Projekt megnyitása az aktuális ablakban lehetőséget a legördülő menüből.

  7. Miután elvégezte ezeket a lépéseket, a VS Code hozzáad egy új Azure-függvényprojektet egy __init__.py Python-szkripttel. Ez a szkript akkor aktiválódik, ha egy fájlt feltölt a bemeneti tárolóba:

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")

A függvény tesztelése

  1. Nyomja le az F5 billentyűt az alapfüggvény futtatásához. A VS Code kérni fogja, hogy válasszon ki egy tárfiókot, amellyel csatlakozni szeretne.

  2. Válassza ki a létrehozott tárfiókot, és folytassa a műveletet.

  3. Nyissa meg az Azure Storage Explorert, és töltse fel a PDF-mintadokumentumot a bemeneti tárolóba. Ezután ellenőrizze a VS Code terminálját. A szkriptnek naplóznia kell, hogy a PDF-feltöltés aktiválta-e.

    Képernyőkép a VS Code terminálról egy új dokumentum feltöltése után.

  4. A folytatás előtt állítsa le a szkriptet.

Dokumentumfeldolgozó kód hozzáadása

Ezután hozzáadja a saját kódját a Python-szkripthez, amely meghívja a Dokumentumintelligencia szolgáltatást, és elemzi a feltöltött dokumentumokat a Dokumentumintelligencia elrendezési modellel.

  1. A VS Code-ban keresse meg a függvény requirements.txt fájlját. Ez a fájl határozza meg a szkript függőségeit. Adja hozzá a következő Python-csomagokat a fájlhoz:

    cryptography
    azure-functions
    azure-storage-blob
    azure-identity
    requests
    pandas
    numpy
    
  2. Ezután nyissa meg a __init__.py szkriptet. Adja hozzá a következő import-utasításokat:

    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. A létrehozott main függvényt a következőképpen hagyhatja el. Ebben a függvényben adja hozzá az egyéni kódot.

    # 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. Az alábbi kódblokk meghívja a Dokumentumintelligencia-elemzési elrendezés API-t a feltöltött dokumentumon. Adja meg a végpontot és a kulcsértékeket.

    # 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)
    

    Fontos

    Ne felejtse el eltávolítani a kulcsot a kódból, amikor elkészült, és soha ne tegye közzé nyilvánosan. Éles környezetben biztonságos módon tárolhatja és érheti el a hitelesítő adatait, például az Azure Key Vaultot. További információ: Azure AI-szolgáltatások biztonsága.

  5. Ezután adjon hozzá kódot a szolgáltatás lekérdezéséhez és a visszaadott adatok lekéréséhez.

    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. Adja hozzá a következő kódot az Azure Storage kimeneti tárolóhoz való csatlakozáshoz. Adja meg a tárfiók nevének és kulcsának saját értékeit. A kulcsot a tárerőforrás Access-kulcsok lapján, az Azure Portalon szerezheti be.

    # 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")
    

    Az alábbi kód elemzi a visszaadott Dokumentumintelligencia-választ, létrehoz egy .csv fájlt, és feltölti azt a kimeneti tárolóba.

    Fontos

    Ezt a kódot valószínűleg úgy kell szerkesztenie, hogy megfeleljen a saját dokumentumok szerkezetének.

        # 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. Végül az utolsó kódblokk feltölti a kinyert táblázat- és szöveges adatokat a Blob Storage-elembe.

        # 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)
    

A függvény futtatása

  1. Nyomja le az F5 billentyűt a függvény ismételt futtatásához.

  2. Az Azure Storage Explorerrel feltölthet egy PDF-mintaűrlapot a bemeneti tárolóba. Ennek a műveletnek aktiválnia kell a szkript futtatását, majd látnia kell az eredményként kapott .csv fájlt (táblaként jelenik meg) a kimeneti tárolóban.

Ezt a tárolót csatlakoztathatja a Power BI-hoz a benne található adatok gazdag vizualizációinak létrehozásához.

Következő lépések

Ebben az oktatóanyagban megtanulta, hogyan használhatja a Pythonban írt Azure-függvényt a feltöltött PDF-dokumentumok automatikus feldolgozásához és a tartalom adatbarátabb formátumban való kimenetéhez. Ezután megtudhatja, hogyan jelenítheti meg a Power BI-t az adatok megjelenítéséhez.