Ответ 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 и старше года. Если результаты не так, как вы ожидали, я бы попробовал сам попробовать последнюю версию.