Как извлечь текст из файла PDF в Perl?
Я пытаюсь извлечь текст из файлов PDF с помощью Perl. Я использовал pdftotext.exe
из командной строки (т.е. С помощью функции Perl system
) для извлечения текста из файлов PDF, этот метод отлично работает.
Проблема в том, что у нас есть символы типа & alpha;, & beta; и другие специальные символы в файлах PDF, которые не отображаются в сгенерированном txt файле. Также в тексте добавляются несколько лишних пробелов.
Есть ли лучший и надежный способ извлечь текст из PDF файлов, чтобы текст включал все символы, такие как & alpha;, & beta; и т.д., и текст будет точно соответствовать тексту в формате PDF (т.е. без лишних пробелов)?
Ответы
Ответ 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 отлично разбирает простой текст. Однако они не могут разобрать фрагмент кода [фрагмент кода обычно имеет разные шрифты и кодировку, чем обычный текст).
Ответ 5
Существует getpdftext.pl; часть CAM:: PDF.
Ответ 6
PDF2TXT.py
Это то, что я использую, хотя это Python, он работает безупречно.
http://www.unixuser.org/~euske/python/pdfminer/index.html
Ответ 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. Это библиотека, но я думаю, что в нее также входит инструмент для создания текста.