Подтвердить что ты не робот

Как извлечь текст из файла PDF в Perl?

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

Ответ 7

Джеймс Хили прав. После попытки 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.

Ответ 8

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

Ответ 9

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