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

Как извлечь текст из документов Pdf, Word и Excel?

Мне понадобится библиотека .NET, чтобы я мог извлекать текстовые данные из файлов PDF, Excel и Word.

В идеале бесплатный инструмент!

Вы порекомендовали бы что-нибудь?

большое спасибо,

4b9b3361

Ответ 1

Как кто-то, кто потратил много дней на поиски бесплатных решений для (почти) этой точной проблемы, могу честно сказать вам, что вы не найдете бесплатную библиотеку, которая будет хорошо извлекать текст из всех этих форматов. Единственная библиотека, которую я знаю об этом, отлично справляется со всеми этими форматами (и более) - это коммерческая библиотека, и она на самом деле не является родной для .NET, это библиотека С++/COM с С++/CLI. NET.

Каковы некоторые параметры?

  • iTextSharp - Это абсолютно фантастика в извлечении текста из PDF файлов. Хотя более поздние версии этой библиотеки были коммерчески дружественными (LGPL), авторы решили вместо этого, что они хотят взимать плату за программное обеспечение, поэтому они вместо этого выпустили его под AGPL, поэтому, если вы не хотите выпустить весь свой исходный код, вы, вероятно, не хотите использовать одну из этих версий. Тем не менее, последняя версия (4.1.6), лицензированная под LGPL, может быть найдена по всему Интернету. Этот вопрос SO имеет ссылку на версию, которая находится под LGPL.

  • PdfBox - Еще одна библиотека PDF. Этот, ИМО, лучше, потому что он под лицензией Apache 2.0. Есть несколько проблем с ним, поскольку иногда (возможно, редко) не будет работать так же хорошо, как iTextSharp. Я приписываю это больше тому факту, что это более новая библиотека, чем что-либо еще. Тем не менее, мой опыт работы с этой библиотекой - это несколько месяцев назад. Этот проект активно развивается, и только в прошлом месяце было решено 52 вопроса. Я буду следить за этим. Обратите внимание, что это java-библиотека. (Продолжайте читать ниже для получения дополнительной информации о том, почему я включил это.)

  • POI или NPOI - Это библиотеки, специально написанные для офисных документов Microsoft, в частности форматы pre-2007, форматы файлов OLE. Он поддерживает новые форматы OpenXML, хотя я не уверен, насколько зрелой эта часть библиотеки. POI - это версия java (читайте ниже для получения дополнительной информации о том, почему я включил это.), Где NPOI - это родная версия .NET. Тем не менее, NPOI поддерживает только документы excel, где POI может выполнять извлечение текста на еще много типов.

  • Open XML SDK 2.0 - библиотека для чтения/изменения документов Office 2007+ (незашифрованных OpenXML) создала мою Microsoft самостоятельно! Это потрясающая библиотека для работы с этими документами. Тем не менее, это библиотека нижнего уровня и, следовательно, на самом деле (насколько я знаю), имеет ли он все класс выделения текста. Там довольно хороший пример (я не уверен, что он охватывает некоторые случаи, такие как текст в таблицах и т.д.), Извлечение текста из документа Word в этом SO-ответе

  • Tika - Еще раз, другая библиотека Java (я не говорю вам о java-библиотеках без причины Продолжайте читать!:)), и это будет как можно ближе к "одной библиотеке" для извлечения текста, как вы можете получить. Tika может извлекать метаданные и структурированный текстовый контент из разных файлов, используя существующие библиотеки разбора. Он фактически использует POI и PdfBox под капотом для офисных и PDF-документов.

Некоммерческого

  • dtSearch - Это библиотека, с которой я очень хорошо знаком. Он выполняет фантастическую работу и может анализировать смехотворное количество форматов файлов. Тем не менее, это стоит денег и, вероятно, слишком велико для того, что вам нужно. Это на самом деле то, что нам нужно, но мы пытаемся избавиться от него сами, потому что мы используем его только для синтаксического анализа (на самом деле это полнотекстовый поисковик), и там есть множество библиотек разбора, которые мы можем использовать или модифицировать в соответствии с нашими потребностями, но он честно удаляет все эти другие библиотеки из воды. Как я уже упоминал ранее, это также не собственный код .NET. Оболочка С++/CLI используется для intertop между DLL и .NET runtime.

iFilters могут использоваться и упоминаются в нескольких других ответах SO по различным вопросам, но текст, который вы получите, неструктурирован. Иногда это просто плохо... нечитаемо для людей, по крайней мере. Я считаю, что iFilters также устарели, и в зависимости от проблем с лицензией вы не сможете перераспределять их.


Почему я упоминал все эти библиотеки Java? Ну, по двум причинам. Во-первых, нет бесплатных эквивалентов .NET, которые близки к качеству этих библиотек Java. Во-вторых, вы можете использовать эти библиотеки в .NET(я лично сделал это самостоятельно с этими библиотеками, поэтому я могу хотя бы ручаться за это), используя IKVM. Это реализация Java внутри .NET. Вот хороший пример по использованию IKVM для преобразования Tika в сборку .NET, которая может быть использована в вашем проекте. Возможно, самая страшная вещь в IKVM заключается в том, что она просто работает!

EDIT: Я забыл, что автор этого блога фактически разместил код и преобразовал библиотеки в проект github. Итак, если вы хотите быстро проверить это, вы можете сделать это там. Тем не менее, это гораздо более старая версия Tika и старше года. Если результаты не так, как вы ожидали, я бы попробовал сам попробовать последнюю версию.

Ответ 2

Вы можете посмотреть toxy.codeplex.com. Toxy - это чистая среда для извлечения текста .NET.

Это очень простое использование Toxy. Например, чтобы извлечь файл электронной таблицы Excel с именем test.xlsx.

ParserContext context = new ParserContext("test.xlsx");
ISpreadsheetParser parser = ParserFactory.CreateSpreadsheet(context);
ToxySpreadsheet ss = parser.Parse();
//then you can start handle the result - a ToxySpreadsheet object

Ответ 4

Для извлечения текста из pdf itextsharp является удивительным. это бесплатный и открытый источник.

чтобы прочитать текст из pdf, очень просто использовать эту библиотеку.

Ответ 5

Я бы порекомендовал Aspose Total для этого. Несколько лет назад я сделал проект по выполнению в значительной степени именно того, что вы просите, и по сравнению с использованием материалов Office Interop между различными версиями Office (до изменения XML). Aspose была самой надежной библиотекой. Вам, вероятно, придется сделать некоторое OCR, основанное на том, о чем вы говорите. Это не дешево, но я нашел их API довольно солидным, и он работает на большинстве версий типов файлов, о которых вы спрашиваете. Вы должны иметь возможность использовать бесплатную пробную версию, чтобы узнать, подходит ли она для вашего проекта. У меня нет привязки к Aspose, кроме того, что я использовал их инструменты в рабочей среде.

Назначить Total

Ответ 6

Если вам просто нужен текст, вы можете использовать iFilter. Это не один продукт, но он бесплатный. iFilter используется для извлечения текста для поддержки службы индексирования Microsoft. Найдите на iFilter.NET С# примеры использования. Если вам нужен форматированный текст, это не правильный инструмент. Он извлекает исходный текст только с большим количеством разрывов строк.