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

Извлечение текста из PDF файлов в С#

Довольно просто мне нужно вырезать текст из нескольких PDF файлов (довольно много на самом деле), чтобы анализировать содержимое, прежде чем вставлять его в базу данных SQL.

Я нашел несколько довольно отрывочных бесплатных библиотек С#, которые выполняют какую-то работу (лучший использует iTextSharp), но есть и ошибки в форматировании, а некоторые символы скремблированы и много времени есть пробелы ('') EVERYWHERE - внутри слов, между каждой буквой, огромные блоки из них занимают несколько строк, все это кажется немного случайным.

Есть ли какой-либо простой способ сделать это, что я полностью игнорирую (весьма вероятно!) или это немного сложная задача, которая включает в себя преобразование извлеченных байтовых значений в буквы надежно?

Приветствия,

Дункан

4b9b3361

Ответ 2

Возможно, есть некоторые трудности в этом надежно. Проблема в том, что PDF - это формат презентации, который придает важность хорошей типографии. Предположим, вы просто хотели вывести одно слово: Нажмите.

Механизм рендеринга PDF может выводить это как 2 отдельных вызова, как показано в этом псевдокоде:

moveto (x1, y); output ("T")
moveto (x2, y); output ("ap")

Это будет сделано, потому что кернинг по умолчанию (межбуквенный интервал) между буквами T и a может быть неприемлем для механизма рендеринга, или это может быть добавление или удаление некоторого микропространства между символами для получения полностью оправданной строки, Что в конечном итоге приводит к тому, что фактические фрагменты текста, найденные в PDF, часто являются не полными словами, а их частями.

Ответ 3

Взгляните на Tika на DotNet, доступный через Nuget: https://www.nuget.org/packages/TikaOnDotnet.TextExtractor/

Это обертка вокруг очень хорошей библиотеки Tika java с использованием IKVM. Очень прост в использовании и обрабатывает большое количество файлов, отличных от PDF, включая старые и новые офисные форматы. Он автоматически выберет синтаксический анализатор на основе расширения файла, поэтому он будет таким же простым, как:

var text = new TextExtractor().Extract(file.FullName).Text;

Ответ 4

Вы можете попробовать Toxy, структуру для извлечения текста/данных в .NET. В Toxy 1.0 поддерживается поддержка PDF. Подробнее см. http://toxy.codeplex.com

Ответ 5

Вы можете попробовать Docotic.Pdf library (отказ от ответственности: я работаю для Bit Miracle), чтобы извлечь текст из файлов PDF. Библиотека использует некоторые эвристики для извлечения красивого текста без нежелательных пробелов между буквами в словах.

Пожалуйста, взгляните на образец, который показывает как извлечь текст из PDF.

Ответ 6

Если вы ищете "бесплатную" альтернативу, просмотрите PDF Clown. Я лично использовал подход, основанный на iFilter, и, похоже, он отлично работает, если вам нужно будет легко поддерживать другие типы файлов. Пример кода здесь.

Ответ 7

Если вы обрабатываете PDF файлы с целью импорта данных в базу данных, я предлагаю рассмотреть ByteScout PDF Extractor SDK. В число полезных функций входят

  • обнаружение таблиц;
  • извлечение текста в виде CSV, XML или форматированного текста (с дополнительным восстановлением макета);
  • текстовый поиск с поддержкой регулярных выражений;
  • низкоуровневый API для доступа к текстовым объектам

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: я связан с ByteScout