Извлечение чистого текста из PDF в формат TXT
Чтобы конвертировать PDF в TXT и получить чистый текст без лишнего оформления, используйте утилиту pdftotext (для цифровых документов) или движок OCR, такой как Tesseract (для сканов). Ключевой этап — постобработка: удаление лишних переносов строк, двойных пробелов и артефактов верстки с помощью регулярных выражений. Выбор метода зависит от того, можно ли выделить текст в исходном файле курсором мыши.
PDF отлично сохраняет визуальную структуру, но мешает редактированию. При простом копировании часто появляются разрывы строк посередине предложений, «битые» абзацы и служебные символы. Ниже рассмотрены надежные способы получения структурированного, но «чистого» текстового файла.
Оглавление
Как определить тип PDF-файла
Прежде чем выбирать инструмент, проверьте природу документа:
- Откройте файл в любом просмотрщике.
- Попробуйте выделить фрагмент текста мышью.
- Выделяется: Это текстовый (цифровой) PDF. Текст уже распознан, нужно лишь извлечь его и убрать форматирование.
- Не выделяется (или выделяется как картинка): Это сканированный PDF. Требуется оптическое распознавание символов (OCR).
Метод 1: Цифровые PDF (pdftotext)
Для файлов с встроенным текстовым слоем лучшим решением является использование консольной утилиты pdftotext (входит в пакет poppler-utils). Она игнорирует шрифты, цвета и позиции, выдавая поток символов.
Установка
- Linux:
sudo apt-get install poppler-utils - macOS:
brew install poppler - Windows: Скачайте бинарные файлы Poppler и добавьте путь к
binв переменные среды.
Команда конвертации
Базовый синтаксис:
pdftotext input.pdf output.txt
Ключи для чистого результата
Чтобы минимизировать проблемы с версткой, используйте дополнительные параметры:
| Параметр | Описание |
|---|---|
-layout | Сохраняет приблизительное физическое расположение текста (полезно для таблиц, но может добавить лишние пробелы). |
-raw | Игнорирует порядок чтения колонок, выдает текст в порядке хранения в файле (часто дает более «сырой», но предсказуемый результат для последующей очистки). |
-enc UTF-8 | Явно задает кодировку вывода (рекомендуется для кириллицы). |
Рекомендация: Для максимального «очищения» от верстки лучше использовать режим без -layout, а затем править абзацы скриптом.
Метод 2: Сканированные документы (OCR)
Если текст не выделяется, его нужно распознать. Стандарт индустрии среди бесплатных решений — Tesseract OCR.
Подготовка изображений
Качество OCR напрямую зависит от качества входных данных.
- Конвертируйте PDF в изображения (PNG/JPG/TIFF) с разрешением 300 DPI.
- Убедитесь, что текст контрастный, а фон белый.
Использование Tesseract
Пример команды для русского языка:
tesseract input_page.png output_text -l rus+eng
Где -l rus+eng указывает на наличие русского и английского текста.
Для многостраничных PDF удобно использовать обертки вроде pdf2image (Python) или онлайн-конвертеры PDF в JPG, а затем применять Tesseract пакетно.
Очистка текста: удаление мусора
Даже лучшие конвертеры оставляют артефакты: разрывы строк внутри предложений, лишние пробелы, знаки дефисации. Автоматизируйте очистку.
Основные проблемы и решения (Regex)
-
Лишние переносы строк (разрывы внутри абзацев) Часто текст выглядит так:
Это пример разорванного предложения.
Решение: Заменить одиночный перенос строки на пробел, а двойной (конец абзаца) оставить. Логика: Найти
\n, перед которым нет пустой строки, и заменить на пробел. -
Двойные и тройные пробелы Решение: Заменить все последовательности из 2+ пробелов на один пробел. Regex:
\s{2,}→ -
Неразрывные пробелы и спецсимволы В PDF часто встречаются символы
или юникод-пробелы. Решение: Привести все виды пробельных символов к обычному ASCII пробелу (код 32). -
Дефисы переноса Слова вида
инфор- мация. Решение: Удалить дефис и пробел/перенос после него, если они находятся внутри слова.
Пример простой обработки на Python
Если вы работаете с большими объемами, простой скрипт на Python сэкономит часы ручной правки:
import re
def clean_text(text):
# Замена различных видов пробелов на обычный
text = re.sub(r'[\xa0\u2000-\u200b\u202f\u205f\u3000]', ' ', text)
# Удаление переносов слов (дефис + пробел/перенос)
text = re.sub(r'(\w)-\s+(\w)', r'\1\2', text)
# Объединение разорванных строк (упрощенно)
# Заменяем одиночный перенос строки на пробел
text = re.sub(r'(?<!\n)\n(?!\n)', ' ', text)
# Удаление множественных пробелов
text = re.sub(r' {2,}', ' ', text)
# Удаление пустых строк в начале и конце
return text.strip()
Онлайн-сервисы vs Локальное ПО
| Критерий | Локальное ПО (pdftotext, Tesseract) | Онлайн-конвертеры |
|---|---|---|
| Конфиденциальность | Высокая (данные не покидают ПК) | Низкая (риск утечки персональных данных) |
| Скорость | Зависит от мощности ПК, быстро для пакетных задач | Зависит от интернета и очереди на сервере |
| Качество очистки | Требует настройки постобработки | Часто выдают «грязный» текст с сохранением верстки |
| Сложность | Требует навыков командной строки | Просто: загрузил → скачал |
Никогда не загружайте в онлайн-конвертеры документы с персональными данными, паспортными сведениями, финансовой отчетностью или коммерческой тайной. Используйте только локальные инструменты.
Частые ошибки при конвертации
-
Игнорирование кодировки Результат содержит «кракозябры» вместо кириллицы. Решение: Всегда явно указывайте кодировку UTF-8 при экспорте (
-enc UTF-8в pdftotext). -
Попытка распознать скан как текст Использование
pdftotextна сканированном документе выдаст пустой файл или набор случайных символов. Решение: Всегда проверяйте тип файла перед выбором инструмента. -
Сохранение табличной структуры в TXT TXT не поддерживает ячейки. Таблицы превращаются в нечитаемую кашу. Решение: Если таблицы критичны, конвертируйте PDF в CSV или Excel, а не в TXT. Для TXT лучше вручную или скриптом заменять разделители столбцов на табуляцию или тире.
-
Отсутствие проверки результата Автоматические методы не идеальны. Решение: Всегда выборочно сверяйте первые, последние и средние страницы полученного TXT с оригиналом.
FAQ
Можно ли конвертировать PDF в TXT через Microsoft Word? Да. Откройте PDF в Word (Файл → Открыть). Word выполнит конвертацию. Затем скопируйте текст и вставьте в Блокнот. Минус: Word часто искажает сложную верстку и добавляет много лишних разрывов страниц.
Почему в TXT файле много пустых строк? Это артефакты верстки PDF (межстрочные интервалы, отступы). Используйте поиск и замену: найдите два символа новой строки подряд и замените на один, повторяя процедуру до исчезновения пустот.
Какой инструмент лучше для книг?
Для книг с простым потоком текста лучше всего подходит pdftotext с последующей очисткой regex-ами. Для сложных журналов с колонками лучше использовать специализированные программы типа Adobe Acrobat Pro (экспорт в Rich Text Format с последующим сохранением в TXT), так как они лучше понимают порядок чтения колонок.
Безопасно ли использовать бесплатные онлайн-конвертеры? Только для публичных, неконфиденциальных данных. Файлы часто хранятся на серверах компании от нескольких часов до неопределенного срока. Для приватных документов используйте только оффлайн-софт.