Разработвам търсачка за настолен компютър, използвайки VB9 (VS2008) и Lucene.NET. Индексаторът в Lucene.NET приема само необработени текстови данни и не е възможно директно извличане на необработен текст от Microsoft Office (DOC, DOCX, PPT, PPTX) и PDF документи. Кой е най-добрият начин за извличане на необработени текстови данни от такива файлове?
Кой е най-добрият начин за анализиране на Microsoft Office и PDF документи?
Отговори (3)
Можете, подобно на Windows Desktop Search, да използвате компоненти, внедряващи интерфейса IFilter.
- Пример за използването му от .NET
- Връзки към реализации на IFilter
- Описание на интерфейса на IFilter
Тук мога да говоря само за MS Office документи. Има няколко начина да направите това:
- Използване на COM автоматизация
- Използване на конвертори, които извеждат документа в по-достъпен формат
- Използване на библиотеки на трети страни
- Използване на OpenXML SDK на Microsoft
COM автоматизацията има недостатъка, че не винаги е надеждна, главно защото приложенията са склонни да висят поради модални изскачащи диалогови прозорци.
Налични са конвертори за Word. Можете да проверите SDK за преобразуване на текст, наличен от Microsoft, който ще ви позволи да използвате преобразувателите на документи, идващи с Word, в самостоятелно приложение. Изисква малко C кодиране, но тъй като използвате същите машини за преобразуване като Office, ще получите резултати с висока точност. SDK може да бъде получен от http://support.microsoft.com/kb/111716.
За третата опция, използваща библиотеки на трети страни, може да искате да погледнете Apache POI или проекта b2xtranslator на SourceForge. Последният предоставя C# библиотека, която ви позволява да извличате текста от двоични документи на Word. Разработката на PowerPoint все още е в ранен стадий, но извличането на текст трябва вече да работи.
Последната опция би била да използвате OpenXML SDK на Microsoft. Това може да е предпочитаният/най-лесният начин. Потърсете мостри в Google. Можете също така да обработвате двоични документи, като първо ги конвертирате с помощта на Office Compatibility Pack (изтеглете и инсталирайте от Microsoft):
дума:
"C:\Program Files\Microsoft Office\Office12\wordconv.exe" -oice -nme <input file> <output file>
Excel:
"C:\Program Files\Microsoft Office\Office12\excelcnv.exe" -oice <input file> <output file>
PowerPoint:
"C:\Program Files\Microsoft Office\Office12\ppcnvcom.exe" -oice <input file> <output file>
За PDF можете да използвате компонента .NET PDF Reader на моята компания, който включва извличане на текст.
Това е точно кодът, който пишете, за да извлечете текста от PDF:
public String ReadTextFromPages(Stream s)
{
using (PdfTextDocument doc = new PdfTextDocument(s))
{
PdfTextReader rdr = doc.GetPdfTextReader();
return rdr.ReadToEnd();
}
}