Udostępnij za pośrednictwem


Samouczek: przetwarzanie przechowywanych dokumentów przy użyciu usługi Azure Functions i języka Python

Analiza dokumentów może służyć jako część zautomatyzowanego potoku przetwarzania danych utworzonego za pomocą usługi Azure Functions. W tym przewodniku pokazano, jak używać usługi Azure Functions do przetwarzania dokumentów przekazanych do kontenera usługi Azure Blob Storage. Ten przepływ pracy wyodrębnia dane tabeli z przechowywanych dokumentów przy użyciu modelu układu analizy dokumentów i zapisuje dane tabeli w pliku .csv na platformie Azure. Następnie możesz wyświetlić dane przy użyciu usługi Microsoft Power BI (nieuwzroczeni tutaj).

Zrzut ekranu przedstawiający diagram przepływu pracy usługi platformy Azure

Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • Tworzenie konta usługi Azure Storage.
  • Tworzenie projektu usługi Azure Functions.
  • Wyodrębnianie danych układu z przekazanych formularzy.
  • Przekazywanie wyodrębnionych danych układu do usługi Azure Storage.

Wymagania wstępne

  • Subskrypcja platformy - Azure Utwórz bezpłatnie

  • Zasób analizy dokumentów. Po utworzeniu subskrypcji platformy Azure utwórz zasób analizy dokumentów w witrynie Azure Portal, aby uzyskać klucz i punkt końcowy. Możesz użyć warstwy cenowej bezpłatna (F0), aby wypróbować usługę, a następnie uaktualnić ją do warstwy płatnej dla środowiska produkcyjnego.

    • Po wdrożeniu zasobu wybierz pozycję Przejdź do zasobu. Potrzebujesz klucza i punktu końcowego z utworzonego zasobu, aby połączyć aplikację z interfejsem API analizy dokumentów. W dalszej części samouczka wklejysz klucz i punkt końcowy do poniższego kodu:

      Zrzut ekranu przedstawiający klucze i lokalizację punktu końcowego w witrynie Azure Portal.

  • Język Python 3.6.x, 3.7.x, 3.8.x lub 3.9.x (język Python 3.10.x nie jest obsługiwany w tym projekcie).

  • Najnowsza wersja programu Visual Studio Code (VS Code ) z zainstalowanymi następującymi rozszerzeniami:

  • Eksplorator usługi Azure Storage zainstalowany.

  • Lokalny dokument PDF do analizy. Możesz użyć naszego przykładowego dokumentu PDF dla tego projektu.

Tworzenie konta usługi Azure Storage

  1. Utwórz konto usługi Azure Storage ogólnego przeznaczenia w wersji 2 w witrynie Azure Portal. Jeśli nie wiesz, jak utworzyć konto usługi Azure Storage przy użyciu kontenera magazynu, postępuj zgodnie z następującymi przewodnikami Szybki start:

    • Create a storage account (Tworzenie konta magazynu). Podczas tworzenia konta magazynu wybierz pozycję Wydajność w warstwie Standardowa w polu Szczegóły>wystąpienia Wydajność.
    • Tworzenie kontenera. Podczas tworzenia kontenera w oknie Nowy kontener ustaw pozycję Poziom dostępu publicznego na Kontener (anonimowy dostęp do odczytu dla kontenerów i plików).
  2. W okienku po lewej stronie wybierz kartę Udostępnianie zasobów (CORS) i usuń istniejące zasady CORS, jeśli istnieją.

  3. Po wdrożeniu konta magazynu utwórz dwa puste kontenery magazynu obiektów blob o nazwie input i output.

Tworzenie projektu usługi Azure Functions

  1. Utwórz nowy folder o nazwie functions-app , aby zawierał projekt, a następnie wybierz pozycję Wybierz.

  2. Otwórz program Visual Studio Code i otwórz paletę poleceń (Ctrl+Shift+P). Wyszukaj i wybierz pozycję Python:Select Interpreter → wybierz zainstalowany interpreter języka Python w wersji 3.6.x, 3.7.x, 3.8.x lub 3.9.x. Ten wybór spowoduje dodanie ścieżki interpretera języka Python wybranej do projektu.

  3. Wybierz logo platformy Azure w okienku nawigacji po lewej stronie.

    • Istniejące zasoby platformy Azure zostaną wyświetlone w widoku Zasoby.

    • Wybierz subskrypcję platformy Azure używaną dla tego projektu i poniżej powinna zostać wyświetlona aplikacja funkcji platformy Azure.

      Zrzut ekranu przedstawiający listę zasobów platformy Azure w jednym, ujednoliconym widoku.

  4. Wybierz sekcję Obszar roboczy (lokalny) znajdującą się poniżej wymienionych zasobów. Wybierz symbol plusa i wybierz przycisk Utwórz funkcję .

    Zrzut ekranu przedstawiający miejsce rozpoczęcia tworzenia funkcji platformy Azure.

  5. Po wyświetleniu monitu wybierz pozycję Utwórz nowy projekt i przejdź do katalogu function-app . Naciśnij przycisk Wybierz.

  6. Zostanie wyświetlony monit o skonfigurowanie kilku ustawień:

    • Wybierz język → wybierz pozycję Python.

    • Wybierz interpreter języka Python, aby utworzyć środowisko wirtualne, → wybierz interpreter ustawiony wcześniej jako domyślny.

    • Wybierz szablon → wybierz wyzwalacz usługi Azure Blob Storage i nadaj wyzwalaczowi nazwę lub zaakceptuj nazwę domyślną. Naciśnij Enter, aby potwierdzić.

    • Wybierz ustawienie → wybierz pozycję ➕Utwórz nowe ustawienie aplikacji lokalnej z menu rozwijanego.

    • Wybierz subskrypcję → wybierz subskrypcję platformy Azure przy użyciu utworzonego konta magazynu → wybierz konto magazynu → a następnie wybierz nazwę kontenera wejściowego magazynu (w tym przypadku input/{name}). Naciśnij Enter, aby potwierdzić.

    • Wybierz sposób otwierania projektu , → wybierz pozycję Otwórz projekt w bieżącym oknie z menu rozwijanego.

  7. Po wykonaniu tych kroków program VS Code doda nowy projekt funkcji platformy Azure ze skryptem języka Python __init__.py . Ten skrypt zostanie wyzwolony po przekazaniu pliku do wejściowego kontenera magazynu:

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

Testowanie funkcji

  1. Naciśnij F5, aby uruchomić funkcję podstawową. Program VS Code wyświetli monit o wybranie konta magazynu do interfejsu.

  2. Wybierz utworzone konto magazynu i kontynuuj.

  3. Otwórz Eksplorator usługi Azure Storage i przekaż przykładowy dokument PDF do kontenera wejściowego. Następnie sprawdź terminal programu VS Code. Skrypt powinien rejestrować, że został wyzwolony przez przekazywanie plików PDF.

    Zrzut ekranu przedstawiający terminal programu VS Code po przekazaniu nowego dokumentu.

  4. Zatrzymaj skrypt przed kontynuowaniem.

Dodawanie kodu przetwarzania dokumentów

Następnie dodasz własny kod do skryptu języka Python w celu wywołania usługi Document Intelligence i przeanalizowania przekazanych dokumentów przy użyciu modelu układu analizy dokumentów.

  1. W programie VS Code przejdź do pliku requirements.txt funkcji. Ten plik definiuje zależności skryptu. Dodaj następujące pakiety języka Python do pliku:

    cryptography
    azure-functions
    azure-storage-blob
    azure-identity
    requests
    pandas
    numpy
    
  2. Następnie otwórz skrypt __init__.py . Dodaj następujące instrukcje 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. Wygenerowaną main funkcję można pozostawić w stanie rzeczywistym. Dodasz kod niestandardowy do tej funkcji.

    # 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. Poniższy blok kodu wywołuje interfejs API analizy analizy dokumentów w przekazanym dokumencie. Wypełnij wartości punktu końcowego i klucza.

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

    Ważne

    Pamiętaj, aby usunąć klucz z kodu po zakończeniu i nigdy nie publikować go publicznie. W przypadku środowiska produkcyjnego użyj bezpiecznego sposobu przechowywania i uzyskiwania dostępu do poświadczeń, takich jak usługa Azure Key Vault. Aby uzyskać więcej informacji, zobacz Zabezpieczenia usług Azure AI.

  5. Następnie dodaj kod, aby wysłać zapytanie do usługi i pobrać zwrócone dane.

    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. Dodaj następujący kod, aby nawiązać połączenie z kontenerem wyjściowym usługi Azure Storage. Wypełnij własne wartości dla nazwy i klucza konta magazynu. Klucz można uzyskać na karcie Klucze dostępu zasobu magazynu w witrynie 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")
    

    Poniższy kod analizuje zwróconą odpowiedź analizy dokumentów, tworzy plik .csv i przekazuje go do kontenera wyjściowego.

    Ważne

    Prawdopodobnie trzeba będzie edytować ten kod, aby był zgodny ze strukturą własnych dokumentów.

        # 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. Na koniec ostatni blok kodu przekazuje wyodrębnione dane tabeli i tekstu do elementu magazynu obiektów 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)
    

Uruchamianie funkcji

  1. Naciśnij F5, aby ponownie uruchomić funkcję.

  2. Użyj Eksplorator usługi Azure Storage, aby przekazać przykładowy formularz PDF do kontenera magazynu wejściowego. Ta akcja powinna spowodować uruchomienie skryptu, a następnie w kontenerze wyjściowym powinien zostać wyświetlony wynikowy plik .csv (wyświetlany jako tabela).

Ten kontener można połączyć z usługą Power BI, aby utworzyć rozbudowane wizualizacje danych, które zawiera.

Następne kroki

W tym samouczku przedstawiono sposób użycia funkcji platformy Azure napisanej w języku Python w celu automatycznego przetwarzania przekazanych dokumentów PDF i wyprowadzania ich zawartości w bardziej przyjaznym dla danych formacie. Następnie dowiedz się, jak wyświetlać dane przy użyciu usługi Power BI.