Извлечение метаданных из старых файлов Word (начиная с версии 2.0)

Мне приходится извлекать метаданные из большого количества (мой небольшой рабочий образец содержит сотни, общее количество, вероятно, будет тысячами) файлов Microsoft Office, в основном из файлов Word.

Версии этих файлов Word идут от Word 2.0 до Word 2007.

Я должен сделать это в .net 3.5 (используя С#), и это локальное приложение winforms.

Думаю, я могу извлечь метаданные из самых последних с помощью OLE Automation (DsoFile.dll). Я успешно проделал это с некоторыми из них.

Проблема в том, что старые форматы не поддерживаются DsoFile. Они не используют OLE, вероятно.

Я много гуглил и обнаружил, что лучшим (вероятно, единственным) способом получить нужные мне данные было использование антислова (http://www.winfield.demon.nl/). С помощью антислова я могу вызвать его процесс и собрать его вывод. Он может извлечь некоторые данные, но не все, что мне нужно. Пример: антиворд дает мне только одну из сохраненных дат, а мне нужно их две.

Также есть wvware, но я думаю, что это только для Linux.

Другим вариантом был бы gnu libextractor, но я не могу найти способ использовать его в .net.

Office Interop был бы отчаянным последним средством. Я не проверял этот вариант, но я предполагаю, что это не вариант, когда нужно обрабатывать огромное количество файлов с достойной производительностью.

Кто-нибудь может помочь? Если вам нужно больше данных, просто спросите.

Извините за мой английский, я не носитель языка.


person osiris    schedule 20.10.2010    source источник


Ответы (1)


Раньше я работал над коммерческим офисным инструментом для извлечения метаданных и составления отчетов. Это непростая задача, особенно если вы также хотите удалить какие-либо из этих метаданных. Судя по звуку, вы хотите просто сообщить об этом, так что это лучше.

Начиная с word2000 файлы Word хранились (сохраняются) в составных документах OLE. В Интернете есть много документов о чтении этих файлов, но имейте в виду, что вы получите только небольшое подмножество метаданных. Большая часть «мяса» словарного документа хранится в виде больших двоичных двоичных объектов в составном файле документа, и формат этих двоичных объектов является проприетарным.

В Интернете есть документация для формата файла DOC.

http://msdn.microsoft.com/en-us/library/cc313118.aspx

Но это МАССИВНАЯ спецификация и безумно сложная. Тем не менее, вы можете найти только те части, с которыми вам нужно иметь дело.

С новыми файлами DOCX гораздо проще работать (и в них скрывается намного меньше метаданных).

person DarinH    schedule 02.11.2010
comment
+1 Спасибо за помощь. Для старых версий слов я в конечном итоге использовал Antiword для Linux с небольшим хаком, чтобы он мог извлечь недостающую дату, которая мне нужна, в файл xml и проанализировать ее с помощью С#, который я тоже создавал. Для более новых форматов я использовал (OLE) инструмент DsoFile.dll, доступный Microsoft. Метаданные, которые я извлекал, были простыми: автор, некоторые даты и т. д. Примечание: я не могу проголосовать за ваш ответ, у меня недостаточно репо. :( - person osiris; 03.11.2010
comment
Ах, да, этот инструмент dsofile. Это довольно удобно, но мне пришлось сделать НАМНОГО больше, чем просто извлечь составные элементы документа (сумасшедшие вещи, такие как обнаружение скрытого и белого текста на белом тексте, мертвых заголовков, именованных стилей и т. д.). Не беспокойтесь о голосовании. - person DarinH; 03.11.2010