2009-07-16 2 views
16

Я пытаюсь извлечь текст из файлов PDF с помощью Perl. Я использовал pdftotext.exe из командной строки (используя функцию Perl system) для извлечения текста из файлов PDF, этот метод работает нормально.Как извлечь текст из файла PDF в Perl?

Проблема в том, что у нас есть символы, такие как α, β и другие специальные символы в файлах PDF, которые не отображаются в сгенерированном txt-файле. Также в тексте добавляются несколько лишних пробелов.

Есть лучше и более надежный способ для извлечения текста из PDF-файлов таким образом, что текст будет включать в себя все символы, как α, β и т.д., и текст будет точно соответствовать тексту в формате PDF (т.е. без лишних пробелов)?

+0

Привет, ребята, спасибо за предложения. Я использую xpdf для извлечения текста из pdf-файлов с параметром -raw, который удаляет эти нежелательные пространства. Но теперь мы хотим преобразовать pdf-файлы в html-файлы для извлечения тегов форматирования html, таких как жирный курсив и т. Д. С текстом. Я попытался использовать pdf2html для этого, но не нашел его надежным, как теги, такие как sup и sub, где они отсутствуют. Теперь мы используем Acrobat Reader для сохранения PDF-файлов в виде html-файла, который дает нам все теги форматирования html. Есть ли способ использовать Acrobat reader в perl для сохранения нескольких файлов PDF в виде файлов html? Спасибо. –

+2

Acrobat Professional позволяет выполнять пакетные задания. Я понимаю, что вам кажется, что вам нужен свободный выход, но так как вы в значительной степени полагаетесь на извлечение PDF-файлов, получение одной лицензии сэкономило бы вам много времени и денег на этом этапе. – nlucaroni

ответ

3

Я не пользователь Perl, но я думаю, вам будет трудно найти лучший бесплатный экстрактор текста, чем pdftotext.

pdftotext обычно распознает символы не ASCII в порядке, возможно ли, что они извлекают их нормально, но приложение, которое вы используете для просмотра текстового файла, не использует правильную кодировку? Если pdftoetxt на окнах совпадает с файлом в моей Linux-системе, он по умолчанию экспортирует как utf-8.

2

getpdftext.pl; часть CAM::PDF.

+1

Да, но это не очень хорошо (я автор) –

+1

@ Крис Долан Это не * что * плохой либо ;-) –

-2

Посмотрите на PDFBox. Это библиотека, но я думаю, что в нее также входит инструмент для создания текста.

+0

поддерживает ли он perl ..? –

4

Возможно, вы никогда не сможете найти подходящее решение вашей проблемы. Формат PDF может кодировать текст либо как значения ASCII с примененным шрифтом, либо кодировать его как растровое изображение. Если инструмент, создавший ваш PDF, решил кодировать специальные символы в виде растрового изображения, вам не повезло (если вы не захотите войти в решения OCR, конечно).

+7

Это хуже, чем это - текст не нужно размещать на странице в порядке чтения. Его не нужно выкладывать прямолинейно. Написание простой команды поиска слов для Acrobat 1.0 заняло у меня 5 месяцев, и это было с людьми, которые создали все библиотеки поддержки и разработали формат в смежных офисах. Извлечение текста является подмножеством этой проблемы. – plinth

+0

Письма, не представленные символьными кодами, а вместо этого растровыми изображениями или векторной графикой, в наши дни действительно патологичны. Текст, не выкладываемый в порядке чтения, является обычным, но обычно результаты понятны. –

20

Эти модули можно получения идеальной текст экстракта из PDF

PDF::API2

CAM::PDF

CAM::PDF::PageText

От CPAN

my $pdf = CAM::PDF->new($filename); 
    my $pageone_tree = $pdf->getPageContentTree(1); 
    print CAM::PDF::PageText->render($pageone_tree); 

Этот модуль пытается извлечь последовательный текст с страницы PDF. Это не является надежным процессом, поскольку текст в формате PDF графически представлен в произвольном порядке. Этот модуль использует несколько эвристик, чтобы попытаться угадать, какой текст идет рядом с другим текстом, но может быть легко обманут, скажем, нижними индексами, не горизонтальным текстом, изменениями шрифта, полями формы и т. Д.

Все эти оговорки в стороне, это полезно для быстрого дампа текста из простого PDF-файла.

+7

Я автор CAM :: PDF, и я согласен с отказом от ответственности. Я построил извлечение текста по прихоти, и это оказалось намного сложнее, чем я ожидал. –

3

Ну, я пробовал 2-3 модуля perl, такие как CAM :: PDF, API2, но проблема остается прежней! Я разбираю файл PDF, содержащий основные страницы. Cam или API2 отлично разбирает простой текст. Тем не менее, они не могут разобрать фрагмент кода [фрагмент кода обычно находится в другом шрифте &, чем обычный текст].

1

Джеймс Хили является правильным. После попытки CAM :: PDF и PDF :: API2, первый из которых у меня был некоторый успех в чтении текста, загрузка pdftotext отлично поработала для ряда моих реализаций.

Если на окна выходят здесь и скачать Xpdf прекомпилированы бинарный: http://www.foolabs.com/xpdf/download.html

Затем, если вам нужно запустить это в PERL использование системы, например ,: системы ("C: \ Utilities \ xpdfbin-WIN- 3.04 \ bin64 \ pdftotext.exe $ saveName ");

где $ saveName - это полный путь к файлу PDF.

Этот надеюсь, что оставляет текстовый файл, который вы можете открыть и проанализировать в perl.

0

я попробовал этот модуль, который работает отлично подходит для специальных символов PDF ..

!/usr/bin/perl 
use strict; 
use warnings; 
use PDF::OCR::Thorough; 

my $filename = "pdf.pdf"; 

my $pdf = PDF::OCR::Thorough->new($filename); 
my $text = $pdf->get_text(); 
print "$text"; 
Смежные вопросы