如何仅从.doc和.docx文件中提取纯文本?



谁知道他们可以推荐什么,以便从.doc.docx中提取纯文本?

我发现了这个-不知道是否有其他建议?

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

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

我在命令行中找到了fu

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

LibreOffice

一个选项是libreoffice/openoffice在headless模式下(确保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.

Apache 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)。

尝试Apache Tika。它支持使用基于java的库(其中包括Apache POI)的大多数文档格式(每种MS Office格式,OpenOffice/LibreOffice格式,PDF等)。使用起来很简单:

java -jar tika-app-1.4.jar --text ./my-document.doc

Try "或"antiword-xp-rb"h1> 最喜欢的是antiword: http://www.winfield.demon.nl/

这里有一个类似的项目,声称支持docx:

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

我发现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
}

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

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

相关内容

  • 没有找到相关文章

最新更新