用 C++/Qt 编写的程序中的 RTF/doc/docx 文本提取

Posted

技术标签:

【中文标题】用 C++/Qt 编写的程序中的 RTF/doc/docx 文本提取【英文标题】:RTF / doc / docx text extraction in program written in C++/Qt 【发布时间】:2009-07-26 14:41:02 【问题描述】:

我正在用Qt/C++ 编写一些程序,我需要从Microsoft Word/RTF/docx 文件中读取文本。

我正在寻找一些可以进行提取的命令行程序。可能是几个程序。

我找到的最接近的是DocToText,但是它有几个错误,所以我不能使用它。 我还在 PC 上安装了 Microsoft Word。也许有一些方法可以使用它来阅读文本(不知道如何使用COM)?

【问题讨论】:

【参考方案1】:

现在,这很丑陋而且很hacky,但它似乎对我来说适用于基本的文本提取。显然,要在 Qt 程序中使用它,您必须为其生成一个进程等,但我一起破解的命令行是:

unzip -p file.docx | grep '<w:t' | sed 's/<[^<]*>//g' | grep -v '^[[:space:]]*$'

那就是:

unzip -p file.docx: -p == "unzip to stdout"

grep ':只抓取包含 ' 是 Word 2007 XML 元素中的“文本”能看出来)

sed 's/>//g'*:删除标签内的所有内容

grep -v '^[[:space:]]$'*: 删除空行

可能有一种更有效的方法可以做到这一点,但它似乎在我测试过的少数文档上对我有用。

据我所知,unzip、grep 和 sed 都有适用于 Windows 和任何 Unix 的端口,因此它应该是合理的跨平台的。尽管有点丑陋 ;)

【讨论】:

这适用于 docx 文件...但取决于您对 openxml sdk 的了解程度...如果您只想要文本而不需要太复杂...这可以工作【参考方案2】:

试试Apache Tika

【讨论】:

正是我想要的,可以将 .doc 和 .docx 转换为纯文本。【参考方案3】:

我建议不要使用 COM,因为这首先会破坏像 Qt 这样的可移植库的使用。

您可能想要使用经典的catdoc 或类似的工具,例如wvWare。

请注意,虽然 catdoc 作者声称 catdoc 在 Windows 下不起作用,但有一个posting of 2001 which states the opposite。

【讨论】:

【参考方案4】:

要阅读 .doc 文件,您可以使用 structured storage API。 .doc 基本上是一个结构化的存储库,其中包含与文档的各个部分相对应的各种流。 请注意,这是一个非常复杂的 API,即使使用此 API,.doc 文件也可能看起来非常混乱。 当然,这仍然只是 Windows,但至少不是 COM。只是一个普通的旧 C API。

【讨论】:

我正在尝试独立于平台。而且我认为有几个程序可以做这些事情,但需要找到。还是谢谢【参考方案5】:

这可能会有所帮助。它是跨平台的,有一个 API http://www.winfield.demon.nl/

否则,如果这仅适用于 Windows,则 iFilter 方法是可行的方法。它将允许您解析系统上具有 iFilter 的任何内容。这是http://the-lazy-programmer.com/blog/?p=8 的示例。我已经从 C# 端使用了相当多的 iFilter。

【讨论】:

另外,您可以尝试wvware.sourceforge.net 获取 wvLib。它被 abiword 使用

以上是关于用 C++/Qt 编写的程序中的 RTF/doc/docx 文本提取的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 快速将 (.rtf|.doc) 文件转换为 Markdown 语法

在 xcode/ios 中以编程方式编辑 RTF/DOC 文件

用Qt Creator 编写GUI程序, 源代码用UTF-8编码, 如何用qDebug()输出中文?

一个简单的Qt词典程序

qt 只能写c++程序吗,不能写c语言的程序吗,要写c只能用 gtk吗?

使用 Qt gui 绑定 C 代码 [重复]