Ето защо извличането на текст от PDF файловете е толкова трудно

Оригиналът е на Bogdan

1
1965

Според, може да се каже всеобщото мнение, изваждането на текста от PDF файловете не би трябвало да е много сложно. Само като погледнем и ето – текстът е пред очите ни и хората без никакви проблеми го четат. Какви толкова могат да бъдат усложнения при неговото извличане?

Оказа се, че извличането на този текст е твърде сложно поради невероятната гъвкавост на PDF формата. Основният проблем е в това, че PDF по принцип не е създаден като формат за извеждане на данни – той е създаден да служи за нещо като канал за извеждане на на информация, даващ възможност за много тънка настройка на външния вид на крайния документ.

На практика PDF форматът е поток от инструкции, описващи как точно да бъде създадено изображението на страницата. Така например, текстовите данни не се съхраняват във вид на параграфи и думи, а във вид на символи и отделни елементи, нарисувани на определени места в страницата. В крайна сметка при преобразуването на текст например от Word към PDF, семантиката на текста се губи.Цялата вътрешна структура на текста се превръща в аморфен миш-маш от плаващи в страницата символи и елементи на символи.

Когато създавахме и пълнехме базата данни FilingDB, ние извлякохме данните от десетки хиляди PDF документи. По време на този процес ние с учудване гледахме доколко неверни се оказаха абсолютно всички наши предположения за структурата на PDF файловете. Нашата мисия се оказа изключително трудна, понеже се наложи да обработваме PDF документи от най-различни източници със съвършено различни стилове, шрифтове и външен вид.

Нека се спрем по-подробно върху това, кои особености на PDF файловете правят сложна, а често пъти и невъзможна задачата по извличане на текстовете от тях.

Защитата от четене при PDF документите

Може би сте срещали PDF файлове със забрана за копиране на техните текстове. Ето какво изписва програмата SumatraPDF при опит за копиране на текст от защитен от копиране документ:

Интересно е, че се вижда маркирането на текста, но програмата отказва да го прехвърли към клипборда.

Това е реализирано с помощта на няколко флага, определящи правата за достъп, единият от които управлява правото за копиране на текст. Важното тук е, че това не се извършва от PDF файла – неговото съдържание не се променя, а реализацията на защитата от копиране е грижа на програмата за преглеждането на PDF документа.

Тоест, ясно е, че това не е пълноценна защита от копиране, понеже всяка сравнително добра програмна библиотека за работа с PDF документи, може да променя тези флагове или да направи така, че да бъдат игнорирани.

Символи извън пределите на страниците

Често пъти в PDF документите се вмъкват повече данни, отколкото се показват на страницата. Нека за пример вземем страница от годишния отчет на Nestle за 2010 година:

В тази страница има повече текст, отколкото се вижда и можем да прочетем следното:

‘KitKat празнува своя 75-ти рожден ден през 2010 година, но остава млада с над 2,5 милиона почитатели във Facebook. Нейната продукция се продава в над 70 страни, а нейните продажби растат дори и в развиващите се страни, в Средния Изток, Индия и Русия. Япония е вторият по големина пазар на компанията.

Този текст е разположен извън границите на страницата и повечето PDF четци не го показват. Но го има и може да бъде изведен по софтуерен път.

Малки или невидими символи

Понякога в PDF страниците се вмъкват съвсем малки или изобщо невидими символи. Ето още една страница от отчета на Nestle за 2012 година:

В тази страница е поставен дребен бял текст на бял фон, където е написано следното:

Wyeth Nutrition logo Identity Guidance to markets

 

Vevey Octobre 2012 RCC/CI&D

Понякога това се прави за повишаване на достъпността, подобно на тага alt в HTML

Прекалено много интервали

Понякога в PDF документите между буквите са поставени допълнителни интервали. Обикновено това се прави с цел кърнинг – подбиране на най-доброто разстояние между буквите.

Като пример можем да разгледаме следния текст от отчета на Hikma Pharma от 2013 година:

Ако го копираме ще получим:

ch a i r m a n ' s s tat em en t

Реконструкцията на подобен текст е дълга и сложна. На нас ни се наложи да използваме OCR – оптично разпознаване на символите.

Недостатъчно интервали

Понякога в PDF файловете не достигат интервалите или те са заменени с друг символ.

Пример 1: следващата извадка е от годишни отчет на SEB за 2017 година:

Извлеченият от там текст изглежда по следния начин:

Tenyearsafterthefinancialcrisisstarted

Пример 2: отчетът на Eurobank за 2013 година включва следното:

Копираният оттам текст е:

On_April_7,_2013,_the_competent_authorities

И тук най-доброто решение бе при тези страници да се използва OCR.

Вградените шрифтове

PDF работи със шрифтовете по меко казано, сложен начин. За да разберем как става това, ще трябва накратко да се запознаем с глифовете, имената на глифовете и с шрифтовете.

  • Глифът е комплект от инструкции, описващи как трябва да бъде изобразен символа или буквата
  • Името на глифа е наименованието, свързано с този глиф. Например, наименованието ‘търговска марка“ за ™ и ‘а’ за глифа а.
  • Шрифтовете са списък от глифове и свързаните с тях наименования. Така например, в повечето шрифтове има глиф, който повечето хора разпознават като буквата ‘а’ и затова в различните шрифтове се използват различни методи за изобразяването на тази буква

В PDF документите символите се съхраняват във вид на числа – кодове на символите [codepoints]. За да разбере какво трябва да покаже на екрана рендиращият енджин трябва да премине през поредицата от кода на символа към наименованието на глифа и след това към самия глиф.

Така например, PDF файлът може да съдържа кода на символа 116, който той съпоставя с наименованието на глифа ‘t’, който от своя страна е съпоставен с глифа, описващ как трябва да бъде изведен на екрана символа ‘t’.

Повечето PDF енджини използват стандартното кодиране на символите. Например:

  • В ASCII и Unicode за обозначаване на буквата ‘t’ с използва кода 116
  • В Unicode кодът на символа 9786 означава бял емотикон, който се извежда като ☺, само че в ASCII няма код за този символ

Но в редица случаи в PDF документите често се използва собствено кодиране на символите и специални шрифтове. Това може  да изглежда странно, но в тези документи буквата ‘t’ се обозначава с кода на символа 1, който се съпоставя с с глифа ‘с1’, който пък от своя страна описва как да бъде изведена тази буква.

За потребителя крайният резултат е абсолютно един и същ, но машините се объркват от тези разменени кодове. Ако кодовете на символите не съответстват на стандартното общоприето кодиране, по софтуерен път е на практика невъзможно да се разбере какво точно означават кодовете 1, 2 и 3.

За какво е необходимо в PDF документите да бъдат вмъквани нестандартни шрифтове и кодировки?

  • Първата причина е неимоверното усложняване на изваждането на текста от PDF документите
  • Втората е използването на субшрифтове. В повечето шрифтове има глифове за огромен брой символи, а PDF може да работи и само с някое тяхно подмножество. За да икономиса място, създателят на PDF документа може да махне всички ненужни глифове и да създаде компактен субшрифт, при който ще се наложи използването на нестандартна кодировка.

Един  от начините за заобикалянето на тази защита е да се извлекат глифовете от документа, след това да преминат през OCE и да се направи съответствие между шрифта и Unicode. По тозни начин ще може да се направи собствено прекодиране от вградения субшрифт към Unicode.

Картата на кодирането, която съпоставя например числата 1 със 116, в PDF се нарича ToUnicode. В PDF се позволява използването на собствени ToUnicode карти, но това не е задължително.

Разпознаване на думите и параграфите

Пресъздаването на параграфите и дори думите от аморфния миш-маш на PDF е сложна задача.

PDF документът включва  списъка със символите в страницата, а да разпознава думите и параграфите е длъжен потребителят. Хората по естествен път се справят с това, понеже четенето е базов навик.

Най-често се използва алгоритъм за групиране, който сравнява размерите, разположението и подравняването на символите с цел да може да определи кое е дума и кое – параграф.

Но дори и при най-опростените реализации на този алгоритъм, сложността лесно достига O(n²), заради което обработката на почти изцяло пълните с текст страници става твърде бавно.

Редът на текста и на параграфите

Разпознаването на думите и на реда на следване на параграфите е сложна задача поради две основни причини.

Първо, понякога правилен отговор просто няма, Докато при документите с с обикновен типографски набор във вид на една колонка редът на четене е съвсем естествен, то при документите с по-смело разположение на елементите редът за четене на текста е много по-трудно да се определи. В долния пример не е ясно къде трябва да се намира вложката – в края на или в средата на текста, до който е поставена

Второ, дори когато отговорът е съвсем ясен за човека, компютрите, дори с ИИ трудно определят точния ред на следване на параграфите. Да разгледаме разположението на компонентите в тест в две колони, в който е описано приготвянето на плодова салата:

Обикновено четенето се осъществява отляво надясно и отгоре надолу, но в този случай алгоритмите тотално се объркват.

Вмъкнатите изображения

Често пъти част от документа или целият документ е сканирано изображение. В този случай няма текстови данни и се налага да се използва OCR,

Ето един пример от годишния отчет на Yell от 2011 година, който се предлага само като сканирано изображение:

А защо просто не приложим OCR към целия текст?

Оптичното разпознаване помага при някои от изброените дотук проблеми, но си има своите недостатъци:

  • Дълго време на обработване. Оптичното разпознаване на PDF документите обикновено отнема около 10 пъти повече време (понякога и по-дълго) от извличането на текста от PDF-а
  • Трудно разпознават някои символи – емотикони, звездички, кръгчета, квадратчетата в списъците, сложните математически символи и т.н.

Проверката

Дотук не сме говорили колко е сложно да се провери и потвърди, че текстът е бил извлечен правилно. Най добре е да се приложат поредица от тестове, които да проверят базовите съотношение (дължина на текста, съотношението на броя на думите към интервалите), процента на неразпознатите думи, проверка за подозрителни и неочаквани символи и т.н.

Нашият съвет по извличането на текст от PDF документите е да първо да се убедите, дали няма по-удобен източник на съшият текст.

А ако необходимите ви данни са налични само във вид на PDF, важно е се разбере, че това е сложен проблем, който често пъти не може да се реши напълно.

5 3 гласа
Оценете статията
Абонирай се
Извести ме за
guest
1 Коментар
стари
нови оценка
Отзиви
Всички коментари