Как лучше всего анализировать документы Microsoft Office и PDF?

Я разрабатываю поисковую систему для настольных компьютеров, используя VB9 (VS2008) и Lucene.NET. Индексатор в Lucene.NET принимает только необработанные текстовые данные, и невозможно напрямую извлечь необработанный текст из документов Microsoft Office (DOC, DOCX, PPT, PPTX) и PDF. Как лучше всего извлечь необработанные текстовые данные из таких файлов?


person user57175    schedule 21.01.2009    source источник


Ответы (3)


Вы можете, как и Windows Desktop Search, использовать компоненты, реализующие интерфейс IFilter.

person David Tischler    schedule 21.01.2009
comment
Если я могу просто добавить к этому - из любви ко всему, что свято, используйте FoxIt PDF IFilter. 32-битная версия бесплатна. Это намного быстрее и стабильнее, чем у Adobe. foxitsoftware.com/pdf/ifilter/index.html. - person Ryan Ische; 09.04.2009

Здесь я могу говорить только о документах MS Office. Есть несколько способов сделать это:

  • Использование COM-автоматизации
  • Использование конвертеров, которые выводят документ в более доступном формате
  • Использование сторонних библиотек
  • Использование Microsoft OpenXML SDK

Недостаток автоматизации COM заключается в том, что она не всегда надежна, главным образом потому, что приложения имеют тенденцию зависать из-за модальных всплывающих диалоговых окон.

Конвертеры доступны для Word. Вы можете проверить Text Converter SDK, доступный от Microsoft, который позволит вам использовать конвертеры документов, поставляемые с Word, в отдельном приложении. Требуется некоторое кодирование C, но, поскольку вы используете те же механизмы преобразования, что и Office, вы получите высококачественные результаты. SDK можно получить на странице http://support.microsoft.com/kb/111716.

Для третьего варианта с использованием сторонних библиотек вы можете взглянуть на Apache POI или проект b2xtranslator на SourceForge. Последний предоставляет библиотеку C#, которая позволяет извлекать текст из двоичных документов Word. Разработка PowerPoint все еще находится на ранней стадии, но извлечение текста уже должно работать.

Последним вариантом будет использование Microsoft OpenXML SDK. Это может быть предпочтительным/самым простым способом. Поищите в Google образцы. Вы также можете работать с двоичными документами, предварительно преобразовав их с помощью пакета обеспечения совместимости Office (скачайте и установите с сайта Microsoft):

Слово:

"C:\Program Files\Microsoft Office\Office12\wordconv.exe" -oice -nme <input file> <output file>

Эксель:

"C:\Program Files\Microsoft Office\Office12\excelcnv.exe" -oice <input file> <output file>

Силовая установка:

"C:\Program Files\Microsoft Office\Office12\ppcnvcom.exe" -oice <input file> <output file>
person Dirk Vollmar    schedule 21.01.2009

Для PDF вы можете использовать компонент моей компании .NET PDF Reader, который включает извлечение текста.

Это именно тот код, который вы пишете для извлечения текста из PDF:

public String ReadTextFromPages(Stream s)
{
    using (PdfTextDocument doc = new PdfTextDocument(s))
    {
        PdfTextReader rdr = doc.GetPdfTextReader();
        return rdr.ReadToEnd();
     }
}
person plinth    schedule 21.01.2009