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).
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:
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:
Rozszerzenie usługi Azure Functions. Po zainstalowaniu logo platformy Azure powinno zostać wyświetlone w okienku nawigacji po lewej stronie.
Azure Functions Core Tools w wersji 3.x (wersja 4.x nie jest obsługiwana w tym projekcie).
Rozszerzenie języka Python dla programu Visual Studio Code. Aby uzyskać więcej informacji, zobacz Wprowadzenie do języka Python w programie VS Code
Lokalny dokument PDF do analizy. Możesz użyć naszego przykładowego dokumentu PDF dla tego projektu.
Tworzenie konta usługi Azure Storage
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).
W okienku po lewej stronie wybierz kartę Udostępnianie zasobów (CORS) i usuń istniejące zasady CORS, jeśli istnieją.
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
Utwórz nowy folder o nazwie functions-app , aby zawierał projekt, a następnie wybierz pozycję Wybierz.
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.
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.
Wybierz sekcję Obszar roboczy (lokalny) znajdującą się poniżej wymienionych zasobów. Wybierz symbol plusa i wybierz przycisk Utwórz funkcję .
Po wyświetleniu monitu wybierz pozycję Utwórz nowy projekt i przejdź do katalogu function-app . Naciśnij przycisk Wybierz.
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.
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
Naciśnij F5, aby uruchomić funkcję podstawową. Program VS Code wyświetli monit o wybranie konta magazynu do interfejsu.
Wybierz utworzone konto magazynu i kontynuuj.
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.
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.
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
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
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")
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.
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
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
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
Naciśnij F5, aby ponownie uruchomić funkcję.
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.
- Co to jest analiza dokumentów?
- Dowiedz się więcej o modelu układu