Инструмент PDF в текст или библиотека Java?
Мне нужно преобразовать PDF в обычный текст (это «протокол голосования» от нашего окружного регистратора). Файлы большие (около 2000 страниц) и в основном содержат таблицы. Как только я переведу его в текст, я воспользуюсь написанной мной программой, чтобы проанализировать его и поместить данные в базу данных. Я пробовал использовать функцию «Сохранить как текст» в Adobe Reader, но она не так точна, как хотелось бы, особенно при разделении данных таблицы в CSV. Итак, какие-нибудь рекомендации по инструментам или библиотекам Java, которые помогут?
Ответов (7)7
Я всегда находил инструменты xpdf очень полезными.
Мы успешно используем преобразование PDF в текст для преобразования бизнес-документов PDF для использования в EDI. Опция сохранения макета хорошо работает, чтобы держать вещи в удобном месте для анализа в программе.
Учитывая заголовок вопроса: Apache Tika очень хорошо сработал для меня, чтобы извлечь простой текст из PDF. Однако я не использовал его для получения текста из таблиц.
Для PDF на самом деле используется PDFBox . Но помимо PDF, он делает то же самое для других форматов, таких как Microsoft Word (doc и docx), Excel и PowerPoint, OpenOffice.org/LibreOffice ODT, HTML, XML и многих других . Его AutoDetectParser упрощает получение текста из любого ввода.
А если нужно обработать получившийся текст (например, передать его Mahout для классификации), можно использовать ParsingReader, чтобы получить результат в Reader, пока фоновый процесс извлекает его. Наконец, при извлечении контента он также заполняет найденные метаданные:
public Reader getPlainTextReader(final InputStream is) {
try {
Detector detector = new DefaultDetector();
Parser parser = new AutoDetectParser(detector);
ParseContext context = new ParseContext();
context.set(Parser.class, parser);
Metadata metadata = new Metadata();
Reader reader = new ParsingReader(parser, is, metadata, context);
for (String name : metadata.names()) {
for (String value : metadata.getValues(name)) {
logger.debug("Document {}: {}", name, value);
}
}
return reader;
} catch (IOException e) {
...
}
}
Два варианта:
iText - кажется, класс PdfTextExtractor может делать то, что вы хотите.
Apache PDFBox утверждает, что «извлечение PDF в текст» является его главной особенностью. Специально для этого ( исходного кода )есть инструмент командной строки ExtractText , основанный на его классе PDFTextStripper . И еще есть руководство по извлечению текста из PDFBox!
Трудно сказать, не зная макета страниц в вашем PDF-документе.
Я бы посоветовал загрузить и попробовать как iText, так и PDBox. Вы найдете примеры извлечения текста для обоих на их веб-сайтах - у вас должен быть экстрактор, работающий менее 30 минут, если вы разбираетесь в Java.
Начните с PDFBox, поскольку его возможности извлечения текста лучше, чем у iText.
Кто-то еще упомянул xpdf, и это может быть полезно для вас. Это библиотека C с некоторыми инструментами командной строки, построенными вокруг нее. Он имеет ряд средств извлечения текста, и вы можете достаточно легко отформатировать вывод. Опять же, это действительно зависит от макета вашей страницы.
PDFTextStream - это наша библиотека Java + .NET для извлечения содержимого из документов PDF; вы могли бы дать ему шанс. Кроме того, он предоставляет некоторые элементарные утилиты для извлечения данных из таблиц , которые дополняют возможности PDFTextStream по обнаружению таблиц. Это ни в коем случае не общее решение (хотя мы тоже работаем над одним из них!), Но если табличные данные четко определены (например, строки и столбцы, ограниченные линиями и т. Д.), Вы можете найти то, что сейчас есть правильное решение.