Öğretici: Depolanan belgeleri işlemek için Azure İşlevleri ve Python kullanma
Belge Yönetim Bilgileri, Azure İşlevleri ile oluşturulan otomatik veri işleme işlem hattının bir parçası olarak kullanılabilir. Bu kılavuzda, azure blob depolama kapsayıcısına yüklenen belgeleri işlemek için Azure İşlevleri nasıl kullanacağınız gösterilir. Bu iş akışı, Belge Yönetim Bilgileri düzen modelini kullanarak depolanan belgelerden tablo verilerini ayıklar ve tablo verilerini Azure'daki bir .csv dosyasına kaydeder. Daha sonra Microsoft Power BI kullanarak verileri görüntüleyebilirsiniz (burada ele alınmaz).
Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:
- Bir Azure Depolama hesabı oluşturun.
- bir Azure İşlevleri projesi oluşturun.
- Karşıya yüklenen formlardan düzen verilerini ayıklayın.
- Ayıklanan düzen verilerini Azure Depolama'a yükleyin.
Önkoşullar
Azure aboneliği - Ücretsiz bir abonelik oluşturun
Belge Yönetim Bilgileri kaynağı. Azure aboneliğinizi aldıktan sonra anahtarınızı ve uç noktanızı almak için Azure portalında bir Belge Zekası kaynağı oluşturun. Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını (
F0
) kullanabilirsiniz.Kaynağınız dağıtıldıktan sonra Kaynağa git'i seçin. Uygulamanızı Belge Zekası API'sine bağlamak için oluşturduğunuz kaynaktan anahtara ve uç noktaya ihtiyacınız vardır. Anahtarınızı ve uç noktanızı öğreticinin ilerleyen bölümlerinde aşağıdaki koda yapıştıracaksınız:
Python 3.6.x, 3.7.x, 3.8.x veya 3.9.x (Bu proje için Python 3.10.x desteklenmez).
Visual Studio Code'un (VS Code) aşağıdaki uzantıların yüklü olduğu en son sürümü:
Azure İşlevleri uzantısı. Yüklendikten sonra sol gezinti bölmesinde Azure logosunu görmeniz gerekir.
Azure İşlevleri Temel Araçları sürüm 3.x (Sürüm 4.x bu proje için desteklenmiyor).
Visual Studio kodu için Python Uzantısı . Daha fazla bilgi için bkz.VS Code'da Python ile Çalışmaya Başlama
Analiz etmek için yerel bir PDF belgesi. Bu proje için örnek pdf belgemizi kullanabilirsiniz.
Azure Depolama hesabı oluşturma
Azure portalında genel amaçlı v2 Azure Depolama hesabı oluşturun. Depolama kapsayıcısı ile Azure depolama hesabı oluşturmayı bilmiyorsanız şu hızlı başlangıçları izleyin:
- Depolama hesabı oluşturma. Depolama hesabınızı oluştururken Örnek ayrıntıları>Performans alanında Standart performans'ı seçin.
- Kapsayıcı oluşturma. Kapsayıcınızı oluşturduğunuzda, Yeni Kapsayıcı penceresinde Genel erişim düzeyiniKapsayıcı (kapsayıcılar ve dosyalar için anonim okuma erişimi) olarak ayarlayın.
Sol bölmede Kaynak paylaşımı (CORS) sekmesini seçin ve varsa mevcut CORS ilkesini kaldırın.
Depolama hesabınız dağıtıldıktan sonra giriş ve çıkış adlı iki boş blob depolama kapsayıcısı oluşturun.
Azure İşlevleri projesi oluşturma
Projeyi içerecek functions-app adlı yeni bir klasör oluşturun ve Seç'i seçin.
Visual Studio Code'ı açın ve Komut Paleti'ni (Ctrl+Shift+P) açın. Python'ı arayın ve seçin :Yorumlayıcı'yı seçin → 3.6.x, 3.7.x, 3.8.x veya 3.9.x sürümü olan yüklü bir Python yorumlayıcısını seçin. Bu seçim, seçtiğiniz Python yorumlayıcı yolunu projenize ekler.
Sol gezinti bölmesinden Azure logosunu seçin.
Mevcut Azure kaynaklarınızı Kaynaklar görünümünde görürsünüz.
Bu proje için kullandığınız Azure aboneliğini seçin ve aşağıda Azure İşlev Uygulaması'nı görmeniz gerekir.
Listelenen kaynaklarınızın altında yer alan Çalışma Alanı (Yerel) bölümünü seçin. Artı simgesini seçin ve İşlev Oluştur düğmesini seçin.
İstendiğinde Yeni proje oluştur'u seçin ve function-app dizinine gidin. Seç'i seçin.
Birkaç ayar yapılandırmanız istenir:
Bir dil seçin → Python'ı seçin.
Sanal ortam oluşturmak için bir Python yorumlayıcısı seçin → daha önce varsayılan olarak ayarladığınız yorumlayıcıyı seçin.
Bir şablon seçin → Azure Blob Depolama tetikleyiciyi seçin ve tetikleyiciye bir ad verin veya varsayılan adı kabul edin. Onaylamak için Enter tuşuna basın.
Ayar'ı seçin → açılan menüden Yeni yerel uygulama ayarı oluştur'u seçin ➕.
Aboneliği seçin → oluşturduğunuz depolama hesabıyla Azure aboneliğinizi seçin → depolama hesabınızı seçin → ardından depolama giriş kapsayıcısının adını seçin (bu durumda).
input/{name}
Onaylamak için Enter tuşuna basın.Projenizi nasıl açmak istediğinizi seçin → açılan menüden Geçerli pencerede projeyi aç'ı seçin.
Bu adımları tamamladıktan sonra VS Code, __init__.py Python betiğiyle yeni bir Azure İşlevi projesi ekler. Bu betik, bir dosya giriş depolama kapsayıcısına yüklendiğinde tetiklenir:
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")
İşlevi test etme
Temel işlevi çalıştırmak için F5 tuşuna basın. VS Code, arabirim oluşturmak için bir depolama hesabı seçmenizi ister.
Oluşturduğunuz depolama hesabını seçin ve devam edin.
Azure Depolama Gezgini açın ve örnek PDF belgesini giriş kapsayıcısına yükleyin. Ardından VS Code terminalini denetleyin. Betik, PDF yüklemesi tarafından tetiklendiğini günlüğe kaydetmelidir.
Devam etmeden önce betiği durdurun.
Belge işleme kodu ekleme
Ardından, Belge Zekası hizmetini çağırmak ve Belge Yönetim Bilgileri düzen modelini kullanarak karşıya yüklenen belgeleri ayrıştırmak için Python betiğine kendi kodunuzu ekleyeceksiniz.
VS Code'da işlevin requirements.txt dosyasına gidin. Bu dosya, betiğinizin bağımlılıklarını tanımlar. Dosyaya aşağıdaki Python paketlerini ekleyin:
cryptography azure-functions azure-storage-blob azure-identity requests pandas numpy
Ardından __init__.py betiğini açın. Aşağıdaki
import
deyimlerini ekleyin: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
Oluşturulan
main
işlevi olduğu gibi bırakabilirsiniz. Özel kodunuzu bu işlevin içine ekleyeceksiniz.# 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")
Aşağıdaki kod bloğu, karşıya yüklenen belgedeki Belge Yönetim Bilgileri Çözümleme Düzeni API'sini çağırır. Uç noktanızı ve anahtar değerlerinizi doldurun.
# 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)
Ardından, hizmeti sorgulamak ve döndürülen verileri almak için kod ekleyin.
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
Azure Depolama çıkış kapsayıcısına bağlanmak için aşağıdaki kodu ekleyin. Depolama hesabı adı ve anahtarı için kendi değerlerinizi girin. Anahtarı Azure portalındaki depolama kaynağınızın Erişim anahtarları sekmesinden alabilirsiniz.
# 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")
Aşağıdaki kod, döndürülen Belge Yönetim Bilgileri yanıtını ayrıştırır, bir .csv dosyası oluşturur ve çıktı kapsayıcısına yükler.
Önemli
Bu kodu kendi belgelerinizin yapısıyla eşleşecek şekilde düzenlemeniz gerekebilir.
# 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
Son olarak, son kod bloğu ayıklanan tabloyu ve metin verilerini blob depolama öğenize yükler.
# 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)
İşlevi çalıştırma
İşlevi yeniden çalıştırmak için F5 tuşuna basın.
Giriş depolama kapsayıcısına örnek bir PDF formu yüklemek için Azure Depolama Gezgini kullanın. Bu eylem betiği çalıştırılacak şekilde tetiklemelidir ve ardından çıktı kapsayıcısında sonuçta elde edilen .csv dosyasını (tablo olarak görüntülenir) görmeniz gerekir.
Bu kapsayıcıyı Power BI'a bağlayarak içerdiği verilerin zengin görselleştirmelerini oluşturabilirsiniz.
Sonraki adımlar
Bu öğreticide, karşıya yüklenen PDF belgelerini otomatik olarak işlemek ve içeriklerini daha veri dostu bir biçimde çıkarmak için Python'da yazılmış bir Azure İşlevi'ni kullanmayı öğrendiniz. Ardından, verileri görüntülemek için Power BI'ı kullanmayı öğrenin.
- Belge Zekası nedir?
- Düzen modeli hakkında daha fazla bilgi edinin