53

任何人都知道他们可以推荐的任何东西,以便从 a .docor中提取纯文本.docx

我找到了这个- 想知道是否还有其他建议?

4

7 回答 7

73

如果您想要纯文本(我的要求),那么您只需要

unzip -p some.docx word/document.xml | sed -e 's/<[^>]\{1,\}>//g; s/[^[:print:]]\{1,\}//g'

我在命令行 fu中找到的

它解压缩 docx 文件并获取实际文档,然后剥离所有 xml 标签。显然所有格式都丢失了。

于 2014-09-02T09:46:24.923 回答
43

自由办公室

一个选项是无头模式下的libreoffice /openoffice(确保首先关闭所有其他 libreoffice 实例):

libreoffice --headless --convert-to "txt:Text (encoded):UTF8" mydocument.doc

有关更多详细信息,请参见此链接:http ://ask.libreoffice.org/en/question/2641/convert-to-command-line-parameter/

有关 libreoffice 过滤器的列表,请参阅http://cgit.freedesktop.org/libreoffice/core/tree/filter/source/config/fragments/filters

由于 openoffice 命令行语法有点过于复杂,所以有一个方便的包装器可以使过程更容易:unoconv

阿帕奇 POI

另一种选择是Apache POI — 一个得到很好支持的 Java 库,它与 antiword 不同,它可以读取、创建和转换.doc.docx.xls.xlsx.ppt.pptx文件。

.doc以下是将文档或.docx文档转换为纯文本的最简单的 Java 代码:

import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;

import org.apache.poi.POITextExtractor;
import org.apache.poi.extractor.ExtractorFactory;
import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
import org.apache.xmlbeans.XmlException;

public class WordToTextConverter {
    public static void main(String[] args) {
        try {
            convertWordToText(args[0], args[1]);
        } catch (ArrayIndexOutOfBoundsException aiobe) {
            System.out.println("Usage: java WordToTextConverter <word_file> <text_file>");
        }
    }

    public static void convertWordToText(String src, String desc) {
        try {
            FileInputStream fs = new FileInputStream(src);
            final POITextExtractor extractor = ExtractorFactory.createExtractor(fs);
            FileWriter fw = new FileWriter(desc);
            fw.write(extractor.getText());
            fw.flush();
            fs.close();
            fw.close();

        } catch (IOException | OpenXML4JException | XmlException e) {
            e.printStackTrace();
        }
    }
}


# Maven dependencies (pom.xml):

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>my.wordconv</groupId>
<artifactId>my.wordconv.converter</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.17</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.17</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-scratchpad</artifactId>
        <version>3.17</version>
    </dependency>
</dependencies>
</project>

注意:您需要将 apache poi 库添加到类路径中。在 ubuntu/debian 上可以安装这些库sudo apt-get install libapache-poi-java——这会将它们安装在/usr/share/java. 对于其他系统,您需要下载库并将存档解压缩到您应该使用的文件夹而不是/usr/share/java. 如果您使用 maven/gradle(推荐选项),则包含org.apache.poi 依赖项,如代码片段所示。

相同的代码适用于两者.doc,并且.docx通过检查二进制流来选择所需的转换器实现。

编译上面的类(假设它在默认包中,并且 apache poi jar 在 下/usr/share/java):

javac -cp /usr/share/java/*:. WordToTextConverter.java

运行转换:

java -cp /usr/share/java/*:. WordToTextConverter doc.docx doc.txt 

一个可克隆的 gradle 项目,它提取所有必要的依赖项并生成包装器 shell 脚本(带有gradle installDist)。

于 2012-09-03T10:52:23.310 回答
14

试试Apache Tika它使用基于 Java 的库(其中包括Apache POI )支持大多数文档格式(每种 MS Office 格式、OpenOffice/LibreOffice 格式、PDF 等)。使用非常简单:

java -jar tika-app-1.4.jar --text ./my-document.doc
于 2014-01-02T14:45:04.387 回答
10

我最喜欢的是antiword:

http://www.winfield.demon.nl/

这是一个声称支持 docx 的类似项目:

https://github.com/rainey/antiword-xp-rb/wiki

于 2011-04-15T03:14:29.967 回答
5

我发现wv比 catdoc 或 antiword 更好。它可以处理 .docx 并转换为文本或 html。这是我添加到我的 .bashrc 中的一个函数,用于在终端中临时查看文件。根据需要更改它。

# open word in less (ie worl document.doc)
worl() {
    DOC=$(mktemp /tmp/output.XXXXXXXXXX)
    wvText $1 $DOC
    less $DOC
    rm $DOC
}
于 2013-10-31T11:29:08.883 回答
1

对于 docx, http ://libopc.codeplex.com/ 怎么样

于 2011-04-16T00:33:38.830 回答
1

我最近处理了这个问题,发现 OpenOffice/LibreOffice 命令行工具在生产中不可靠(处理了数千个文档,同时处理了数十个文档)。

最终,我构建了一个轻量级的包装器DocRipper,它速度更快,可以从 .doc、.docx 和 .pdf 中抓取所有文本而无需格式化。DocRipper 利用 Antiword、grep 和 pdftotext 抓取文本并将其返回。

于 2014-07-23T16:22:27.807 回答