Виявлення таблиць і вилучення інформації за допомогою глибокого навчання

Вихідний вузол: 1325422

Вступ до вилучення таблиць

Обсяг даних, які збираються, різко збільшується з кожним днем ​​із зростанням кількості додатків, програмного забезпечення та онлайн-платформ.

Щоб продуктивно обробляти/отримувати доступ до цих величезних даних, необхідно розробити цінні інструменти вилучення інформації.

Однією з підобластей, які потребують уваги в полі Вилучення інформації, є вилучення таблиць із зображень або виявлення табличних даних із форм, PDF-файлів і документів.

Вилучення таблиці є завданням виявлення та декомпозиції табличної інформації в документі.

Table OCR - Nanonets витягує дані таблиці із зображення!
Таблиця OCR – наномережі, що витягують табличні дані із зображення!

Уявіть, що у вас є багато документів із табличними даними, які потрібно витягти для подальшої обробки. Традиційно їх можна скопіювати вручну (на папір) або завантажити на аркуші Excel.

Однак за допомогою програмного забезпечення OCR для таблиць ви можете автоматично виявляти таблиці та витягувати всі табличні дані з документів за один раз. Це економить багато часу та переробки.

У цій статті ми спочатку розглянемо, як Nanonets може автоматично витягувати таблиці із зображень або документів. Потім ми розглянемо деякі популярні методи DL для виявлення та вилучення таблиць у документах.


Бажаєте отримати табличні дані з рахунків-фактур, квитанцій або будь-якого іншого документа? Перегляньте Nanonets Екстрактор таблиць PDF для вилучення табличних даних. Сплануйте демонстраційну версію щоб дізнатися більше про автоматизацію вилучення столу.


Зміст

Витягніть таблицю із зображення за допомогою оптичного розпізнавання символів Nanonets Table

  • Зареєструватися для безкоштовного облікового запису Nanonets

    • Завантажуйте зображення/файли в модель OCR Nanonets Table
    • Nanonets автоматично виявляє та витягує всі табличні дані
    • Відредагуйте та перегляньте дані (за потреби)
    • Експортуйте оброблені дані як Excel, csv або JSON

Вилучення таблиці із зображення за допомогою наномереж

Хочете, щоб видалити дані з PDF документи, конвертувати PDF -таблицю в Excel or автоматизувати вилучення таблиці? Дізнайся як Нанонець Скребок для PDF or Парсер PDF може підвищити продуктивність вашого бізнесу.


Nanonets Table OCR API

Таблиця OCR з Nanonets
Таблиця OCR з Nanonets

Команда API OCR Nanonets дозволяє легко створювати моделі OCR. Вам не доведеться турбуватися про попередню обробку зображень або піклуватися про відповідність шаблонів або створення механізмів на основі правил, щоб підвищити точність моделі OCR.

Ви можете завантажувати свої дані, коментувати їх, налаштовувати модель на навчання та чекати отримання прогнозів через інтерфейс користувача браузера, не пишучи жодного рядка коду, не турбуючись про графічні процесори або знаходячи правильну архітектуру для виявлення таблиці за допомогою моделей глибокого навчання.

Ви також можете отримати відповіді JSON для кожного прогнозу, щоб інтегрувати його у власні системи та створювати програми на базі машинного навчання, створені на основі найсучасніших алгоритмів і потужної інфраструктури.

https://nanonets.com/documentation/


Чи займається ваш бізнес розпізнаванням даних або тексту в цифрових документах, PDF-файлах або зображеннях? Ви замислювалися, як отримати табличні дані, витягнути текст із зображень , витягти дані з PDF or витягнути текст із PDF-файлу точно та ефективно?


Кому буде корисним видобування таблиць

Як обговорювалося в попередньому розділі, таблиці часто використовуються для представлення даних у чистому форматі. Ми можемо так часто бачити їх у кількох сферах: від організації нашої роботи шляхом структурування даних у таблицях до зберігання величезних активів компаній. Є багато організацій, яким щодня доводиться мати справу з мільйонами столів. Щоб полегшити такі трудомісткі завдання робити все вручну, нам потрібно вдатися до більш швидких прийомів. Давайте обговоримо кілька випадків використання вилучення таблиць може бути важливим:

джерело: Патрік Томассо, Unsplash

Випадки особистого використання

Команда вилучення столу процес також може бути корисним для невеликих випадків особистого використання. Іноді ми фіксуємо документи на мобільний телефон, а потім копіюємо їх на комп’ютер. Замість цього процесу ми можемо безпосередньо захоплювати документи та зберігати їх у форматі для редагування в наших користувацьких шаблонах. Нижче наведено кілька прикладів використання про те, як ми можемо включити витягання столу в нашу особисту рутину –

Сканування документів на телефон: Ми часто фіксуємо зображення важливих таблиць на телефоні та зберігаємо їх, але за допомогою техніки вилучення таблиць ми можемо захоплювати зображення таблиць і зберігати їх безпосередньо в табличному форматі, у таблицях Excel або Google. Завдяки цьому нам не потрібно шукати зображення чи копіювати вміст таблиці в будь-які нові файли, замість цього ми можемо безпосередньо використовувати імпортовані таблиці та почати працювати над витягнутою інформацією.

Документи в HTML: На веб-сторінках ми знаходимо масу інформації, представленої за допомогою таблиць. Вони допомагають нам у порівнянні з даними і дають нам швидку нотатку про цифри в організований спосіб. Використовуючи процес вилучення таблиці, ми можемо сканувати PDF-документи або зображення JPG/PNG і завантажувати інформацію безпосередньо в спеціально розроблений формат таблиці. Далі ми можемо писати скрипти для додавання додаткових таблиць на основі наявних таблиць і тим самим оцифрувати інформацію. Це допомагає нам редагувати вміст і прискорює процес зберігання.


Випадки промислового використання

У всьому світі є кілька галузей, які мають величезну кількість документів, особливо в банківському та страховому секторах. Таблиці широко використовуються від зберігання інформації про клієнтів до догляду за потребами клієнтів. Ця інформація знову передається як документ (друкована копія) до різних відділень для затвердження, де іноді неправильне спілкування може призвести до помилок під час вилучення інформації з таблиць. Натомість використання автоматизації значно полегшує наше життя. Після того, як початкові дані будуть зібрані та затверджені, ми можемо безпосередньо сканувати ці документи в таблиці та далі працювати над оцифрованими даними. Не кажучи вже про скорочення витрат часу та несправностей, ми можемо повідомити клієнтів про час і місце, де обробляється інформація. Таким чином, це забезпечує надійність даних і спрощує наш спосіб роботи. Тепер розглянемо інші можливі варіанти використання:

Контроль якості: Контроль якості є однією з основних послуг, які надають провідні галузі. Зазвичай це робиться всередині компанії та для зацікавлених сторін. У рамках цього існує багато форм зворотного зв’язку, які збираються від споживачів, щоб отримати відгуки про надану послугу. У промислових секторах вони використовують таблиці, щоб записати щоденні контрольні списки та примітки, щоб побачити, як працюють виробничі лінії. Все це можна задокументувати в одному місці за допомогою витягування таблиці.

Відстеження активів: У виробничих галузях люди використовують жорстко закодовані таблиці для відстеження вироблених об’єктів, таких як сталь, залізо, пластик тощо. Кожен виготовлений предмет має унікальний номер, у якому вони використовують таблиці для відстеження виробів, виготовлених і доставлених щодня. Автоматизація може допомогти заощадити багато часу та активів з точки зору неправильного розміщення або невідповідності даних.


Випадки використання в бізнесі

Існує кілька галузей бізнесу, які працюють на аркушах Excel та офлайн-формах. Але в певний момент часу шукати в цих аркушах і формах стає важко. Якщо ми вводимо ці таблиці вручну, це займає багато часу, і ймовірність того, що дані будуть введені неправильно, буде висока. Отже, вилучення таблиці є кращою альтернативою для вирішення бізнес-використання, оскільки таких, наведених нижче, небагато.

Рахунок-фактура Автоматизація: Існує багато малих і великих галузей промисловості рахунки все ще генеруються в табличних форматах. Вони не надають належним чином забезпечені податкові звіти. Щоб подолати такі перешкоди, ми можемо використати вилучення таблиці для перетворення всіх рахунки у формат, який можна редагувати, і таким чином оновити їх до новішої версії.

Автоматизація форм: Онлайн-форми руйнують цей перевірений метод, допомагаючи підприємствам збирати потрібну інформацію та одночасно підключаючи її до інших програмних платформ, вбудованих у їхній робочий процес. Крім зменшення потреби в ручному введенні даних (з автоматизований введення даних) і подальших електронних листів, вилучення таблиці може усунути витрати на друк, надсилання, зберігання, упорядкування та знищення традиційних паперових альтернатив.


Маєте на увазі проблему OCR? Хочеться оцифрувати рахунки, PDF-файли чи номерні знаки? Перейдіть до Нанонети і будуйте моделі OCR безкоштовно!


Глибоке навчання в дії

Глибоке навчання є частиною більш широкого сімейства методів машинного навчання на основі штучних нейронних мереж.

Нейронна мережа — це структура, яка розпізнає основні зв’язки в даних за допомогою процесу, який імітує роботу мозку людини. У них є різні штучні шари, через які проходять дані, де вони дізнаються про особливості. Існують різні архітектури, як-от згорткові NN, повторювані NN, автокодери, генеративні змагальні NN для обробки різних видів даних. Вони складні, але демонструють високу продуктивність для вирішення проблем у режимі реального часу. Давайте тепер розглянемо дослідження, проведені в області вилучення таблиць за допомогою нейронних мереж, а також коротко їх розглянемо.


TableNet

Папір: TableNet: модель глибокого навчання для наскрізного виявлення таблиці та вилучення табличних даних із зображень відсканованих документів

Вступ: TableNet — це сучасна архітектура глибокого навчання, яку запропонувала команда з TCS Research у 2019 році. Основною мотивацією було вилучення інформації зі сканованих таблиць за допомогою мобільних телефонів або камер.

Вони запропонували рішення, яке включає точне визначення табличної області в зображенні та подальше виявлення та вилучення інформації з рядків і стовпців виявленої таблиці.

Набір даних: Використаний набір даних був Marmot. Він має 2000 сторінок у форматі PDF, які були зібрані з відповідними основними істинами. Це також включає китайські сторінки. Посилання - http://www.icst.pku.edu.cn/cpdp/sjzy/index.htm

Архітектура: Архітектура базується на моделі кодера-декодера Лонга та ін. для семантичної сегментації. Та сама мережа кодера/декодера використовується як архітектура FCN для вилучення таблиці. Зображення попередньо обробляються та змінюються за допомогою Tesseract OCR.

Модель розробляється в два етапи, піддаючи вхідні дані методам глибокого навчання. На першому етапі вони використовували ваги попередньо підготовленої мережі VGG-19. Вони замінили повністю підключені шари використовуваної мережі VGG на згорткові шари 1×1. За всіма згортковими шарами слідує активація ReLU та рівень випадання з ймовірністю 0.8. Другу фазу вони називають декодованою мережею, яка складається з двох гілок. Відповідно до інтуїції, область стовпців є підмножиною області таблиці. Таким чином, єдина мережа кодування може відфільтрувати активні області з кращою точністю, використовуючи функції як таблиць, так і регіонів стовпців. Вихід з першої мережі розподіляється на дві гілки. У першій гілці застосовуються дві операції згортки, а остаточна карта об’єктів збільшується, щоб відповідати вихідним розмірам зображення. В іншій гілці для виявлення стовпців є додатковий шар згортки з функцією активації ReLU і шар випадання з тією ж імовірністю випадання, як згадувалося раніше. Карти об’єктів підвищують вибірку з використанням дробових згорток після шару згортки (1×1). Нижче наведено зображення архітектури:

Архітектура TableNet

Виходи: Після обробки документів за допомогою моделі формуються маски таблиць і стовпців. Ці маски використовуються для відфільтрування таблиці та її областей стовпців із зображення. Тепер за допомогою Tesseract OCR інформація витягується з сегментованих областей. Нижче наведено зображення, що показує маски, які генеруються та згодом витягуються з таблиць:

Вони також запропонували ту саму модель, яка точно налаштована за допомогою 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 і ваги ВГГ-16.
  • Розпізнавання структури Після того, як таблиця була успішно виявлена ​​і її місцезнаходження стало відоме системі, наступна проблема в розумінні її вмісту — розпізнати та знайти рядки та стовпці, які складають фізичну структуру таблиці. Тому вони використовували повністю підключену мережу з вагами VGG-16, яка витягує інформацію з рядків і стовпців. Нижче наведено результати DeepDeSRT:

Виходи:

Виходи виявлення таблиці
Виходи розпізнавання структури [6]

Результати оцінки показують, що DeepDeSRT перевершує найсучасніші методи для виявлення таблиць і розпізнавання структур і досягає показників F1 96.77% і 91.44% для виявлення таблиць і розпізнавання структур відповідно до 2015 року.


Графічні нейронні мережі

Папір: Переосмислення розпізнавання таблиць за допомогою графічних нейронних мереж

Вступ: У цьому дослідженні автори з Лабораторії глибокого навчання Національного центру штучного інтелекту (NCAI) запропонували нейронні мережі Graph для вилучення інформації з таблиць. Вони стверджували, що графічні мережі є більш природним вибором для вирішення цих проблем, і далі досліджували дві нейронні мережі на основі градієнтів.

Ця запропонована модель поєднує в собі переваги як згорткових нейронних мереж для виділення візуальних ознак, так і мереж графів для вирішення проблемної структури.

Набір даних: Автори запропонували новий великий синтетично згенерований набір даних із 0.5 мільйонів таблиць, розділених на чотири категорії.

  1. Зображення — це прості зображення без злиття та з лінійними лініями
  2. Зображення мають різні типи кордонів, включаючи час від часу відсутність лінійних ліній
  3. Впроваджує об’єднання клітинок і стовпців
  4. Камера фіксувала зображення з лінійним перетворенням перспективи

Архітектура: Вони використовували неглибоку згорткову мережу, яка генерує відповідні згорткові характеристики. Якщо просторові розміри вихідних об’єктів не збігаються з вхідним зображенням, вони збирають позиції, які лінійно зменшуються в залежності від співвідношення між вхідними та вихідними розмірами, і надсилають їх до мережі взаємодії, яка має дві мережі графів, відомі як DGCNN. і GravNet. Параметри мережі графів такі ж, як і вихідної CNN. Зрештою, вони використали вибірку пари під час виконання, щоб класифікувати вміст, який витягується, що використовує алгоритм на основі Монте-Карло. Нижче наведені виходи:

Виходи:

Вихідні дані генеруються графічними нейронними мережами

Нижче наведено таблицю чисел точності, які генеруються мережами для чотирьох категорій мережі, як представлено в Набір даних розділ:


CGAN і генетичні алгоритми

Папір: Вилучення таблиць з документів за допомогою умовних генеративних змагальних мереж і генетичних алгоритмів

Вступ: У цьому дослідженні автори використовували підхід зверху вниз замість підходу знизу вгору (інтеграція рядків у клітинки, рядки чи стовпці).

У цьому методі, використовуючи генеративну змагальну мережу, вони відобразили зображення таблиці у стандартизовану форму таблиці «скелет». Ця скелетна таблиця позначає приблизні межі рядків і стовпців без вмісту таблиці. Далі вони пристосовують візуалізації потенційних прихованих структур таблиць до структури скелета за допомогою вимірювання відстані, оптимізованого за допомогою генетичного алгоритму.

Набір даних: Автори використовували власний набір даних, який налічує 4000 таблиць.

Архітектура: Запропонована модель складається з двох частин. У першій частині вхідні зображення абстрагуються в скелетні таблиці за допомогою умовної генеративної змагальної нейронної мережі. GAN знову має дві мережі: генератор, який генерує випадкові вибірки, і дискримінатор, який визначає, чи є згенеровані зображення підробленими чи оригінальними. Генератор G — це мережа кодер-декодер, де вхідне зображення пропускається через серію шарів із прогресивним зниженням дискретизації до рівня вузького місця, де процес повертається. Щоб передати достатню інформацію до шарів декодування, використовується архітектура U-Net з пропуском з’єднань, і між шарами i та n − i додається з’єднання з пропуском за допомогою конкатенації, де n – загальна кількість шарів, а i – номер шару. в кодері. Архітектура 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 який є режимом контурної апроксимації. The знайти контури розпаковує два значення, тому ми додамо ще одну змінну з ім’ям ієрархія. Коли зображення вкладені, контури виділяють взаємозалежність. Для представлення таких відносин використовується ієрархія.

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

Контури позначають, де саме на зображенні присутні дані. Тепер ми перебираємо список контурів, який ми обчислили на попередньому кроці, і обчислюємо координати прямокутних прямокутників, як спостерігається на вихідному зображенні, за допомогою методу:  cv2.boundingRect. На останній ітерації ми помістили ці поля на вихідне зображення table_image за допомогою методу, cv2.recangle().

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) 

Це наш останній крок. Тут ми використовуємо метод з ім'ямWindow щоб відобразити нашу таблицю з витягнутим вмістом і контурами, вбудованими в неї. Нижче наведено фрагмент коду:

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

Код кредитів: zevross

Ми імпортували багато модулів, включаючи регулярні вирази та пов’язані з PDF бібліотеками. У методі convert_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, 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, знаходимо всі наші атрибути та вставляємо один за одним у відповідні стовпці. Нижче наведено скріншот:

Знімок екрана елементів, витягнутих з таблиць за допомогою регулярних виразів

Часом вищезазначені методи здаються складними і створюють проблеми для програмістів, якщо всі таблиці є вкладеними та складними. Тут вибір CV або моделі глибокого навчання економить багато часу. Давайте подивимося, які недоліки та проблеми заважають використанню цих традиційних методів.


Проблеми з традиційними методами

У цьому розділі ми докладно дізнаємося про те, де процеси вилучення таблиць можуть дати збій, а також зрозуміємо шляхи подолання цих перешкод за допомогою сучасних методів, народжених завдяки глибокому навчанню. Однак цей процес не є простою прогулянкою. Причина в тому, що таблиці зазвичай не залишаються незмінними. Вони мають різну структуру для представлення даних, а дані всередині таблиць можуть бути багатомовними з різними стилями форматування (стиль шрифту, колір, розмір і висота шрифту). Отже, щоб побудувати надійну модель, слід знати про всі ці проблеми. Зазвичай цей процес включає три етапи: виявлення таблиці, вилучення та перетворення. Давайте визначимо проблеми на всіх етапах, одну за одною:


Виявлення таблиці

На цьому етапі ми визначаємо, де саме таблиці присутні у даному введеному даних. Вхідні дані можуть бути в будь-якому форматі, наприклад, зображення, документи PDF/Word і іноді відео. Ми використовуємо різні методи та алгоритми для визначення таблиць за рядками або за координатами. У деяких випадках ми можемо зіткнутися з таблицями взагалі без кордонів, де нам доведеться вибрати різні методи. Окрім цих, тут є ще кілька проблем:

  • Трансформація зображення: Перетворення зображення є основним кроком у виявленні етикеток. Це включає в себе покращення даних і меж, присутніх у таблиці. Нам потрібно вибрати правильні алгоритми попередньої обробки на основі даних, представлених у таблиці. Наприклад, коли ми працюємо з зображеннями, нам потрібно застосувати детектори порогів і меж. Цей крок трансформації допомагає нам точніше знайти вміст. У деяких випадках контури можуть вийти з ладу, і алгоритми не зможуть покращити зображення. Отже, вибір правильних етапів трансформації зображення та попередньої обробки є вирішальним.
  • Якість зображення: Коли ми скануємо таблиці для отримання інформації, ми повинні переконатися, що ці документи скануються в більш яскравому середовищі, що забезпечує хорошу якість зображення. Коли умови освітлення погані, алгоритми CV і DL можуть не виявити таблиці в даних входах. Якщо ми використовуємо глибоке навчання, нам потрібно переконатися, що набір даних є послідовним і має хороший набір стандартних зображень. Якщо ми використовуємо ці моделі на столах, присутніх у старих зім’ятих паперах, то спочатку нам потрібно попередньо обробити та усунути шум на цих малюнках.
  • Різноманітність структурних макетів і шаблонів: Усі таблиці не є унікальними. Одна клітинка може охоплювати кілька клітинок, як по вертикалі, так і по горизонталі, а комбінації охоплюючих клітин можуть створити величезну кількість структурних варіацій. Крім того, деякі підкреслюють особливості тексту, а рядки таблиці можуть впливати на розуміння структури таблиці. Наприклад, горизонтальні лінії або напівжирний текст можуть підкреслити кілька заголовків таблиці. Структура таблиці наочно визначає відносини між клітинками. Візуальні зв’язки в таблицях ускладнюють обчислювальний пошук пов’язаних комірок і вилучення з них інформації. Тому важливо створювати алгоритми, які є надійними в обробці різних структур таблиць.
  • Заповнення клітинок, поля, межі: Це основні елементи будь-якої таблиці – відступи, поля та межі не завжди будуть однаковими. Деякі таблиці мають багато заповнення всередині клітинок, а деякі ні. Використання зображень хорошої якості та етапів попередньої обробки допоможуть безперебійно виконувати процес вилучення таблиці.

Вилучення таблиці

На цьому етапі витягується інформація після ідентифікації таблиць. Існує багато факторів, що стосуються того, як структурований вміст і який вміст присутній у таблиці. Тому важливо зрозуміти всі проблеми, перш ніж будувати алгоритм.

  • Щільний вміст: Вміст клітинок може бути числовим або текстовим. Однак текстовий вміст зазвичай щільний, містить неоднозначні короткі фрагменти тексту з використанням акронімів і скорочень. Для розуміння таблиць текст потрібно розібрати, а абревіатури та акроніми розширити.
  • Різні шрифти та формати: Шрифти зазвичай мають різні стилі, кольори та висоту. Ми повинні переконатися, що вони є загальними та їх легко ідентифікувати. Деякі сімейства шрифтів, особливо ті, які підпадають під скоропис або рукописні, трохи важко вилучити. Отже, використання хорошого шрифту та правильного форматування допомагає алгоритму точніше ідентифікувати інформацію.
  • PDF-файли кількох сторінок і розриви сторінок: Рядок тексту в таблицях чутливий до попередньо визначеного порогу. Крім того, коли клітинки охоплюються кількома сторінками, стає важко ідентифікувати таблиці. На сторінці з багатьма таблицями важко відрізнити різні таблиці одна від одної. З рідкими та неправильними таблицями важко працювати. Тому графічні лінійки та макет вмісту слід використовувати разом як важливі джерела для визначення областей таблиці.

Перетворення таблиці

Останній етап включає перетворення витягнутої інформації з таблиць для компіляції їх як документа, який можна редагувати, або в Excel, або за допомогою іншого програмного забезпечення. Давайте дізнаємося про декілька проблем.

  • Встановити макети: Коли різні формати таблиць витягуються із відсканованих документів, нам потрібно мати правильний макет таблиці, щоб додати вміст. Іноді алгоритм не вдається витягти інформацію з клітинок. Тому не менш важливим є створення правильного макета.
  • Різноманітність моделей представлення цінності: Значення в клітинках можуть бути представлені за допомогою різних синтаксичних шаблонів представлення. Вважайте, що текст у таблиці дорівнює 6 ± 2. Алгоритм може не перетворити цю конкретну інформацію. Отже, вилучення числових значень вимагає знання можливих шаблонів представлення.
  • Представлення для візуалізації: Більшість форматів представлення таблиць, таких як мови розмітки, якими можна описувати таблиці, призначені для візуалізації. Тому автоматично обробляти таблиці складно.

Це проблеми, з якими ми стикаємося під час процесу екстракції столу за допомогою традиційних методів. Тепер давайте подивимося, як подолати це за допомогою Deep Learning. Він широко досліджується в різних галузях.



Потрібно оцифрувати документи, квитанції або рахунки але лінь кодувати? Перейдіть до Нанонети і будуйте моделі OCR безкоштовно!


Підсумки

У цій статті ми детально розглянули процес вилучення інформації з таблиць. Ми бачили, як сучасні технології, такі як глибоке навчання та комп’ютерний зір, можуть автоматизувати звичайні завдання, створюючи надійні алгоритми для отримання точних результатів. У початкових розділах ми дізналися про роль вилучення таблиць у полегшенні виконання завдань приватним особам, галузям і бізнес-секторам, а також розглянули приклади використання, що розробляють вилучення таблиць з PDF-файлів/HTML, автоматизацію форм, рахунок-фактура Автоматизація тощо. Ми запрограмували алгоритм за допомогою комп’ютерного зору, щоб знайти положення інформації в таблицях, використовуючи методи визначення порогу, розширення та визначення контурів. Ми обговорили проблеми, з якими ми можемо зіткнутися під час процесів виявлення, вилучення та перетворення таблиць під час використання звичайних методів, і вказали, як глибоке навчання може допомогти нам у подоланні цих проблем. Нарешті, ми розглянули декілька архітектур нейронних мереж і зрозуміли, як вони досягають вилучення таблиць на основі наданих навчальних даних.



Оновлення:
Додано більше матеріалів для читання про різні підходи до виявлення таблиць та вилучення інформації за допомогою глибокого навчання.

Часова мітка:

Більше від ШІ та машинне навчання