איתור טבלה וחילוץ מידע באמצעות למידה עמוקה

צומת המקור: 1325422

מבוא לחילוץ טבלאות

כמות הנתונים שנאספים גדלה באופן דרסטי מיום ליום עם מספר הולך וגדל של יישומים, תוכנות ופלטפורמות מקוונות.

כדי לטפל/לגשת בצורה פרודוקטיבית לנתונים האדירים האלה, יש צורך לפתח כלי חילוץ מידע יקרי ערך.

אחד מתחומי המשנה שדורשים תשומת לב בשדה מיצוי המידע הוא חילוץ של טבלאות מתמונות או זיהוי נתונים טבלאיים מטפסים, קובצי PDF ומסמכים.

שאיבת שולחנות היא המשימה של זיהוי ופירוק מידע טבלה במסמך.

OCR טבלה - ננונטים המחלצים נתוני טבלה מתמונה!
OCR טבלה - ננונטים המחלצים נתוני טבלה מתמונה!

תאר לעצמך שיש לך הרבה מסמכים עם נתונים טבלאיים שאתה צריך לחלץ לעיבוד נוסף. באופן קונבנציונלי, אתה יכול להעתיק אותם ידנית (על נייר) או לטעון אותם בגיליונות אקסל.

עם זאת, עם תוכנת OCR טבלאות, אתה יכול לזהות טבלאות אוטומטית ולחלץ את כל הנתונים הטבלאיים ממסמכים במכה אחת. זה חוסך הרבה זמן ועבודה מחדש.

במאמר זה, תחילה נראה כיצד Nanonets יכולה לחלץ טבלאות אוטומטית מתמונות או מסמכים. לאחר מכן נסקור כמה טכניקות DL פופולריות לזיהוי וחילוץ טבלאות במסמכים.


רוצים לחלץ נתונים טבלאיים מחשבוניות, קבלות או מכל סוג אחר של מסמך? בדוק את Nanonets מחלץ טבלאות PDF כדי לחלץ נתונים טבלאיים. קבעו הדגמה למידע נוסף על אוטומציה מיצוי שולחן.


תוכן העניינים

חלץ טבלה מתמונה עם OCR של טבלת Nanonets

  • הרשם לחשבון Nanonets בחינם

    • העלה תמונות/קבצים לדגם Nanonets Table OCR
    • Nanonets מזהה ומחלץ באופן אוטומטי את כל הנתונים הטבלאיים
    • ערוך וסקור את הנתונים (אם נדרש)
    • ייצא את הנתונים המעובדים כ-Excel, CSV או JSON

חלץ טבלה מתמונה עם ננונטים

רוצה לגרד נתונים מ- PDF מסמכים, להמיר טבלת PDF ל- Excel or חילוץ טבלה אוטומטי? תגלה איך ננונטים מגרד PDF or מנתח PDF יכול להניע את העסק שלך להיות פרודוקטיבי יותר.


Nanonets Table OCR API

OCR טבלה עם ננונטים
OCR טבלה עם ננונטים

השמיים ממשק ה- API של Nanonets OCR מאפשר לך לבנות דגמי OCR בקלות. אינך צריך לדאוג מעיבוד מוקדם של התמונות שלך או לדאוג מתבניות תואמות או לבנות מנועים מבוססי כללים כדי להגדיל את הדיוק של דגם ה- OCR שלך.

אתה יכול להעלות את הנתונים שלך, להוסיף להם הערות, להגדיר את המודל להתאמן ולהמתין לקבלת תחזיות דרך ממשק משתמש מבוסס דפדפן מבלי לכתוב שורת קוד אחת, לדאוג לגבי GPUs או למצוא את הארכיטקטורות הנכונות לזיהוי הטבלה שלך באמצעות מודלים של למידה עמוקה.

אתה יכול גם לרכוש את תגובות ה-JSON של כל חיזוי כדי לשלב אותו עם המערכות שלך ולבנות אפליקציות המופעלות על ידי למידה חישובית הבנויות על אלגוריתמים מתקדמים ותשתית חזקה.

https://nanonets.com/documentation/


האם העסק שלך עוסק בזיהוי נתונים או טקסט במסמכים דיגיטליים, קובצי PDF או תמונות? האם תהיתם כיצד לחלץ נתונים טבלאיים, לחלץ טקסט מתמונות , לחלץ נתונים מ- PDF or לחלץ טקסט מ- PDF בצורה מדויקת ויעילה?


מי ימצא חילוץ טבלה שימושי

כפי שנדון בסעיף הקודם, טבלאות משמשות לעתים קרובות כדי לייצג נתונים בפורמט נקי. אנחנו יכולים לראות אותם לעתים קרובות כל כך בכמה תחומים, מארגון העבודה שלנו על ידי מבנה נתונים על פני טבלאות ועד לאחסון נכסי ענק של חברות. יש הרבה ארגונים שנאלצים להתמודד עם מיליוני טבלאות מדי יום. כדי להקל על משימות עמלניות כאלה של ביצוע הכל באופן ידני, עלינו לפנות לטכניקות מהירות יותר. בואו נדון בכמה מקרי שימוש שבהם חילוץ טבלאות יכול להיות חיוני:

מקור: פטריק תומאסו, לא מפשלים

מקרים לשימוש אישי

השמיים מיצוי שולחן התהליך יכול להיות מועיל גם עבור מקרי שימוש אישי קטנים. לפעמים אנחנו לוכדים מסמכים בטלפון הנייד ובהמשך מעתיקים אותם למחשבים שלנו. במקום להשתמש בתהליך זה אנו יכולים ללכוד ישירות את המסמכים ולשמור אותם כפורמטים הניתנים לעריכה בתבניות המותאמות אישית שלנו. להלן מספר מקרי שימוש על האופן שבו נוכל להתאים חילוץ שולחן לשגרה האישית שלנו -

סריקת מסמכים לטלפון: לעתים קרובות אנו מצלמים תמונות של טבלאות חשובות בטלפון ושומרים אותן, אך בעזרת טכניקת מיצוי השולחן, אנו יכולים ללכוד את תמונות הטבלאות ולאחסן אותן ישירות בתבנית טבלאית, לגליונות אקסל או גוגל. בכך איננו צריכים לחפש תמונות או להעתיק את תוכן הטבלה לקבצים חדשים, במקום זאת אנו יכולים להשתמש ישירות בטבלאות המיובאות ולהתחיל לעבוד על המידע שחולץ.

מסמכים ל- HTML: בדפי אינטרנט אנו מוצאים המון מידע המוצג באמצעות טבלאות. הם עוזרים לנו בהשוואה לנתונים ונותנים לנו הערה מהירה על המספרים בצורה מסודרת. על ידי שימוש בתהליך חילוץ הטבלה, אנו יכולים לסרוק מסמכי PDF או תמונות JPG / PNG, ולהעמיס את המידע ישירות לתבנית טבלה מותאמת אישית בעיצוב עצמי. אנו יכולים להמשיך לכתוב סקריפטים להוסיף טבלאות נוספות בהתבסס על הטבלאות הקיימות, ועל ידי כך דיגיטלי של המידע. זה עוזר לנו בעריכת התוכן ומהיר את תהליך האחסון.


מקרי שימוש תעשייתי

יש כמה תעשיות ברחבי העולם הפועלות רבות על ניירת ותיעוד, במיוחד בענפי הבנקאות והביטוח. מאחסון פרטי לקוחות וכלה בצורכי הלקוחות, שולחנות נמצאים בשימוש נרחב. מידע זה שוב מועבר כמסמך (עותק קשיח) לסניפים שונים לצורך אישורים, שלעתים תקשורת שגויה עלולה להוביל לשגיאות תוך אחיזת מידע מהטבלאות. במקום זאת, השימוש באוטומציה כאן הופך את חיינו להרבה יותר קלים. לאחר שהנתונים הראשוניים נלכדים ואושרים, נוכל לסרוק ישירות את המסמכים לטבלאות ולעבוד על הנתונים הדיגיטליים. לא כל שכן צמצום צריכת הזמן והתקלות, אנו יכולים להודיע ​​ללקוחות על הזמן והמיקום בו מעובד המידע. לפיכך הדבר מבטיח אמינות של נתונים, ומפשט את הדרך שלנו להתמודד עם פעולות. בואו נסתכל על מקרי השימוש האפשריים האחרים:

בקרת איכות: בקרת איכות היא אחד משירותי הליבה המספקים תעשיות מובילות. לרוב זה נעשה באופן אישי ולמען בעלי העניין. כחלק מכך, ישנם המון טופסי משוב שנאספים מהצרכנים כדי להפיק משוב על השירות הניתן. בענפי התעשייה הם משתמשים בטבלאות כדי לרשום רשימות רשימות ופתקים יומיות כדי לראות כיצד פועלים קווי הייצור. ניתן לתעד את כל אלה במקום אחד באמצעות חילוץ טבלה בקלות.

מסלול נכסים: בענפי התעשייה אנשים משתמשים בטבלאות מקודדות בכדי לעקוב אחר ישויות מיוצרות כמו פלדה, ברזל, פלסטיק וכו '. כל פריט מיוצר מסומן במספר ייחודי בו הם משתמשים בטבלאות כדי לעקוב אחר פריטים המיוצרים ונמסרים מדי יום. אוטומציה יכולה לעזור לחסוך זמן רב ונכסים מבחינת מיקומים שגויים או חוסר עקביות בנתונים.


מקרים לשימוש עסקי

יש כמה תעשיות עסקיות הפועלות בגיליונות Excel ובטפסים לא מקוונים. אבל בנקודת זמן מסוימת, קשה לחפש את הגליונות והטפסים האלה. אם אנו נכנסים ידנית לטבלאות אלה זה לוקח זמן רב והסיכוי לנתונים לא נכונים יהיה גבוה. מכאן שחילוץ טבלאות הוא אלטרנטיבה טובה יותר לפיתרון מקרים של שימוש עסקי מכיוון שכך להלן מעטים.

חשבונית אוטומציה: יש הרבה תעשיות בקנה מידה קטן ובקנה מידה גדול אשר חשבוניות עדיין נוצרים בפורמטים טבלאיים. אלה אינם מספקים דוחות מס מאובטחים כהלכה. כדי להתגבר על מכשולים כאלה, אנו יכולים להשתמש בחילוץ טבלה כדי להמיר את כולם חשבוניות לפורמט הניתן לעריכה ובכך לשדרג אותם לגרסה חדשה יותר.

אוטומציה של טפסים: טפסים מקוונים משבשים את השיטה המנוסה והאמיתית בכך שהם עוזרים לעסקים לאסוף את המידע שהם צריכים ובמקביל מחברים אותו לפלטפורמות תוכנה אחרות המובנות בזרימת העבודה שלהם. מלבד הפחתת הצורך בהזנת נתונים ידנית (עם הזנת נתונים אוטומטית) והודעות דוא"ל עוקבות, חילוץ טבלה יכול לחסל את עלות ההדפסה, הדיוור, האחסון, הארגון וההשמדה של חלופות הנייר המסורתיות.


האם יש לך בעיה עם OCR? רוצה לעשות דיגיטציה חשבוניות, קובצי PDF או לוחיות מספר? ראש אל ננונטים ובנו דגמי OCR בחינם!


למידה עמוקה בפעולה

למידה עמוקה היא חלק מהמשפחה הרחבה יותר של שיטות למידת מכונות המבוססות על רשתות עצביות מלאכותיות.

רשת עצבית היא מסגרת המכירה בקשרים הבסיסיים בנתונים הנתונים באמצעות תהליך שמחקה את אופן פעולתו של המוח האנושי. יש להם שכבות מלאכותיות שונות שדרכם עוברים הנתונים, שם הם לומדים על תכונות. ישנן ארכיטקטורות שונות כמו NNs Convolution, NNs חוזרים, קודודים אוטומטיים, NNs Generative Adversarial לעיבוד נתונים מסוגים שונים. אלה מורכבים ועם זאת מתארים ביצועים גבוהים כדי להתמודד עם בעיות בזמן אמת. הבה נבחן את המחקר שנעשה בתחום מיצוי הטבלה באמצעות רשתות עצביות, ובוא נסקור אותם בקצרה.


TableNet

נייר: TableNet: מודל למידה עמוקה לגילוי טבלאות מקצה לקצה וחילוץ נתונים טבלאיים מתמונות סרוק של מסמכים

מבוא: TableNet היא ארכיטקטורה מודרנית למידה עמוקה שהוצעה על ידי צוות משנת המחקר TCS בשנת 2019. המוטיבציה העיקרית הייתה להוציא מידע משולחנות סרוקים באמצעות טלפונים ניידים או מצלמות.

הם הציעו פיתרון הכולל איתור מדויק של האזור הטבלאי בתוך תמונה ובהמשך גילוי ומיצוי של מידע מהשורות והעמודות של הטבלה שזוהתה.

מערך נתונים: מערך הנתונים ששימש היה מרמוט. יש לו 2000 עמודים בפורמט PDF שנאספו עם אמיתות הקרקע המקבילות. זה כולל גם דפים סיניים. קישור - http://www.icst.pku.edu.cn/cpdp/sjzy/index.htm

ארכיטקטורה: הארכיטקטורה מבוססת על Long et al., מודל מקודד-מפענח לפילוח סמנטי. אותה רשת מקודד/מפענח משמשת כארכיטקטורת FCN לחילוץ טבלה. התמונות מעובדות מראש ומשונות באמצעות Tesseract OCR.

המודל נגזר בשני שלבים על ידי הכנת הקלט לטכניקות למידה עמוקות. בשלב הראשון הם השתמשו במשקולות של רשת VGG-19 שהייתה מראש. הם החליפו את השכבות המחוברות לחלוטין של רשת VGG המשומשת בשכבות מעורבות 1 × 1. אחרי כל השכבות המפותלות אחריהן מופעלת ReLU ושכבת נשירה של הסתברות 0.8. הם מכנים את השלב השני כרשת המפוענחת המורכבת משני סניפים. זאת על פי האינטואיציה שאזור העמודות הוא תת-משנה של אזור הטבלה. לפיכך, רשת קידוד יחיד יכולה לסנן את האזורים הפעילים ברמת דיוק טובה יותר באמצעות תכונות של אזורי הטבלה והאזורים. הפלט מהרשת הראשונה מופץ לשני הסניפים. בסניף הראשון מיושמות שתי פעולות התפתלות ומפת התכונות הסופית משודרגת בכדי לעמוד בממדי התמונה המקוריים. בסניף האחר לגילוי עמודות, קיימת שכבת התפתחות נוספת עם פונקציית הפעלת ReLU ושכבת נשירה עם אותה הסתברות נשירה כאמור. דגימות של מפות התכונות נעשות באמצעות סיבובים מרוכזים באופן חלקי לאחר שכבת התפתחות (1 × 1). להלן תמונה של הארכיטקטורה:

הארכיטקטורה של TableNet

יציאות: לאחר עיבוד המסמכים באמצעות המודל, נוצרות מסכות הטבלאות והעמודות. מסכות אלה משמשות לסינון הטבלה ואזורי העמודות שלה מהתמונה. כעת באמצעות OCR Tesseract, המידע מופק מהאזורים המפולחים. להלן תמונה המציגה את המסכות הנוצרות ומאוחר יותר חולצות מהטבלאות:

הם גם הציעו את אותו הדגם שמותאם היטב עם ICDAR אשר ביצע ביצועים טובים יותר מהדגם המקורי. זיכרון, דיוק וציון F1 של הדגם המכוון דק הם 0.9628, 0.9697, 0.9662 בהתאמה. הדגם המקורי כולל את הערכים המוקלטים של 0.9621, 0.9547, 0.9583 באותו סדר. בואו נצלול לארכיטקטורה אחת נוספת.


DeepDeSRT

נייר: DeepDeSRT: למידה עמוקה לגילוי והכרת מבנים של טבלאות בתמונות מסמך

מבוא: DeepDeSRT היא מסגרת רשת עצבית המשמשת לאיתור והבנת הטבלאות במסמכים או בתמונות. יש לו שני פתרונות כאמור בכותרת:

  1. הוא מציג פיתרון מעמיק מבוסס למידה לגילוי טבלאות בתמונות של מסמכים.
  2. הוא מציע גישה חדשה מבוססת למידה עמוקה לצורך זיהוי מבנה טבלה, כלומר זיהוי שורות, עמודות ומיקומי תאים בטבלאות שזוהו.

המודל המוצע מבוסס לחלוטין על נתונים, הוא אינו דורש היוריסטיקות או מטא נתונים של המסמכים או התמונות. יתרון עיקרי אחד ביחס להכשרה הוא שהם לא השתמשו במערכי נתונים גדולים של אימונים, במקום זאת הם השתמשו במושג למידה העברה והתאמת תחום הן לגילוי טבלאות והן לזיהוי מבני הטבלה.

מערך נתונים: מערך הנתונים בו נעשה שימוש הוא מערך נתונים של תחרות טבלה של ICDAR 2013 הכולל 67 מסמכים הכוללים 238 עמודים בסך הכל.

ארכיטקטורה:

  • איתור טבלה הדגם המוצע השתמש ב- Fast RCNN כמסגרת הבסיסית לגילוי הטבלאות. האדריכלות מחולקת לשני חלקים שונים. בחלק הראשון הם יצרו הצעות אזור המבוססות על תמונת הקלט על ידי מה שמכונה רשת הצעות אזור (RPN). בחלק השני, הם סיווגו את האזורים באמצעות Fast-RCNN. כדי לתמוך בארכיטקטורה זו הם השתמשו ZFNet ומשקולות VGG-16.
  • הכרת מבנה לאחר שהתגלה טבלה בהצלחה ומיקומה ידוע למערכת, האתגר הבא בהבנת תוכנו הוא לזהות ולאתר את השורות והעמודות המרכיבות את המבנה הפיזי של הטבלה. מכאן שהם השתמשו ברשת מחוברת לחלוטין עם משקולות VGG-16 שמוציאה מידע מהשורות והעמודות. להלן התפוקות של DeepDeSRT:

יציאות:

תפוקות של איתור טבלה
תפוקות הכרת מבנה [6]

תוצאות ההערכה מגלות כי DeepDeSRT עולה על ביצועים טובים יותר של שיטות עדכניות לגילוי טבלה וזיהוי מבנים ומשיג מדדי F1 של 96.77% ו -91.44% לגילוי טבלה וזיהוי מבנים, בהתאמה עד 2015.


גרף רשתות עצביות

נייר: מחשבה מחדש של הכרת טבלאות באמצעות רשתות עצביות גרפיות

מבוא: במחקר זה הציעו המחברים ממעבדת הלמידה העמוקה, המרכז הלאומי לבינה מלאכותית (NCAI) רשתות עצביות גרפיות לחילוץ מידע מהטבלאות. הם טענו שרשתות גרפים הן בחירה טבעית יותר לבעיות אלה ובדקו עוד שתי רשתות עצביות גרפיות מבוססות צבע.

מודל זה המוצע משלב את היתרונות של שתי רשתות עצב מפותלות להוצאת תכונות חזותיות ורשתות גרפים להתמודדות עם מבנה הבעיה.

מערך נתונים: המחברים הציעו מערך נתונים גדול חדש שנוצר באופן סינטטי של 0.5 מיליון טבלאות המחולק לארבע קטגוריות.

  1. תמונות הן תמונות רגילות ללא התמזגות ועם קווי פסיקה
  2. לתמונות סוגי גבול שונים כולל היעדר מדי פעם של קווי שליטה
  3. מציג מיזוג תאים ועמודות
  4. המצלמה צילמה תמונות עם התמורה פרספקטיבית ליניארית

ארכיטקטורה: הם השתמשו ברשת מפותלת רדודה המייצרת את התכונות המתפתלות בהתאמה. אם הממדים המרחביים של תכונות הפלט אינם זהים לתמונת הקלט, הם אוספים מיקומים המוגדלים באופן ליניארי בהתאם ליחס שבין ממדי הקלט לפלט ומשלחים אותם לרשת אינטראקציה שיש בה שתי רשתות גרף המכונות DGCNN ו- GravNet. הפרמטרים של רשת הגרפים זהים ל- CNN המקורי. בסופו של דבר הם השתמשו בדגימה של צמד זמן ריצה כדי לסווג את התוכן שחולץ אשר השתמש באופן פנימי באלגוריתם מבוסס מונטה קרלו. להלן התפוקות:

יציאות:

תפוקות שנוצרו על ידי רשתות עצביות גרפיות

להלן מספרי הדיוק המופיעים בטבלה המופקים על ידי הרשתות בארבע קטגוריות של הרשת כמוצגות ב מערך נתונים סעיף:


CGANs ואלגוריתמים גנטיים

נייר: חילוץ טבלאות ממסמכים תוך שימוש ברשתות אסטרטגיות שיווניות ויוצרים אלגוריות גנטיות

מבוא: במחקר זה, החוקרים השתמשו בגישה מלמעלה למטה במקום להשתמש בגישה מלמטה למעלה (שילוב קווים בתאים, בשורות או בעמודות).

בשיטה זו, באמצעות רשת אדברסרית גנרטיבית, הם מיפו את תמונת הטבלה לצורת טבלה 'שלד' סטנדרטית. טבלת השלדים הזו מציינת את גבולות השורה והעמודה המשוערים ללא תוכן הטבלה. בשלב הבא, הם מתאימים את הביצועים של מבני טבלה סמויות של מועמדים למבנה השלד באמצעות מידת מרחק המותאמת על ידי אלגוריתם גנטי.

מערך נתונים: המחברים השתמשו במערך הנתונים שלהם עם 4000 טבלאות.

ארכיטקטורה: המודל המוצע מורכב משני חלקים. בחלק הראשון, תמונות הקלט מופשטות לטבלאות שלד תוך שימוש ברשת עצבית גנראלית-תנאי. ל- GAN יש שוב שתי רשתות, הגנרטור שמייצר דוגמאות אקראיות ומפלה שמגלה אם התמונות שנוצרו מזויפות או מקוריות. הגנרטור G הוא רשת מפענח מקודדים בה תמונת קלט מועברת בסדרה של שכבות מדגימות באופן הדרגתי עד לשכבת צוואר בקבוק בה התהליך מתהפך. כדי להעביר מידע מספיק לשכבות הפענוח, משתמשים בארכיטקטורת U-Net עם חיבורי דילוג ומתווסף חיבור לדלג בין שכבות i ו- n - i באמצעות שרשור, כאשר n הוא המספר הכולל של שכבות, ואני המספר של השכבה במקודד. ארכיטקטורה PatchGAN משמשת להפללה D. זה מעניש את מבנה תמונת הפלט בסדר גודל של טלאים. אלה מייצרים את הפלט כשולחן שלד.

בחלק השני הם ממטבים את ההתאמה של מבני נתונים סמויים של מועמדים לתמונת השלד שנוצרה בעזרת מדד של המרחק בין כל מועמד לשלד. כך מחלצים את הטקסט שבתמונות. להלן תמונה המתארת ​​את הארכיטקטורה:

סכמטי כללי של הגישה

תְפוּקָה: מבני הטבלה המשוערים מוערכים על ידי השוואה בין - מספר שורה ועמודה, מיקום פינתי שמאלי עליון, גובהי שורה ורוחב העמודה

האלגוריתם הגנטי נתן דיוק של 95.5% ברמת השורה ודיוק של 96.7% תוך חילוץ מידע מהטבלאות.


צריך לבצע דיגיטציה של מסמכים, קבלות or חשבוניות אבל עצלן מכדי לקודד? ראש אל ננונטים ובנו דגמי OCR בחינם!


[קוד] גישות מסורתיות

בחלק זה נלמד את התהליך כיצד לחלץ מידע מטבלאות באמצעות Deep Learning ו- OpenCV. אתה יכול לחשוב על ההסבר הזה כמבוא, עם זאת, בניית מודלים חדישים תצטרך ניסיון רב ותרגול. זה יעזור לכם להבין את היסודות של האופן בו אנו יכולים להכשיר מחשבים עם גישות ואלגוריתמים שונים ואפשריים.

כדי להבין את הבעיה בצורה מדויקת יותר, אנו מגדירים כמה מונחים בסיסיים שישמשו לאורך המאמר:

  • טקסט: מכיל מחרוזת וחמש תכונות (למעלה, שמאל, רוחב, גובה, גופן)
  • קו: מכיל אובייקטים של טקסט שמניחים שהם נמצאים באותה שורה בקובץ המקורי
  • שורה בודדת: אובייקט שורה עם אובייקט טקסט אחד בלבד.
  • רב קו: אובייקט שורה עם יותר מאובייקט טקסט אחד.
  • רב קו לחסום: קבוצה של אובייקטים רב-קויים רציפים.
  • שורה: בלוקים אופקיים בטבלה
  • טור: בלוקים אנכיים בטבלה
  • תא: הצומת של שורה ועמודה
  • ריפוד תא: הריפוד הפנימי או החלל בתוך התא.

איתור טבלה עם OpenCV

אנו נשתמש בטכניקות ראייה ממוחשבות מסורתיות כדי לחלץ מידע מהטבלאות הסרוקות. הנה הצינור שלנו; אנו לוכדים בתחילה את הנתונים (הטבלאות מהמקום שאנחנו צריכים לחלץ את המידע) באמצעות מצלמות רגילות, ואז בעזרת ראיית מחשב, ננסה למצוא את הגבולות, הקצוות והתאים. אנו נשתמש בפילטרים וקווי מתאר שונים, ונדגיש את תכונות הליבה של הטבלאות.

אנו נצטרך תמונה של טבלה. אנו יכולים לתפוס זאת בטלפון או להשתמש בכל תמונה קיימת. להלן קטע הקוד,

file = r’table.png’
table_image_contour = cv2.imread(file, 0)
table_image = cv2.imread(file)

כאן, טענו את אותה תמונת תמונה שני משתנים מאז שנשתמש ב- שולחן_הדמיה_קונטור כשמצייר את קווי המתאר שזוהינו על התמונה הטעונה. להלן תמונת הטבלה בה אנו משתמשים בתוכנית שלנו:

תמונה של השולחן

נשתמש בטכניקה שנקראת סף תמונה הפוכה מה שמשפר את הנתונים הקיימים בתמונה הנתונה.

ret, thresh_value = cv2.threshold( table_image_contour, 180, 255, cv2.THRESH_BINARY_INV)

צעד חשוב נוסף לעיבוד הכנה הוא התרחבות תמונה. דילציה היא פעולת מתמטיקה פשוטה המיושמת על תמונות בינאריות (שחור לבן) המגדילה בהדרגה את גבולות האזורים של פיקסלים מקדימה (כלומר בדרך כלל פיקסלים לבנים).

kernel = np.ones((5,5),np.uint8)
dilated_value = cv2.dilate(thresh_value,kernel,iterations = 1)

ב- OpenCV אנו משתמשים בשיטה, למצוא קווי מתאר להשיג את קווי המתאר בתמונה הנוכחית. שיטה זו נוקטת בשלושה טיעונים, הראשון הוא התמונה המורחבת (התמונה המשמשת לייצור התמונה המורחבת היא table_image_contour - שיטת findContours תומכת רק בתמונות בינאריות), השנייה היא cv2.RETR_TREE אשר אומר לנו להשתמש במצב אחזור קווי המתאר, השלישי הוא  cv2.CHAIN_APPROX_SIMPLE וזה מצב קירוב קווי המתאר. ה למצוא קווי מתאר פורק שני ערכים, ולכן נוסיף משתנה אחד נוסף בשם היררכיה. כאשר התמונות מקננות, קווי המתאר גורמים לתלות הדדית. כדי לייצג קשרים כאלה משתמשים בהיררכיה.

contours, hierarchy = cv2.findContours( dilated_value, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

קווי המתאר מסמנים היכן בדיוק הנתונים נמצאים בתמונה. כעת, אנו חוזרים על רשימת קווי המתאר שחישבנו בשלב הקודם ומחושבים את הקואורדינטות של התיבות המלבניות כפי שנצפו בתמונה המקורית בשיטה,  cv2.boundingRect. באיטרציה האחרונה, הנחנו את התיבות האלה לתמונת התמונה המקורית_טבלה באמצעות השיטה, cv2.rectangle ().

for cnt in contours: x, y, w, h = cv2.boundingRect(cnt) # bounding the images if y < 50: table_image = cv2.rectangle(table_image, (x, y), (x + w, y + h), (0, 0, 255), 1) 

זה הצעד האחרון שלנו. כאן אנו משתמשים בשיטה בשם חלון להציג את הטבלה שלנו עם התוכן המוצא וקווי המתאר המשובצים עליו. להלן קטע הקוד:

plt.imshow(table_image)
plt.show()
cv2.namedWindow('detecttable', cv2.WINDOW_NORMAL)

יציאות

שנה את הערך של y ל- 300 בקטע הקוד שלמעלה, זה יהיה הפלט שלך:

לאחר שמוצאים את הטבלאות, תוכלו להריץ כל יבול קווי מתאר באמצעות מנוע OCR tesseract, שאת הדרכה ניתן למצוא. כאן. ברגע שיש לנו תיבות של כל טקסט, נוכל לאחוז אותן על סמך קואורדינטות ה- x וה- y שלהן כדי לגזור לאיזו שורה ועמודה מתאימות הם שייכים.

חוץ מזה, ישנה אפשרות להשתמש ב-PDFMiner כדי להפוך את מסמכי ה-PDF שלך לקובצי HTML שנוכל לנתח באמצעות ביטויים רגולריים כדי לקבל סוף סוף את הטבלאות שלנו. הנה איך אתה יכול לעשות את זה.


ניתוח PDFMiner ו- Regex

כדי לחלץ מידע ממסמכים קטנים יותר, זה לוקח זמן להגדיר מודלים של למידה עמוקה או לכתוב אלגוריתמים של ראייה ממוחשבת. במקום זאת, אנו יכולים להשתמש בביטויים רגולריים ב- Python כדי לחלץ טקסט ממסמכי PDF. כמו כן, זכור שהטכניקה הזו לא עובדת עבור תמונות. אנחנו יכולים להשתמש בזה רק כדי לחלץ מידע מקובצי HTML או מסמכי PDF. הסיבה לכך היא שכאשר אתה משתמש בביטוי רגולרי, תצטרך להתאים את התוכן למקור ולחלץ מידע. עם תמונות, לא תוכל להתאים את הטקסט, והביטויים הרגולריים ייכשלו. כעת נעבוד עם מסמך PDF פשוט ונחלץ מידע מהטבלאות שבו. להלן התמונה:

בשלב הראשון, אנו טוענים את ה- PDF לתוכנית שלנו. ברגע שזה נעשה, אנו ממירים את ה- PDF ל- HTML כך שנוכל להשתמש ישירות בביטויים רגילים ובכך להוציא תוכן מהטבלאות. לשם כך, המודול בו אנו משתמשים הוא pdfminer. זה עוזר לקרוא תוכן מ- PDF ולהמיר אותו לקובץ HTML.

להלן קטע הקוד:

from pdfminer.pdfinterp import PDFResourceManager from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.converter import HTMLConverter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from cStringIO import StringIO
import re def convert_pdf_to_html(path): rsrcmgr = PDFResourceManager() retstr = StringIO() codec = 'utf-8' laparams = LAParams() device = HTMLConverter(rsrcmgr, retstr, codec=codec, laparams=laparams) fp = file(path, 'rb') interpreter = PDFPageInterpreter(rsrcmgr, device) password = "" maxpages = 0 #is for all caching = True pagenos=set() for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages,password=password,caching=caching, check_extractable=True): interpreter.process_page(page) fp.close() device.close() str = retstr.getvalue() retstr.close() return str

זיכויי קוד: זברוס

ייבאנו הרבה מודולים כולל ספרי ביטוי רגילים וספרי PDF. בשיטה להמיר_pdf_to_html, אנו שולחים את הנתיב של קובץ ה- PDF שצריך להמיר לקובץ HTML. הפלט של השיטה יהיה מחרוזת HTML כמוצג להלן:

'<span style="font-family: XZVLBD+GaramondPremrPro-LtDisp; font-size:12px">Changing Echoesn<br>7632 Pool Station Roadn<br>Angels Camp, CA 95222n<br>(209) 785-3667n<br>Intake: (800) 633-7066n<br>SA </span><span style="font-family: GDBVNW+Wingdings-Regular; font-size:11px">s</span><span style="font-family: UQGGBU+GaramondPremrPro-LtDisp; font-size:12px"> TX DT BU </span><span style="font-family: GDBVNW+Wingdings-Regular; font-size:11px">s</span><span style="font-family: UQGGBU+GaramondPremrPro-LtDisp; font-size:12px"> RS RL OP PH </span><span style="font-family: GDBVNW+Wingdings-Regular; font-size:11px">s</span><span style="font-family: UQGGBU+GaramondPremrPro-LtDisp; font-size:12px"> CO CJ n<br></span><span style="font-family: GDBVNW+Wingdings-Regular; font-size:11px">s</span><span style="font-family: UQGGBU+GaramondPremrPro-LtDisp; font-size:12px"> SF PI </span><span style="font-family: GDBVNW+Wingdings-Regular; font-size:11px">s</span><span style="font-family: UQGGBU+GaramondPremrPro-LtDisp; font-size:12px"> AH SPn<br></span></div>' 

ביטוי רגיל הוא אחת מטכניקות התכנות הכי מסובכות ומגניבות ביותר המשמשות להתאמת דפוסים. אלה נמצאים בשימוש נרחב בכמה יישומים, נניח, לצורך עיצוב קוד, גרידת רשת ואימות. לפני שנתחיל לחלץ תוכן מטבלאות HTML שלנו, בואו ונלמד במהירות כמה דברים על ביטויים רגילים.

ספריה זו מספקת שיטות מובנות שונות להתאמה ולחיפוש אחר דפוסים. להלן כמה:

import re # Match the pattern in the string
re.match(pattern, string) # Search for a pattern in a string
re.search(pattern, string) # Finds all the pattern in a string
re.findall(pattern, string) # Splits string based on the occurrence of pattern
re.split(pattern, string, [maxsplit=0] # Search for the pattern and replace it with the given string
re.sub(pattern, replace, string)

דמויות / ביטויים שאתה רואה בדרך כלל בביטויים רגילים כוללים:

  • [AZ] - כל אות גדולה
  • d - ספרה
  • w - תו מילה (אותיות, ספרות וקווים תחתונים)
  • s - רווח לבן (רווחים, טאבים ורווחים לבנים)

כעת כדי לגלות דפוס מסוים ב- HTML, אנו משתמשים בביטויים רגילים ואז כותבים דפוסים בהתאם. אנו מחלקים לראשונה את הנתונים כך שגושי הכתובות מופרדים לבלוקים נפרדים בהתאם לשם התוכנית (ANGELS CAMP, APPLE VALLEY וכו '):

pattern = '(?<=<span style="font-family: XZVLBD+GaramondPremrPro-LtDisp; font-size:12px">)(.*?)(?=<br></span></div>)' for programinfo in re.finditer(pattern, biginputstring, re.DOTALL): do looping stuff…

בהמשך, אנו מוצאים את שם התוכנית, העיר, המדינה והמיקוד שתמיד עוקבים אחר אותה דפוס (טקסט, פסיק, אותיות גדולות דו ספרתיות, 5 מספרים (או 5 מספרים מקפים ארבעה מספרים) - אלה קיימים בקובץ PDF אשר שקלנו כקלט). בדוק את קטע הקוד הבא:

# To identify the program name
programname = re.search('^(?!<br>).*(?=\n)', programinfo.group(0))
# since some programs have odd characters in the name we need to escape
programname = re.escape(programname) citystatezip =re.search('(?<=>)([a-zA-Zs]+, [a-zA-Zs]{2} d{5,10})(?=\n)', programinfo.group(0))
mainphone =re.search('(?<=<br>)(d{3}) d{3}-d{4}x{0,1}d{0,}(?=\n)', programinfo.group(0))
altphones = re.findall('(?<=<br>)[a-zA-Zs]+: (d{3}) d{3}-d{4}x{0,1}d{0,}(?=\n)(?=\n)', programinfo.group(0)) 

זו דוגמה פשוטה המסבירה כיצד אנו מחלצים מידע מקבצי PDF באמצעות ביטוי רגיל. לאחר חילוץ כל המידע הנדרש, אנו טוענים נתונים אלה לקובץ CSV.

def createDirectory(instring, outpath, split_program_pattern): i = 1 with open(outpath, 'wb') as csvfile: filewriter = csv.writer(csvfile, delimiter=',' , quotechar='"', quoting=csv.QUOTE_MINIMAL) # write the header row filewriter.writerow(['programname', 'address', 'addressxtra1', 'addressxtra2', 'city', 'state', 'zip', 'phone', 'altphone', 'codes']) # cycle through the programs for programinfo in re.finditer(split_program_pattern, instring, re.DOTALL): print i i=i+1 # pull out the pieces programname = getresult(re.search('^(?!<br>).*(?=\n)', programinfo.group(0))) programname = re.escape(programname) # some facilities have odd characters in the name

אז זו דוגמה פשוטה המסבירה כיצד תוכלו לדחוף את ה- HTML שחולץ לקובץ CSV. ראשית, אנו יוצרים קובץ CSV, אנו מוצאים את כל התכונות שלנו ודוחפים אחד אחד לעמודה שלהם. להלן צילום מסך:

צילום מסך של הפריטים שחולצו מהטבלאות באמצעות ביטויים רגילים

לעיתים הטכניקות שנדונו לעיל נראות מסובכות ומציבות אתגרים בפני המתכנתים אם בכלל הטבלאות מקוננות ומורכבות. כאן בחירת קורות חיים או מודל למידה עמוקה חוסכת זמן רב. בואו נראה אילו חסרונות ואתגרים מעכבים את השימוש בשיטות המסורתיות הללו.


אתגרים בשיטות מסורתיות

בחלק זה נלמד לעומק היכן עלולים להיכשל תהליכי מיצוי הטבלה, ונבין עוד יותר את הדרכים להתגבר על מכשולים אלה בשיטות מודרניות שנולדו מתוך למידה עמוקה. עם זאת, תהליך זה אינו מסלול. הסיבה היא שלוחות בדרך כלל לא נשארים קבועים לאורך כל הדרך. יש להם מבנים שונים לייצוג הנתונים, והנתונים בתוך טבלאות יכולים להיות רב-לשוניים עם סגנונות עיצוב שונים (סגנון גופן, צבע, גודל גופן וגובה). מכאן שבונים מודל חזק, יש להיות מודעים לכל האתגרים הללו. לרוב, תהליך זה כולל שלושה שלבים: איתור טבלה, חילוץ והמרה. בואו לזהות את הבעיות בכל השלבים בזה אחר זה:


איתור טבלה

בשלב זה אנו מזהים היכן בדיוק נמצאים הטבלאות בקלט הנתון. הקלט יכול להיות בכל פורמט, כגון תמונות, מסמכי PDF / Word ולעיתים סרטונים. אנו משתמשים בטכניקות ואלגוריתמים שונים בכדי לאתר את הטבלאות, בין קווים או על ידי קואורדינטות. במקרים מסוימים אנו עשויים להיתקל בטבלאות ללא גבולות כלל, בהן עלינו לבחור שיטות שונות. מלבד אלה, הנה כמה אתגרים נוספים:

  • שינוי תמונה: טרנספורמציית תמונות היא שלב ראשוני באיתור תוויות. זה כולל שיפור הנתונים והגבולות המופיעים בטבלה. עלינו לבחור באלגוריתמי עיבוד מקדים נכונים על סמך הנתונים המוצגים בטבלה. לדוגמא, כאשר אנו עובדים עם תמונות, עלינו להחיל גלאי סף וגבולות קצה. שלב טרנספורמציה זה עוזר לנו למצוא את התוכן בצורה מדויקת יותר. במקרים מסוימים קווי המתאר עלולים להשתבש והאלגוריתמים לא מצליחים לשפר את התמונה. לפיכך, בחירת הצעדים הנכונים לשינוי התמונות וטיפול בעיבוד מוקדם היא קריטית.
  • איכות תמונה: כאשר אנו סורקים טבלאות לצורך שאיבת מידע, עלינו לוודא כי מסמכים אלה נסרקים בסביבות בהירות יותר, מה שמבטיח תמונות באיכות טובה. כאשר תנאי התאורה גרועים, אלגוריתמים של קורות חיים ו- DL עשויים להיכשל באיתור טבלאות בתשומות הנתונות. אם אנו משתמשים בלמידה מעמיקה, עלינו לוודא כי מערך הנתונים הוא קבוע וכולל סט טוב של תמונות סטנדרטיות. אם אנו משתמשים במודלים אלה על שולחנות המוצגים בעיתונים מקומטים ישנים, אז ראשית עלינו לעבד מראש ולחסל את הרעש בתמונות הללו.
  • מגוון פריסות ותבניות מבניות: כל הטבלאות אינן ייחודיות. תא אחד יכול להשתרע על פני מספר תאים, אנכיים או אופקיים, ושילובים של תאים פורש יכולים ליצור מספר עצום של וריאציות מבניות. כמו כן, יש המדגישים תכונות של טקסט ושורות טבלה יכולות להשפיע על אופן הבנת מבנה הטבלה. לדוגמה, קווים אופקיים או טקסט מודגש עשויים להדגיש כותרות מרובות של הטבלה. מבנה הטבלה מגדיר חזותית את מערכות היחסים בין תאים. קשרים חזותיים בטבלאות מקשים למצוא את התאים הקשורים לחישוב ולחלץ מהם מידע. מכאן שחשוב לבנות אלגוריתמים חזקים בטיפול במבנים שונים של טבלאות.
  • ריפוד תאים, שוליים, גבולות: אלה הם עיקרי הידיעה בכל שולחן - רפידות, שוליים וגבולות לא תמיד יהיו זהים. בחלק מהשולחנות יש הרבה ריפוד בתאים, וחלקם לא. שימוש בתמונות באיכות טובה ובצעדי עיבוד מוקדם יסייעו לתהליך חילוץ הטבלה לפעול בצורה חלקה.

שאיבת שולחנות

זהו השלב בו מופק המידע לאחר זיהוי הטבלאות. ישנם המון גורמים ביחס לאופן הבניית התוכן ואיזה תוכן קיים בטבלה. מכאן שחשוב להבין את כל האתגרים לפני שבונים אלגוריתם.

  • תוכן צפוף: תוכן התאים יכול להיות מספרי או טקסטואלי. עם זאת, התוכן הטקסטואלי בדרך כלל צפוף, מכיל נתחי טקסט קצרים דו-משמעיים בעזרת ראשי תיבות וקיצורים. בכדי להבין טבלאות, יש לטשטש את הטקסט ולהרחיב את הקיצורים ואת ראשי התיבות.
  • גופנים ופורמטים שונים: גופנים הם בדרך כלל בסגנונות, צבעים וגבהים שונים. עלינו לוודא שאלו גנריים וקלים לזיהוי. מעט משפחות גופנים, במיוחד אלה שנמצאות תחת קללות או כתובות יד, קצת קשה לחלץ. מכאן ששימוש בגופן טוב ועיצוב נכון עוזר לאלגוריתם לזהות את המידע בצורה מדויקת יותר.
  • קובצי PDF מרובים ופריצות עמודים: שורת הטקסט בטבלאות רגישה לסף מוגדר מראש. גם עם התאים המשתרעים על פני מספר עמודים, קשה לזהות את הטבלאות. בעמוד מרובה טבלאות קשה להבדיל בין טבלאות שונות זו מזו. קשה לעבוד עם שולחנות דלילים ולא סדירים. לכן, יש להשתמש בשורות פסיקה גרפיות ובפריסת תוכן יחד כמקורות חשובים לאיתור אזורי טבלה.

המרת טבלה

השלב האחרון כולל המרת המידע שחולץ מהטבלאות להרכבתם כמסמך הניתן לעריכה, בין אם ב- Excel או באמצעות תוכנה אחרת. בואו ללמוד על כמה אתגרים.

  • הגדר פריסות: כשחולצים פורמטים שונים של טבלאות ממסמכים סרוקים, עלינו לקבל פריסת טבלה נכונה כדי לדחוף את התוכן פנימה. לפעמים האלגוריתם לא מצליח לחלץ מידע מהתאים. לפיכך, גם עיצוב של פריסה נכונה חשוב לא פחות.
  • מגוון דפוסי הצגת הערכים: ניתן להציג ערכים בתאים באמצעות דפוסי ייצוג תחביריים שונים. קח את הטקסט בטבלה כ- 6 ± 2. האלגוריתם עשוי להיכשל בהמרת המידע הספציפי הזה. מכאן שהוצאת ערכים מספריים דורשת הכרת דפוסי מצגת אפשריים.
  • ייצוג להמחשה: רוב פורמטי הייצוג לטבלאות, כמו שפות סימון בהן ניתן לתאר טבלאות, מיועדים להמחשה. לכן, זה מאתגר לעבד טבלאות אוטומטית.

אלה האתגרים העומדים בפנינו בתהליך חילוץ השולחן בטכניקות מסורתיות. כעת בואו נראה כיצד ניתן להתגבר על אלה בעזרת למידה עמוקה. זה נחקר נרחב במגזרים שונים.



צריך לבצע דיגיטציה של מסמכים, קבלות או חשבוניות אבל עצלן מכדי לקודד? ראש אל ננונטים ובנו דגמי OCR בחינם!


<br> סיכום

במאמר זה, סקרנו בפירוט אודות חילוץ מידע מטבלאות. ראינו כיצד טכנולוגיות מודרניות כמו Deep Learning ו-Computer Vision יכולות להפוך משימות ארציות לאוטומטיות על ידי בניית אלגוריתמים חזקים בהפקת תוצאות מדויקות. בסעיפים הראשוניים, למדנו על תפקידה של חילוץ טבלאות בהקלה על משימות הפרטים, התעשיות והמגזרים העסקיים, וכן סקרנו מקרי שימוש בהרחבה על חילוץ טבלאות מקובצי PDF/HTML, אוטומציה של טפסים, חשבונית אוטומציה וכו' קידדנו אלגוריתם באמצעות Computer Vision כדי למצוא את מיקום המידע בטבלאות באמצעות טכניקות סף, הרחבה וזיהוי קווי מתאר. דנו באתגרים העומדים בפנינו במהלך תהליכי הזיהוי, החילוץ וההמרה בטבלה בעת שימוש בטכניקות הקונבנציונליות, והצהרנו כיצד למידה עמוקה יכולה לעזור לנו להתגבר על בעיות אלו. לבסוף, סקרנו כמה ארכיטקטורות של רשתות עצביות והבנו את הדרכים שלהן להשיג מיצוי טבלה בהתבסס על נתוני האימון הנתונים.



עדכון:
‌ הוסיף חומר קריאה נוסף על גישות שונות באיתור טבלאות והפקת מידע באמצעות למידה עמוקה.

בול זמן:

עוד מ AI & Machine Learning