Як витягнути текст з PDF? [зачинено]


152

Чи може хтось порекомендувати бібліотеку / API для вилучення тексту та зображень із PDF? Нам потрібно вміти знаходити текст, який міститься в попередньо відомих регіонах документа, тож API потрібно буде надати нам позиційну інформацію про кожен елемент на сторінці.

Ми хотіли б, щоб ці дані виводилися у форматі xmlчи jsonформаті. Зараз ми дивимось на PdfTextStream, який здається досить непоганим, але ми хотіли б почути досвід та пропозиції інших людей.

Чи існують альтернативи (комерційні чи безкоштовні) для вилучення тексту з формату PDF у програмі?



1
Для тих , хто потребує що - то дуже просте (немає інформації позиції), це Perl регулярний вираз може бути досить: /^\s*\[?\((.*?)\)\]?\s*T[Jj]/mg. Він просто шукає оператора Tj / TJ, який позначає весь звичайний текст у форматі PDF.
Alex R

1
використовувати бібліотеку TomRoush PdfBox, це добре працює на андроїді
FaisalAhmed

Відповіді:


113

Мені видали pdf-файл на 400 сторінок із таблицею даних, яку мені довелося імпортувати - на щастя, жодних зображень. Ghostscript працював на мене:

gswin64c -sDEVICE=txtwrite -o output.txt input.pdf

Вихідний файл був розбитий на сторінки із заголовками тощо, але тоді було легко написати додаток, щоб викреслити порожні рядки тощо тощо та витягнути всі 30000 записів. -dSIMPLEі -dCOMPLEXне мало значення в цьому випадку.


37
У Linux та cygwin команда gsзамість gswin64c. Працює чудово. Немає запатентованого платного лайна. Це просто працює.
Яннес

4
Так, чудово працює! Тепер я можу безкарно використовувати "grep" на своїх pdf-файлах. Оскільки я можу грепнути краще, ніж вмію читати, це виграш! (:-) Оновлення
Девід Елсон

1
Єдиною проблемою у мене було використання його на pdfs із вбудованими "старими" шрифтами. Відмінно працює для локально створених файлів pdfs, але складніше з неясними джерелами. Інакше відмінний сценарій.
Джон М

що робить -sDEVICE=txtwrite? Я не дуже розумію, прочитавши Як користуватися Ghostscript | Вибір пристрою виведення
Ooker

Для виводу stdout замість збереження у текстовому файлі використовуйте gswin64c -sDEVICE=txtwrite -o- input.pdf. Джерело (трохи змінено мною): gist.github.com/drmohundro/560d72ed06baaf16f191ee8be34526ac
LuH

33

З сьогоднішнього дня я це знаю: найкраще для вилучення тексту з PDF-файлів - це TET, інструментарій вилучення тексту . TET є частиною сімейства продуктів PDFlib.com.

PDFlib.com - компанія Томаса Мерца. Якщо ви не впізнаєте його імені: Томас Мерц є автором "Біблії PostScript і PDF".

Перше втілення ТЕТ - це бібліотека . Це, ймовірно, може зробити все, що хотів Budda006, включаючи позиційну інформацію про кожен елемент на сторінці. О, і це також може витягувати зображення. Він рекомбінує зображення, розбиті на частини.

pdflib.com пропонує ще одне втілення цієї технології, плагін TET для Acrobat . І третє втілення - iFilter PDFlib TET . Це окремий інструмент для робочих столів користувачів. Обидва вони безкоштовно (як у пиві) використовувати для приватних, некомерційних цілей.

І це справді потужно. Набагато краще, ніж власне вилучення тексту Adobe. Він витягнув текст для мене, де інші інструменти (включаючи Adobe) викидають лише сміття.

Я щойно перевірив автономний інструмент для настільних ПК, і те, що вони говорять на своїй веб-сторінці, є правдою. Він має дуже гарний командний рядок. Деякі з моїх «проблемних» тестових файлів PDF цей інструмент обробляв на моє повне задоволення.

Відтепер ця річ стане моєю рекомендацією для всіх складних та складних вимог до вилучення тексту PDF.

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

Спробувати.


32
Немає пробної версії, і $ 440 трохи більше "Спробуйте".
Рок Стрішні


Чи доступна ця послуга через API?
барт

1
Я перевірив це, він не розпізнає стовпці. Я просканував передню сторінку англійського таблоїду. Текст був розділений на 3 стовпчики на папері, але цей плагін змішував речення взагалі, завдяки чому він виглядав весело. Безкоштовний Ghostscript мав точно такий же вихід.
NoWhereToBeSeen

1
@RedHotScalability: Також BTW, ТЕТ робить розпізнавати colums , якщо використовується з правильними параметрами. Але я залишаю це як
зусилля амбітного скрипта

29

Ефективний інструмент командного рядка, з відкритим кодом, без будь-якої плати, доступний в Linux та Windows: просто названий pdftotext. Цей інструмент є частиною бібліотеки xpdf.

http://en.wikipedia.org/wiki/Pdftotext


4
На стороні: використовувати -layoutперемикач для збереження таблиць, працює досить добре.
себастьян


12

Ось моя пропозиція. Якщо ви бажаєте витягнути текст з PDF, ви можете імпортувати pdf-файл у Google Документи, а потім експортувати його у більш дружній формат, такий як .html, .odf, .rtf, .txt тощо. Все це за допомогою API Drive . Він вільний * і надійний. Подивись на:

https://developers.google.com/drive/v2/reference/files/insert https://developers.google.com/drive/v2/reference/files/get

Оскільки це API відпочинку, він сумісний з ВСІМ мовами програмування. Посилання, які я розмістив на aboove, мають приклади роботи для багатьох мов, включаючи: Java, .NET, Python, PHP, Ruby та інші.

Я сподіваюся, що це допомагає.


2
Я використав цей варіант, і я не рекомендував би його. Вилучення тексту у форматі PDF у Google не настільки добре, як багато альтернативних варіантів (особливо для не англійської мови), а також дуже сложно.
Бьорн Ліндквіст

10

PdfTextStream (який ви сказали, що переглядали) тепер безкоштовний для однопотокових програм. На мій погляд, його якість набагато краща, ніж інші бібліотеки (особливо для таких речей, як фанки, вбудовані шрифти тощо).

Крім того, ви повинні подивитися на Apache PDFBox , з відкритим кодом.


PdfTextStream не підтримується в Android. Чи є якісь хороші бібліотеки на кшталт цієї для Android?
FaisalAhmed

@FaisalAhmed, що з PDFBox?
Рено

Так, PdfBox також не підтримується в android .... і PdfTextStream, і PdfBox використовує частину awt, яка не підтримується в android
FaisalAhmed

Я використовую цю бібліотеку, яка добре працює на android github.com/TomRoush/PdfBox-Android
FaisalAhmed

6

Для вилучення тексту з PDF може використовуватися бібліотека Docotic.Pdf файлів у вигляді простого тексту або як набір текстових фрагментів з координатами для кожного фрагмента.

Docotic.Pdf може бути використаний для отримання зображень з PDF - файлів теж.

Відмова: Я працюю в Bit Miracle.


6

Один із коментарів тут використовував gs для Windows. Я мав певний успіх і з цим на Linux / OSX, із таким синтаксисом:

gs \
 -q \
 -dNODISPLAY \
 -dSAFER \
 -dDELAYBIND \
 -dWRITESYSTEMDICT \
 -dSIMPLE \
 -f ps2ascii.ps \
 "${input}" \
 -dQUIET \
 -c quit

Я використовував dSIMPLEзамість того, dCOMPLEXщо останній виводить 1 символ на рядок.


5

Оскільки питання стосується конкретно альтернативних інструментів для отримання даних з PDF як XML, то, можливо, вам буде цікаво ознайомитись з комерційним інструментом "ByteScout PDF Extractor SDK", який здатний зробити саме це: витягніть текст з PDF як XML разом з дані позиціонування (x, y) та шрифтова інформація:

Текст у вихідному PDF:

Products | Units | Price 

Вихід XML:

 <row>
 <column>
  <text fontName="Arial" fontSize="11.0" fontStyle="Bold" x="212" y="126" width="47" height="11">Products</text> 
  </column>
 <column>
  <text fontName="Arial" fontSize="11.0" fontStyle="Bold" x="428" y="126" width="27" height="11">Units</text> 
  </column>
 <column>
  <text fontName="Arial" fontSize="11.0" fontStyle="Bold" x="503" y="126" width="26" height="11">Price</text> 
  </column>
</row>

PS: крім того, він також розбиває текст на структуру на основі таблиці.

Розкриття інформації: Я працюю в ByteScout


3

Найкраще, про що я зараз можу подумати (у списку «простих» інструментів) - це Ghostscript (поточна версія v.8.71) та програма утиліти PostScript ps2ascii.ps. Ghostscript посилає його у своєму libпідкаталозі. Спробуйте це (у Windows):

gswin32c.exe ^
   -q ^
   -sFONTPATH=c:/windows/fonts ^
   -dNODISPLAY ^
   -dSAFER ^
   -dDELAYBIND ^
   -dWRITESYSTEMDICT ^
   -dCOMPLEX ^
   -f ps2ascii.ps ^
   -dFirstPage=3 ^
   -dLastPage=7 ^
   input.pdf ^
   -dQUIET ^
   -c quit

Ця команда обробляє сторінки 3-7 input.pdf. Прочитайте коментарі у самому ps2ascii.psфайлі, щоб побачити, що означають "дивні" цифри та додаткові відомості ( вони вказують на рядки, позиції, ширину, кольори, зображення, прямокутники, шрифти та розриви сторінок ... ). Щоб отримати "простий" текст, замініть -dCOMPLEXчастину на -dSIMPLE.


2
Як ви могли здогадатися, це лише тест ASCII. Хоча безкоштовно, не чудовий варіант для програмного забезпечення, яке ви плануєте використовувати іншими мовами, крім англійської.
userx

3
@userx: Як ви могли здогадатися, це вільне програмне забезпечення: тому доступний вихідний код. Можливо продовжити підтримку не-ASCII ...
Kurt Pfeifle

@userx: сьогодні я виявив "TET", інструментарій вилучення тексту з pdflib.com. Дивіться іншу мою відповідь.
Курт Пфайфл

ps2ascii з Ghostscript 9.07 чудово працював над моєю системою OpenBSD. Я щойно перетворив PDF-файл на 526 сторінках у звичайний текст. Тепер я можу легко зібрати та витягнути текст для нотаток. Я використав просту команду ps2ascii book.pdf notes.txt. Якщо ваш документ переважно ASCII, вам пощастить.
Клінт Пахл

3

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

https://gist.github.com/smalot/6183152

У деяких випадках командний рядок заборонений з міркувань безпеки. Тож рідний клас PHP може відповідати багатьом потребам.

Сподіваюся, це допомагає еверону





0

У моїх системах Macintosh я вважаю, що "Adobe Reader" робить досить хорошу роботу. Я створив на своєму робочому столі псевдонім, який вказує на "Adobe Reader.app", і все, що я роблю, - це скинути pdf-файл на псевдонім, який робить його активним документом у Adobe Reader, а потім із меню Файл, Я вибираю "Зберегти як текст ...", даю ім'я та де його зберегти, натискаю "Зберегти", і я закінчую.


5
ОП шукала рішення для вилучення тексту з pdf програмним шляхом . Ваша відповідь пропонує замість цього ручну процедуру.
mkl
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.