Share via


Öğ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. Ardından Microsoft Power BI kullanarak verileri görüntüleyebilirsiniz (burada ele alınmaz).

Azure Hizmeti iş akışı diyagramının ekran görüntüsü

Bu öğreticide şunların nasıl yapıldığı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'ya yükleyin.

Önkoşullar

Azure Depolama hesabı oluşturma

  1. Azure portal 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.
  2. Sol bölmede Kaynak paylaşımı (CORS) sekmesini seçin ve varsa mevcut CORS ilkesini kaldırın.

  3. Depolama hesabınız dağıtıldıktan sonra input ve output adlı iki boş blob depolama kapsayıcısı oluşturun.

Azure İşlevleri projesi oluşturma

  1. Projeyi içerecek functions-app adlı yeni bir klasör oluşturun ve Seç'i seçin.

  2. Visual Studio Code açın ve Komut Paleti'ni açın (Ctrl+Shift+P). 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üne sahip yüklü bir Python yorumlayıcısı seçin. Bu seçim, seçtiğiniz Python yorumlayıcı yolunu projenize ekler.

  3. 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.

      Azure kaynaklarınızı tek, birleşik bir görünümde gösteren listenin ekran görüntüsü.

  4. 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.

    Azure işlevi oluşturmaya nereden başlanacağını gösteren ekran görüntüsü.

  5. İstendiğinde Yeni proje oluştur'u seçin ve function-app dizinine gidin. Seç’i seçin.

  6. 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çinAzure 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 Projeyi geçerli pencerede aç'ı seçin.

  7. Bu adımları tamamladıktan sonra VS Code, __init__.py Python betiğine sahip yeni bir Azure İşlevi projesi ekler. Bu betik, giriş depolama kapsayıcısına bir dosya 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

  1. 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.

  2. Oluşturduğunuz depolama hesabını seçin ve devam edin.

  3. 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.

    Yeni belge yüklendikten sonra VS Code terminalinin ekran görüntüsü.

  4. Devam etmeden önce betiği durdurun.

Belge işleme kodu ekleme

Ardından, Belge Yönetim Bilgileri 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.

  1. 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
    
  2. 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
    
  3. 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")
    
  4. Aşağıdaki kod bloğu, karşıya yüklenen belgede 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)
    

    Önemli

    İşiniz bittiğinde anahtarı kodunuzdan kaldırmayı unutmayın ve asla herkese açık olarak göndermeyin. Üretim için Azure Key Vault gibi kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Daha fazla bilgi için bkz . Azure AI hizmetleri güvenliği.

  5. 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
    
    
  6. 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 doldurun. Anahtarı Azure portal 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
    
    
  7. Son olarak, son kod bloğu ayıklanan tablo 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

  1. İşlevi yeniden çalıştırmak için F5 tuşuna basın.

  2. Giriş depolama kapsayıcısına örnek bir PDF formu yüklemek için Azure Depolama Gezgini kullanın. Bu eylem betiğin çalıştırılmasını tetiklemelidir ve ardından sonuçta elde edilen .csv dosyasını (tablo olarak görüntülenir) çıkış kapsayıcısında 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.