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

|                                                                                                                   关闭。这个问题是题外话。它当前不接受答案。                                                      
已邀请:
如果您想要纯文本格式(我的要求),那么您所需要的就是
unzip -p some.docx word/document.xml | sed -e \'s/<[^>]\\{1,\\}>//g; s/[^[:print:]]\\{1,\\}//g\'
我在命令行福找到的 它解压缩docx文件并获取实际文档,然后剥离所有xml标签。显然,所有格式都会丢失。     
图书馆 一个选项是无头模式下的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。 Apache POI 另一个选择是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 Tika。它使用基于Java的库(其中包括Apache POI)支持大多数文档格式(每种Office格式,OpenOffice / LibreOffice格式,PDF等)。使用非常简单:
java -jar tika-app-1.4.jar --text ./my-document.doc
    
我最喜欢的是反字词: 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
}
    
对于docx,http://libopc.codeplex.com/     
我最近处理了这个问题,发现OpenOffice / LibreOffice命令行工具在生产中不可靠(处理了成千上万的文档,同时处理了数十个文档)。 最终,我构建了一个轻量级的包装器DocRipper,该包装器速度更快,并且无需格式化即可获取.doc,.docx和.pdf的所有文本。 DocRipper利用Antiword,grep和pdftotext抓取文本并将其返回。     

要回复问题请先登录注册