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; belgeler ve e-postalar gibi yapılandırılmamış verileri alarak verilerin anlaşılmasını, analiz edilmesini ve kullanılmasını kolaylaştıran bir belge anlama çözümüdür. API; içerik sınıflandırma, varlık çıkarma, gelişmiş arama ve daha fazlasıyla yapı sağlar.

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

Neler öğreneceksiniz?

  • Document AI API'yi etkinleştirme
  • API isteklerinin kimliğini doğrulama
  • Node.js için istemci kitaplığı nasıl yüklenir?
  • Taranmış bir formdan veri ayrıştırma

Gerekenler

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

Anket

Bu eğiticiden nasıl yararlanacaksınız?

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

Node.js deneyiminizi nasıl değerlendirirsiniz?

Acemi Orta Yeterli

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

Acemi Orta Yeterli

2. Kurulum ve Gereksinimler

Kendi hızınızda ortam kurulumu

  1. Cloud Console'da oturum açıp 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 projelerinin benzersiz bir adı olan proje kimliğini unutmayın. (Yukarıdaki adınız önceden alınmış ve şu an için daha uygun olmayacaktır!). 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ı izlediğinizden emin olun. bölümüne bakın. Bu bölümde, bu eğitim haricinde faturalandırmayla karşılaşmamanız için kaynakları nasıl kapatacağınız açıklanmaktadır. Yeni Google Cloud kullanıcıları 300 ABD doları ücretsiz deneme programından yararlanabilir.

Cloud Shell'i başlatma

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ılır.

Cloud Shell'i etkinleştirme

  1. Cloud Console'da, Cloud Shell'i etkinleştir H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_UZQZZGzGzGzqzQzGLzGzGzqqLqSqLG simgesini 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ıklayın (bunu bir daha görmezsiniz). Tek seferlik ekran şöyle görünür:

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

Temel hazırlık ve Cloud Shell'e bağlanmak yalnızca birkaç dakika sürer.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

Cloud Shell, bulutta barındırılan bir sanal makineye terminal erişimi sağlar. Sanal makine, ihtiyacınız olan tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud'da çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu codelab'deki çalışmalarınızın tamamı olmasa bile büyük bir kısmı yalnızca bir tarayıcı veya Chromebook'unuzla yapılabilir.

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. Kimlik doğrulamanızın tamamlandığını onaylamak için Cloud Shell'de aşağıdaki 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>

Doğru değilse aşağıdaki komutla ayarlayabilirsiniz:

gcloud config set project <PROJECT_ID>

Komut çıkışı

Updated property [core/project].

3. Cloud Document AI API'yi etkinleştirme

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

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

4. İşleyen Oluşturma ve Test Etme

Bu eğitim için önce Document AI Platform'da kullanılacak Form Ayrıştırıcı işlemcisinin bir örneğini oluşturmanız gerekir.

  1. Konsolda Document AI Platformuna Genel Bakış'a gidin
  2. Create Processor'ı (İşlemci Oluştur) 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 belge yükleyerek konsolda işlemcinizi test edebilirsiniz. Doküman Yükle'yi tıklayın ve ayrıştırılacak bir form seçin. Kullanabileceğiniz örnek formu yoksa 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 Google Client Node.js kitaplığı tarafından API istekleri yapmak için kullanılır. Diğer tüm kullanıcı hesapları gibi hizmet hesabı da e-posta adresiyle temsil edilir. Bu bölümde Google Cloud SDK'yı kullanarak bir hizmet hesabı oluşturacaksınız. Ardından, hizmet hesabı olarak kimliğinizi doğrulamak için ihtiyacınız olan 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, aşağıdakileri kullanarak 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şturun ve "~/key.json" JSON dosyası olarak kaydedin kullanabilirsiniz:

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

Son olarak, kitaplık tarafından kimlik bilgilerinizi bulmak için kullanılan 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şkeninin, oluşturduğunuz kimlik bilgisi JSON dosyasının tam yoluna şu şekilde ayarlanması gerekir:

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

6. Örnek Formu İndirin

Herkese açık Google Cloud Storage örnek paketimizde depolanan bir örnek formumuz var. Dosyayı ç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 Cloud Shell'inize indirildiğini onaylayın:

ls -ltr form.pdf

7. İstemci Kitaplığı'nı yükleme

Ardından, kodunuzu çalışma dizininizde oluşturun.

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

npm init

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

npm install @google-cloud/documentai

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

Bu adımda, eşzamanlı uç noktayı kullanarak bir süreç belgesi çağrısı yapacaksınız. Aynı anda büyük miktarda dokümanı işlemek için eşzamansız API'yi de kullanabilirsiniz. Form Ayrıştırıcı API'lerini kullanma hakkında daha fazla bilgi edinmek için buradaki kılavuzu okuyun.

Bir index.js dosyası oluşturun ve aşağıdaki kodu yapıştırın. Geçerli değişkenleri işleyicinizin 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 metin basılı olduğunu göreceksiniz.

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 depolanabilecek veya diğer uygulamalarda kullanılabilecek yapılandırılmış verileri çıkaracaksınız.

9. Form Anahtar/Değer Çiftlerini Çıkarın

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

Aşağıdaki kod her sayfada yineleme yaparak her bir anahtar, değer ve güven puanını ayıklar.

Aşağıdaki işlevi kodunuza 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 elde edilen 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ı kullandığınızda 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, Document AI API'yi başarıyla kullanarak elle yazılmış bir formdan veri ayıkladı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 önlemek amacıyla:

  • Cloud Console'da Kaynakları yönetin sayfasına gidin.
  • Proje listesinden projenizi seçin ve ardından Sil'i tıklayın.
  • İletişim kutusuna 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.