1. מבוא
ב-Codelab הזה תלמדו איך להשתמש במעבדי מסמכים מיוחדים ב-Document AI כדי לסווג ולנתח מסמכים מיוחדים באמצעות Python. לצורך הסיווג והפיצול, נשתמש בקובץ PDF לדוגמה שמכיל חשבוניות, קבלות ופירוטי עזר. לאחר מכן, לצורך ניתוח וחילוץ ישות, נשתמש בחשבונית כדוגמה.
ההליך הזה והקוד לדוגמה יפעלו עם כל מסמך מיוחד שנתמך על ידי Document AI.
דרישות מוקדמות
ה-Codelab הזה מתבסס על תוכן שמוצג ב-Document AI Codelabs אחרים.
מומלץ להשלים את ה-Codelabs הבאים לפני שממשיכים:
מה תלמדו
- איך לסווג ולזהות נקודות פיצול במסמכים מיוחדים.
- איך לחלץ ישויות סכמה באמצעות מעבדים מיוחדים.
מה צריך להכין
2. בתהליך ההגדרה
פלטפורמת ה-Codelab הזו מבוססת על ההנחה שהשלמת את השלבים להגדרת Document AI שמפורטים ב-Introductionory Codelab.
לפני שממשיכים, צריך לבצע את הפעולות הבאות:
צריך גם להתקין את Pandas, ספריית ניתוח נתונים פופולרית ל-Python.
pip3 install --upgrade pandas
3. יצירת מעבדים מיוחדים
קודם צריך ליצור מופעים של המעבדים שישמשו אתכם במדריך הזה.
- במסוף, עוברים אל Document AI Platform Overview
- לוחצים על Create Processing (יצירת מעבד), גוללים למטה אל Specialized (מיוחד) ובוחרים באפשרות Procurnce Docs Splitter.
- צריך לתת לו את השם 'codelab-procurement-splitter' (או משהו אחר שתזכרו) ובוחרים את האזור הקרוב ביותר מהרשימה.
- לוחצים על יצירה כדי ליצור את המעבד.
- מעתיקים את מזהה המעבד. חובה להשתמש בה בקוד מאוחר יותר.
- חוזרים על שלבים 2 עד 6 עם מנתח החשבוניות (אפשר לקרוא לו בשם 'codelab-invoice-parser')
מעבד בדיקה במסוף
כדי לבדוק את מנתח החשבוניות במסוף, יש להעלות מסמך.
לוחצים על 'העלאת מסמך' ובוחרים חשבונית לניתוח. אם אין לכם חשבונית זמינה לשימוש, תוכלו להוריד את החשבונית לדוגמה ולהשתמש בה.
הפלט שלכם אמור להיראות כך:
4. הורדת מסמכים לדוגמה
יש לנו כמה מסמכים לדוגמה לשימוש בשיעור ה-Lab הזה.
ניתן להוריד את קובצי ה-PDF באמצעות הקישורים הבאים. לאחר מכן מעלים אותם למכונה של Cloud Shell.
לחלופין, אפשר להוריד אותם מהקטגוריה הציבורית של Cloud Storage באמצעות gsutil
.
gsutil cp gs://cloud-samples-data/documentai/codelabs/specialized-processors/procurement_multi_document.pdf .
gsutil cp gs://cloud-samples-data/documentai/codelabs/specialized-processors/google_invoice.pdf .
5. סיווג ו פיצול המסמכים
בשלב הזה תשתמשו ב-API לעיבוד אונליין כדי לסווג ולזהות נקודות פיצול לוגיות של מסמך מרובה דפים.
תוכלו להשתמש גם ב-API לעיבוד ברצף אם אתם רוצים לשלוח מספר קבצים או אם גודל הקובץ חורג מהמספר המרבי של דפים לעיבוד אונליין. אפשר לקרוא איך לעשות זאת ב-Document AI OCR Codelab.
הקוד שמשמש לשליחת בקשת ה-API זהה לקוד של מעבד מידע כללי, מלבד מזהה המעבד.
מפצל/מסווג רכש
יוצרים קובץ בשם classification.py
ומשתמשים בקוד הבא.
מחליפים את PROCUREMENT_SPLITTER_ID
במזהה של מעבד מפצל הנכסים שיצרתם קודם. מחליפים את YOUR_PROJECT_ID
ואת YOUR_PROJECT_LOCATION
במזהה הפרויקט ב-Cloud ובמיקום מעבד המידע, בהתאמה.
classification.py
import pandas as pd
from google.cloud import documentai_v1 as documentai
def online_process(
project_id: str,
location: str,
processor_id: str,
file_path: str,
mime_type: str,
) -> documentai.Document:
"""
Processes a document using the Document AI Online Processing API.
"""
opts = {"api_endpoint": f"{location}-documentai.googleapis.com"}
# Instantiates a client
documentai_client = documentai.DocumentProcessorServiceClient(client_options=opts)
# 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
resource_name = documentai_client.processor_path(project_id, location, processor_id)
# Read the file into memory
with open(file_path, "rb") as file:
file_content = file.read()
# Load Binary Data into Document AI RawDocument Object
raw_document = documentai.RawDocument(content=file_content, mime_type=mime_type)
# Configure the process request
request = documentai.ProcessRequest(name=resource_name, raw_document=raw_document)
# Use the Document AI client to process the sample form
result = documentai_client.process_document(request=request)
return result.document
PROJECT_ID = "YOUR_PROJECT_ID"
LOCATION = "YOUR_PROJECT_LOCATION" # Format is 'us' or 'eu'
PROCESSOR_ID = "PROCUREMENT_SPLITTER_ID" # Create processor in Cloud Console
# The local file in your current working directory
FILE_PATH = "procurement_multi_document.pdf"
# Refer to https://cloud.google.com/document-ai/docs/processors-list
# for supported file types
MIME_TYPE = "application/pdf"
document = online_process(
project_id=PROJECT_ID,
location=LOCATION,
processor_id=PROCESSOR_ID,
file_path=FILE_PATH,
mime_type=MIME_TYPE,
)
print("Document processing complete.")
types = []
confidence = []
pages = []
# Each Document.entity is a classification
for entity in document.entities:
classification = entity.type_
types.append(classification)
confidence.append(f"{entity.confidence:.0%}")
# entity.page_ref contains the pages that match the classification
pages_list = []
for page_ref in entity.page_anchor.page_refs:
pages_list.append(page_ref.page)
pages.append(pages_list)
# Create a Pandas Dataframe to print the values in tabular format.
df = pd.DataFrame({"Classification": types, "Confidence": confidence, "Pages": pages})
print(df)
הפלט שלכם אמור להיראות כך:
$ python3 classification.py Document processing complete. Classification Confidence Pages 0 invoice_statement 100% [0] 1 receipt_statement 98% [1] 2 other 81% [2] 3 utility_statement 100% [3] 4 restaurant_statement 100% [4]
לתשומת ליבכם: מפצל/מסווג הרכש זיהה נכון את סוגי המסמכים בדפים 0-1 ו-3-4.
דף 2 מכיל טופס שאלון רפואי גנרי, לכן המסווג זיהה אותו נכון כ-other
.
6. חילוץ הישויות
עכשיו אפשר לחלץ מהקבצים את הישויות שעברו סכימה, כולל דירוגי סמך, מאפיינים וערכים מנורמלים.
הקוד לשליחת בקשת ה-API זהה לשלב הקודם, ואפשר לבצע אותו באמצעות בקשות אונליין או בבקשות באצווה.
אנחנו ניגש לפרטים הבאים מהישויות:
- סוג ישות
- (למשל
invoice_date
,receiver_name
,total_amount
)
- (למשל
- ערכים גולמיים
- ערכי הנתונים כפי שמוצגים בקובץ המסמך המקורי.
- ערכים מנורמלים
- ערכי הנתונים בפורמט מנורמל וסטנדרטי, אם רלוונטי.
- יכול גם לכלול העשרה מ-Enterprise Knowledge Graph
- ערכי סמך
- עד כמה "בטוח" המודל הוא שהערכים מדויקים.
חלק מסוגי הישויות, כמו line_item
, יכולים גם לכלול מאפיינים שהם ישויות בתוך ישויות כמו line_item/unit_price
ו-line_item/description
.
הדוגמה הזו מיישרת את המבנה בתוך המבנה כדי להקל על הצפייה.
כלי לניתוח חשבוניות
יוצרים קובץ בשם extraction.py
ומשתמשים בקוד הבא.
מחליפים את INVOICE_PARSER_ID
במזהה של מעבד החשבוניות שיצרתם קודם לכן ומשתמשים בקובץ google_invoice.pdf
extraction.py
import pandas as pd
from google.cloud import documentai_v1 as documentai
def online_process(
project_id: str,
location: str,
processor_id: str,
file_path: str,
mime_type: str,
) -> documentai.Document:
"""
Processes a document using the Document AI Online Processing API.
"""
opts = {"api_endpoint": f"{location}-documentai.googleapis.com"}
# Instantiates a client
documentai_client = documentai.DocumentProcessorServiceClient(client_options=opts)
# 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
resource_name = documentai_client.processor_path(project_id, location, processor_id)
# Read the file into memory
with open(file_path, "rb") as file:
file_content = file.read()
# Load Binary Data into Document AI RawDocument Object
raw_document = documentai.RawDocument(content=file_content, mime_type=mime_type)
# Configure the process request
request = documentai.ProcessRequest(name=resource_name, raw_document=raw_document)
# Use the Document AI client to process the sample form
result = documentai_client.process_document(request=request)
return result.document
PROJECT_ID = "YOUR_PROJECT_ID"
LOCATION = "YOUR_PROJECT_LOCATION" # Format is 'us' or 'eu'
PROCESSOR_ID = "INVOICE_PARSER_ID" # Create processor in Cloud Console
# The local file in your current working directory
FILE_PATH = "google_invoice.pdf"
# Refer to https://cloud.google.com/document-ai/docs/processors-list
# for supported file types
MIME_TYPE = "application/pdf"
document = online_process(
project_id=PROJECT_ID,
location=LOCATION,
processor_id=PROCESSOR_ID,
file_path=FILE_PATH,
mime_type=MIME_TYPE,
)
types = []
raw_values = []
normalized_values = []
confidence = []
# Grab each key/value pair and their corresponding confidence scores.
for entity in document.entities:
types.append(entity.type_)
raw_values.append(entity.mention_text)
normalized_values.append(entity.normalized_value.text)
confidence.append(f"{entity.confidence:.0%}")
# Get Properties (Sub-Entities) with confidence scores
for prop in entity.properties:
types.append(prop.type_)
raw_values.append(prop.mention_text)
normalized_values.append(prop.normalized_value.text)
confidence.append(f"{prop.confidence:.0%}")
# Create a Pandas Dataframe to print the values in tabular format.
df = pd.DataFrame(
{
"Type": types,
"Raw Value": raw_values,
"Normalized Value": normalized_values,
"Confidence": confidence,
}
)
print(df)
הפלט שלכם אמור להיראות כך:
$ python3 extraction.py Type Raw Value Normalized Value Confidence 0 vat $1,767.97 100% 1 vat/tax_amount $1,767.97 1767.97 USD 0% 2 invoice_date Sep 24, 2019 2019-09-24 99% 3 due_date Sep 30, 2019 2019-09-30 99% 4 total_amount 19,647.68 19647.68 97% 5 total_tax_amount $1,767.97 1767.97 USD 92% 6 net_amount 22,379.39 22379.39 91% 7 receiver_name Jane Smith, 83% 8 invoice_id 23413561D 67% 9 receiver_address 1600 Amphitheatre Pkway\nMountain View, CA 94043 66% 10 freight_amount $199.99 199.99 USD 56% 11 currency $ USD 53% 12 supplier_name John Smith 19% 13 purchase_order 23413561D 1% 14 receiver_tax_id 23413561D 0% 15 supplier_iban 23413561D 0% 16 line_item 9.99 12 12 ft HDMI cable 119.88 100% 17 line_item/unit_price 9.99 9.99 90% 18 line_item/quantity 12 12 77% 19 line_item/description 12 ft HDMI cable 39% 20 line_item/amount 119.88 119.88 92% 21 line_item 12 399.99 27" Computer Monitor 4,799.88 100% 22 line_item/quantity 12 12 80% 23 line_item/unit_price 399.99 399.99 91% 24 line_item/description 27" Computer Monitor 15% 25 line_item/amount 4,799.88 4799.88 94% 26 line_item Ergonomic Keyboard 12 59.99 719.88 100% 27 line_item/description Ergonomic Keyboard 32% 28 line_item/quantity 12 12 76% 29 line_item/unit_price 59.99 59.99 92% 30 line_item/amount 719.88 719.88 94% 31 line_item Optical mouse 12 19.99 239.88 100% 32 line_item/description Optical mouse 26% 33 line_item/quantity 12 12 78% 34 line_item/unit_price 19.99 19.99 91% 35 line_item/amount 239.88 239.88 94% 36 line_item Laptop 12 1,299.99 15,599.88 100% 37 line_item/description Laptop 83% 38 line_item/quantity 12 12 76% 39 line_item/unit_price 1,299.99 1299.99 90% 40 line_item/amount 15,599.88 15599.88 94% 41 line_item Misc processing fees 899.99 899.99 1 100% 42 line_item/description Misc processing fees 22% 43 line_item/unit_price 899.99 899.99 91% 44 line_item/amount 899.99 899.99 94% 45 line_item/quantity 1 1 63%
7. אופציונלי: אפשר לנסות מעבדים מיוחדים אחרים
השתמשת בהצלחה ב-Document AI עבור רכש כדי לסווג מסמכים ולנתח חשבונית. ב-Document AI יש תמיכה גם בפתרונות המיוחדים האחרים שמפורטים כאן:
תוכלו לבצע את אותו תהליך ולהשתמש באותו קוד כדי לטפל בכל מעבד מידע מיוחד.
אם תרצו לנסות את הפתרונות המיוחדים האחרים, תוכלו להריץ מחדש את שיעור ה-Lab עם סוגי מעבדים אחרים ומסמכים מיוחדים לדגימה.
מסמכים לדוגמה
הנה כמה מסמכים לדוגמה שאפשר להשתמש בהם כדי להתנסות במעבדים מומחים אחרים.
פתרון | סוג המעבד | מסמך |
זהויות | ||
הלוואות | ||
הלוואות | ||
חוזים |
במסמכי התיעוד תוכלו למצוא מסמכים נוספים לדוגמה ופלט של מעבדי המידע.
8. מזל טוב
כל הכבוד! השתמשת בהצלחה ב-Document AI כדי לסווג ולחלץ נתונים ממסמכים מיוחדים. מומלץ להתנסות עם סוגים מיוחדים אחרים של מסמכים.
ניקוי
כדי להימנע מצבירת חיובים בחשבון Google Cloud על המשאבים שבהם השתמשתם במדריך הזה:
- במסוף Cloud, עוברים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט הרלוונטי ולוחצים על 'מחיקה'.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
מידע נוסף
ב-Codelabs הבאים תוכלו להמשיך ללמוד על Document AI.
- ניהול מעבדים של Document AI באמצעות Python
- Document AI: אדם במרכז
- Document AI Workbench: אימון
- Document AI Workbench: מעבדים בהתאמה אישית
מקורות מידע
- עתיד המסמכים – פלייליסט ב-YouTube
- מסמכי תיעוד מבוססי-AI של מסמכים
- ספריית הלקוח של Document AI Python
- דוגמאות AI למסמכים
רישיון
היצירה הזו בשימוש ברישיון Creative Commons Attribution 2.0 גנרי.