El Yazısı Formlarınızı (Node.js) Akıllı Şekilde İşlemek için Document AI'ı Kullanma

1. Genel Bakış

Document AI nedir?

Document AI API, dokümanlar ve e-postalar gibi yapılandırılmamış verileri alıp bu verileri anlamayı, analiz etmeyi ve kullanmayı kolaylaştıran bir belge anlama çözümüdür. API, içerik sınıflandırması, öğe çıkarma ve gelişmiş arama gibi özellikler aracılığıyla yapı sağlar.

Bu eğitimde, Node.js ile Document AI API'yi kullanmaya odaklanacaksınız. Bu eğitimde, basit bir tıbbi kayıt formunun nasıl ayrıştırılacağı gösterilmektedir.

Neler öğreneceksiniz?

  • Document AI API'sini etkinleştirme
  • API isteklerinin kimliğini doğrulama
  • Node.js için istemci kitaplığını yükleme
  • Taranan bir formdaki verileri ayrıştırma

Gerekenler

  • Google Cloud projesi
  • Chrome veya Firefox gibi bir tarayıcı
  • Node.js bilgisi

Anket

Bu eğitimi nasıl kullanacaksınız?

Yalnızca okuyun Okuyun ve alıştırmaları tamamlayın

Node.js ile ilgili deneyiminizi nasıl değerlendirirsiniz?

Yeni başlayan Orta düzey Uzman

Google Cloud hizmetlerini kullanma deneyiminizi nasıl değerlendirirsiniz?

Başlangıç Orta İleri

2. Kurulum ve Gereksinimler

Yönlendirmesiz ortam kurulumu

  1. Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. (Gmail veya G Suite hesabınız yoksa hesap oluşturmanız gerekir.)

Tüm Google Cloud projelerinde benzersiz bir ad olan proje kimliğini unutmayın. (Yukarıdaki ad zaten alınmış olduğundan sizin için çalışmayacaktır. Üzgünüz.) Bu kimliği daha sonra PROJECT_ID olarak sağlamanız gerekir.

  1. Ardından, Google Cloud kaynaklarını kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir.

"Temizleme" bölümündeki talimatları uyguladığınızdan emin olun. Bu bölümde, bu eğitimin ötesinde faturalandırma ücreti alınmaması için kaynakları nasıl kapatacağınız açıklanmıştır. Google Cloud'un yeni kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.

Cloud Shell'i başlatma

Google Cloud'dayken Google Cloud'u dizüstü bilgisayarınızdan uzaktan çalıştırabilirsiniz. Bu codelab'de ise Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell kullanılmaktadır.

Cloud Shell'i etkinleştirme

  1. Cloud Console'da Cloud Shell'i etkinleştir 'i H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_4nCa0Zz5LtwBlUZFXFCWFrmrWZLqg1MkZz2LdgUDQ tıklayın.

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

Cloud Shell'i daha önce hiç başlatmadıysanız ne olduğunu açıklayan bir ara ekran (ekranın alt kısmı) gösterilir. Bu durumda Devam'ı tıkladığınızda bu ekranı bir daha görmezsiniz. Bu tek seferlik ekran aşağıdaki gibi görünür:

kEPbNAo_w5C_pi9QvhFwWwky1cX8hr_xEMGWySNIoMCdi-Djx9AQRqWn-__DmEpC7vKgUtl-feTcv-wBxJ8NwzzAp7mY65-fi2LJo4twUoewT1SUjd6Y3h81RG3rKIkqhoVlFR-G7w

Cloud Shell'in temel hazırlığı ve bağlanması yalnızca birkaç dakikanızı alır.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

Cloud Shell, bulutta barındırılan bir sanal makineye terminal erişimi sağlar. Sanal makine, ihtiyaç duyacağınız tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin bulunur ve Google Cloud'da çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu codelab'deki çalışmalarınızın neredeyse tamamını yalnızca bir tarayıcı veya Chromebook'unuzla yapabilirsiniz.

Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin, proje kimliğinize ayarlandığını görürsünüz.

  1. Kimliğinizin doğrulandığını onaylamak için Cloud Shell'de şu komutu çalıştırın:
gcloud auth list

Komut çıkışı

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
gcloud config list project

Komut çıkışı

[core]
project = <PROJECT_ID>

Değilse şu komutla ayarlayabilirsiniz:

gcloud config set project <PROJECT_ID>

Komut çıkışı

Updated property [core/project].

3. Cloud Document AI API'yi etkinleştirme

Document AI'ı kullanmaya başlamadan önce API'yi etkinleştirmeniz gerekir. Tarayıcınızda Cloud Console'u açın.

  1. Gezinme menüsü ☰ > API'ler ve Hizmetler > Kitaplık'ı tıklayın. Search API
  2. "Document AI API"yi arayın, ardından Google Cloud projenizde API'yi kullanmak için Etkinleştir'i tıklayın.

4. İşleyici oluşturma ve test etme

Bu eğitimde Document AI Platform'da kullanmak üzere öncelikle Form Ayrıştırıcı işlemcisinin bir örneğini oluşturmanız gerekir.

  1. Konsolda Document AI Platform'a Genel Bakış sayfasına gidin.
  2. İşlemci Oluştur'u tıklayın ve Form Ayrıştırıcı'yı seçin.İşlemciler
  3. Bir işlemci adı belirtin ve listeden bölgenizi seçin.
  4. İşleyicinizi oluşturmak için Oluştur'u tıklayın.
  5. İşlemci kimliğinizi kopyalayın. Bunu daha sonra kodunuzda kullanmanız gerekir.

(İsteğe bağlı) Bir doküman yükleyerek işlemcinizi konsolda test edebilirsiniz. Doküman Yükle'yi tıklayın ve ayrıştırılacak bir form seçin. Kullanabileceğiniz bir form yoksa bu örnek formu indirip kullanabilirsiniz.

Sağlık Formu

Çıkışınız şu şekilde görünmelidir: Ayrıştırılmış Form

5. API isteklerinin kimliğini doğrulama

Document AI API'ye istek göndermek için hizmet hesabı kullanmanız gerekir. Hizmet hesabı, projenize aittir ve API istekleri göndermek için Google Client Node.js kitaplığı tarafından kullanılır. Diğer tüm kullanıcı hesapları gibi, hizmet hesabı da bir e-posta adresiyle temsil edilir. Bu bölümde, hizmet hesabı oluşturmak için Cloud SDK'yı kullanacak, ardından hizmet hesabı olarak kimlik doğrulamak için gereken kimlik bilgilerini oluşturacaksınız.

Öncelikle, bu codelab boyunca kullanacağınız PROJECT_ID ile bir ortam değişkeni ayarlayın:

export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value core/project)

Ardından, Document AI API'ye erişmek için yeni bir hizmet hesabı oluşturun:

gcloud iam service-accounts create my-docai-sa \
  --display-name "my-docai-service-account"

Ardından, Node.js kodunuzun yeni hizmet hesabınız olarak giriş yapmak için kullandığı kimlik bilgilerini oluşturun. Bu kimlik bilgilerini oluşturduktan sonra aşağıdaki komut aracılığıyla bir JSON dosyası "~/key.json" olarak kaydedin:

gcloud iam service-accounts keys create ~/key.json \
  --iam-account  my-docai-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com

Son olarak, kitaplığın kimlik bilgilerinizi bulmak için kullandığı GOOGLE_APPLICATION_CREDENTIALS ortam değişkenini ayarlayın. Bu form kimlik doğrulaması hakkında daha fazla bilgi edinmek için kılavuza bakın. Ortam değişkeni, oluşturduğunuz kimlik bilgisi JSON dosyasının tam dizin yoluna göre ayarlanmalıdır. Bunun için:

export GOOGLE_APPLICATION_CREDENTIALS="/path/to/key.json"

6. Örnek Formu İndirme

Herkese açık Google Cloud Storage örnekleri paketimizde depolanan örnek bir formumuz var. Çalışma dizininize indirmek için aşağıdaki komutu kullanın.

gsutil cp gs://cloud-samples-data/documentai/form.pdf .

Aşağıdaki komutu kullanarak dosyanın cloudshell'inize indirildiğini onaylayın:

ls -ltr form.pdf

7. İstemci kitaplığını yükleme

Ardından, kodunuzu çalışma dizininizde ayarlayın.

Yeni bir Node.js paketi başlatın:

npm init

Document AI istemci kitaplığını yükleyin:

npm install @google-cloud/documentai

8. Eşzamanlı İşleme Belgesi İsteğinde Bulunma

Bu adımda, senkron uç noktayı kullanarak bir işlem dokümanı çağrısı yaparsınız. Aynı anda çok sayıda belgeyi işlemek için asenkron API'yi de kullanabilirsiniz. Form Ayrıştırıcı API'lerini kullanma hakkında daha fazla bilgi edinmek için buradaki kılavuzu inceleyin.

index.js dosyası oluşturup aşağıdaki kodu yapıştırın. İlgili değişkenleri işlemcinizin bilgileriyle doldurun.

const { DocumentProcessorServiceClient } = require('@google-cloud/documentai').v1;
const fs = require('fs');

/**
 * Runs the sample document through Document AI to get key/value pairs and
 * confidence scores.
 */
async function processDocument(projectId, location, processorId, filePath, mimeType) {
    // Instantiates a client
    const documentaiClient = new DocumentProcessorServiceClient();

    // The full resource name of the processor, e.g.:
    // projects/project-id/locations/location/processor/processor-id
    // You must create new processors in the Cloud Console first
    const resourceName = documentaiClient.processorPath(projectId, location, processorId);

    // Read the file into memory.
    const imageFile = fs.readFileSync(filePath);

    // Convert the image data to a Buffer and base64 encode it.
    const encodedImage = Buffer.from(imageFile).toString('base64');

    // Load Binary Data into Document AI RawDocument Object
    const rawDocument = {
        content: encodedImage,
        mimeType: mimeType,
    };

    // Configure ProcessRequest Object
    const request = {
        name: resourceName,
        rawDocument: rawDocument
    };

    // Use the Document AI client to process the sample form
    const [result] = await documentaiClient.processDocument(request);

    return result.document;
}

/**
 * Run the codelab.
 */
async function main() {
    const projectId = 'YOUR_PROJECT_ID';
    const location = 'YOUR_PROJECT_LOCATION'; // Format is 'us' or 'eu'
    const processorId = 'YOUR_PROCESSOR_ID'; // Should be a Hexadecimal string

    // Supported File Types
    // https://cloud.google.com/document-ai/docs/processors-list#processor_form-parser
    filePath = 'form.pdf'; // The local file in your current working directory
    mimeType = 'application/pdf';

    const document = await processDocument(projectId, location, processorId, filePath, mimeType);
    console.log("Document Processing Complete");

    // Print the document text as one big string
    console.log(`Text: ${document.text}`);
}

main(...process.argv.slice(2)).catch(err => {
    console.error(err);
    process.exitCode = 1;
});

Kodunuzu şimdi çalıştırın. Konsolunuzda aşağıdaki metnin yazdırıldığını görmeniz gerekir.

Text: FakeDoc M.D.
HEALTH INTAKE FORM
Please fill out the questionnaire carefully. The information you provide will be used to complete
your health profile and will be kept confidential.
Name:
Date:
Sally
Walker
DOB: 09/04/1986
Address: 24 Barney Lane City: Towalo State: NJ Zip: 07082
Email: Sally, waller@cmail.com Phone #: (906) 917-3486
Gender:
Marital Status: Single Occupation: Software Engineer
Referred By: None
Emergency Contact: Eva Walker Emergency Contact Phone: (906) 334-8926
Describe your medical concerns (symptoms, diagnoses, etc):
Runny nose, mucas in throat, weakness,
aches, chills, tired
Are you currently taking any medication? (If yes, please describe):
Vyvanse (25mg) daily for attention

Sonraki adımlarda, veritabanlarında daha kolay depolanabilen veya diğer uygulamalarda kullanılabilen yapılandırılmış verileri ayıklarsınız.

9. Form anahtarı/değer çiftlerini ayıklama

Artık formdaki anahtar/değer çiftlerini ve bunlara karşılık gelen güven puanlarını ayıklayabilirsiniz. Document yanıt nesnesi, giriş dokümanındaki sayfaların listesini içerir. Her page nesnesi, form alanlarının ve metindeki konumlarının listesini içerir.

Aşağıdaki kod, her sayfayı yineler ve her anahtarı, değeri ve güven puanını çıkarır.

Kodunuza aşağıdaki işlevi ekleyin.

/**
 * Extract form data and confidence from processed document.
 */
function extractFormData(document) {
    // Extract shards from the text field
    function getText(textAnchor, document) {
        if (!textAnchor.textSegments || textAnchor.textSegments.length === 0) {
            return '';
        }

        // First shard in document doesn't have startIndex property
        const startIndex = textAnchor.textSegments[0].startIndex || 0;
        const endIndex = textAnchor.textSegments[0].endIndex;

        return document.text.substring(startIndex, endIndex);
    }

    var formData = [];

    const pages = document.pages;

    pages.forEach((page) => {
        const formFields = page.formFields;
        formFields.forEach((field) => {
            // Get the extracted field names and remove extra space from text
            const fieldName = getText(field.fieldName.textAnchor, document);
            // Confidence - How "sure" the API is that the text is correct
            const nameConfidence = field.fieldName.confidence.toFixed(4);

            const fieldValue = getText(field.fieldValue.textAnchor, document);
            const valueConfidence = field.fieldValue.confidence.toFixed(4);

            formData.push({
                fieldName: fieldName,
                fieldValue: fieldValue,
                nameConfidence: nameConfidence,
                valueConfidence: valueConfidence
            });
        });
    });

    return formData;
}

Ana işlevin içinden extractFormData() işlevine bir çağrı ekleyin ve ortaya çıkan nesneyi tablo olarak yazdırın.

/**
 * Run the codelab.
 */
async function main() {
    const projectId = 'YOUR_PROJECT_ID';
    const location = 'YOUR_PROJECT_LOCATION'; // Format is 'us' or 'eu'
    const processorId = 'YOUR_PROCESSOR_ID'; // Should be a Hexadecimal string

    // Supported File Types
    // https://cloud.google.com/document-ai/docs/processors-list#processor_form-parser
    filePath = 'form.pdf'; // The local file in your current working directory
    mimeType = 'application/pdf';

    const document = await processDocument(projectId, location, processorId, filePath, mimeType);
    const formData = extractFormData(document);

    console.log('\nThe following form key/value pairs were detected:');
    console.table(formData);
}

Şimdi kodunuzu çalıştırın. Örnek dokümanımızı kullanıyorsanız aşağıdaki çıkışı görürsünüz:

The following form key/value pairs were detected:
┌─────────┬────────────────────────────────────────────────────────────────┬──────────────────────────────────────────────────────────────────┬────────────────┬─────────────────┐
│ (index) │                           fieldName                            │                            fieldValue                            │ nameConfidence │ valueConfidence │
├─────────┼────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────┼────────────────┼─────────────────┤
│    0    │                       'Marital Status: '                       │                            'Single '                             │    '1.0000'    │    '1.0000'     │
│    1    │                            'DOB: '                             │                          '09/04/1986\n'                          │    '0.9999'    │    '0.9999'     │
│    2    │                            'City: '                            │                            'Towalo '                             │    '0.9996'    │    '0.9996'     │
│    3    │                          'Address: '                           │                        '24 Barney Lane '                         │    '0.9994'    │    '0.9994'     │
│    4    │                        'Referred By: '                         │                             'None\n'                             │    '0.9968'    │    '0.9968'     │
│    5    │                          'Phone #: '                           │                        '(906) 917-3486\n'                        │    '0.9961'    │    '0.9961'     │
│    6    │                           'State: '                            │                              'NJ '                               │    '0.9960'    │    '0.9960'     │
│    7    │                  'Emergency Contact Phone: '                   │                        '(906) 334-8926\n'                        │    '0.9925'    │    '0.9925'     │
│    8    │                           'Name:\n'                            │                        'Sally\nWalker\n'                         │    '0.9922'    │    '0.9922'     │
│    9    │                         'Occupation: '                         │                      'Software Engineer\n'                       │    '0.9914'    │    '0.9914'     │
│   10    │                            'Zip: '                             │                            '07082\n'                             │    '0.9904'    │    '0.9904'     │
│   11    │                           'Email: '                            │                    'Sally, waller@cmail.com '                    │    '0.9681'    │    '0.9681'     │
│   12    │                     'Emergency Contact: '                      │                          'Eva Walker '                           │    '0.9430'    │    '0.9430'     │
│   13    │ 'Describe your medical concerns (symptoms, diagnoses, etc):\n' │ 'Runny nose, mucas in throat, weakness,\naches, chills, tired\n' │    '0.7817'    │    '0.7817'     │
└─────────┴────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────┴────────────────┴─────────────────┘

10. Tebrikler!

Tebrikler, el yazısıyla doldurulmuş bir formdan veri ayıklamak için Document AI API'yi başarıyla kullandınız. Diğer form resimleriyle denemeler yapmanızı öneririz.

Temizleme

Bu eğiticide kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız:

  • Cloud Console'da Kaynakları yönetin sayfasına gidin.
  • Proje listesinde projenizi seçin ve Sil'i tıklayın.
  • İletişim kutusunda proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın.

Daha Fazla Bilgi

Lisans

Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.