2010-10-20 118 views
2

我必须从很多(我的小型工作示例有数百个,总数可能会是数千个)中提取元数据,主要是Word文件。从旧Word文件中提取元数据(从2.0开始)

这些文件Word版本去从Word 2.0到Word 2007

我必须这样做,在.net 3.5(使用C#),这是一个当地的WinForms应用程序。

我想可以从最新的OLE自动化(DsoFile.dll)中提取元数据。我和他们中的一些人成功做到了。

问题是DsoFile不支持较早的格式。可能他们不使用OLE。

我做了大量的谷歌搜索,我发现获得我想要的数据的最好方法是使用反义词(http://www.winfield.demon.nl/)。 与antiword我可以调用其进程并收集其输出。它可以提取一些数据,但不是我所需要的。 例如:antiword只给我一个存储的日期,我需要其中的两个。

还有wvware,但我想这只是linux-only。

另一种选择是GNU libextractor,但我不能找到一种方法,在使用.NET上

办公室互操作将是一个绝望的最后一招。我还没有测试过这个选项,但是我猜测这并不是一个当想要处理大量文件并且性能不错的选项。

任何人都可以帮忙吗?如果你需要更多的数据,请问。

对不起,我不是母语的人。

回答

2

我曾经在商业办公室元数据提取和报告工具上工作。这不是一件容易的事情,尤其是如果你还想删除任何元数据。从它的声音,你只是想报告它,所以这样更好。

从word2000开始,Word文件被存储在OLE复合文档中。网上有很多关于阅读这些文件的文档,但请记住,它只会为您提供一小部分元数据。 word doc中的大多数“肉”在复合doc文件中以大二进制blob存储,并且这些blob的格式是专有的。

网页上有DOC文件格式的文档。

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

但它是一个巨大的天赋和疯狂的复杂。尽管如此,你也许能够找出你需要处理的部分。

较新的DOCX文件更容易处理(并且潜藏的元数据也少得多)。

+0

+1感谢您的帮助。对于旧版本的版本,我最终在Linux上使用了antiword,并使用了一些小技巧,这样就可以将我需要的缺失日期提取到xml文件,并使用我正在构建的c#进行解析。对于我使用微软提供的(OLE)DsoFile.dll工具的较新格式。我提取的元数据是简单的东西:作者,一些日期等 旁注:我不能upvote你的答案,我没有足够的回购。 :( – osiris 2010-11-03 09:55:18

+0

啊,是的,那个dsofile工具。这非常方便,但我不得不提取复合文档元素(像检测白色文本上的隐藏和白色,死头,命名样式等疯狂的东西)。不用担心upvote。 – DarinH 2010-11-03 14:38:10