Как извлечь текст из файла PDF в Perl? - PullRequest
18 голосов
/ 16 июля 2009

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

Проблема в том, что у нас есть такие символы, как & alpha ;, & beta; и другие специальные символы в файлах PDF, которые не отображаются в сгенерированном текстовом файле. Также несколько лишних пробелов добавляются случайным образом в тексте.

Существует ли лучший и более надежный способ извлечения текста из файлов PDF, чтобы в текст входили все символы, такие как & alpha ;, & beta; и т. д. и текст будет точно соответствовать тексту в PDF (т. е. без лишних пробелов)?

Ответы [ 9 ]

20 голосов
/ 16 июля 2009

Эти модули вы можете получить извлечение текста из 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.

5 голосов
/ 16 июля 2009

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

3 голосов
/ 20 мая 2011

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

3 голосов
/ 16 июля 2009

Существует getpdftext.pl ; часть CAM :: PDF .

3 голосов
/ 16 июля 2009

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

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

1 голос
/ 23 февраля 2015

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

Если в Windows перейдите сюда и загрузите предварительно скомпилированный двоичный файл в формате xpdf: http://www.foolabs.com/xpdf/download.html

Тогда, если вам нужно запустить это в системе использования Perl, например: system ("C: \ Utilities \ xpdfbin-win-3.04 \ bin64 \ pdftotext.exe $ saveName");

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

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

1 голос
/ 26 мая 2011

PDF2TXT.py Это то, что я использую, хотя это Python, он работает безупречно.

http://www.unixuser.org/~euske/python/pdfminer/index.html

0 голосов
/ 12 мая 2016

Я попробовал этот модуль, который отлично работает для специальных символов 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";
0 голосов
/ 16 июля 2009

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

...