首页 文章

如何从.doc和.docx文件中提取纯文本? (unix)[关闭]

提问于
浏览
46

任何人都知道他们可以推荐什么,以便从.doc或.docx中提取纯文本?

我发现这个Best way to extract text from a Word doc without using COM/automation? - 想知道是否还有其他建议?

速度并不重要,我们甚至可以使用具有一些API的网站上传和提取文件,但我一直无法找到 .

谢谢

8 回答

  • 2

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

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

    我发现command line fu

    它解压缩docx文件并获取实际文档,然后删除所有xml标记 . 显然所有格式都丢失了 .

  • 2

    LibreOffice

    一种选择是无头模式下的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 - 一个支持良好的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 下安装它们 . 对于其他系统,您需要download库并将存档解压缩到您应该使用的文件夹而不是 /usr/share/java . 如果您使用maven / gradle(推荐选项),请包含org.apache.poi dependencies,如代码段所示 .

    相同的代码将适用于 .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
    
  • 10

    docx2txt是为Debian打包的 .

  • 24

    我最喜欢的是反词:

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

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

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

  • 15

    试试Apache Tika . 它支持使用基于Java的库(以及其他,Apache POI)的大多数文档格式(每种Office格式,OpenOffice / LibreOffice格式,PDF等) . 它使用起来非常简单:

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

  • 5

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

    # open word in less (ie worl document.doc)
    worl() {
        DOC=$(mktemp /tmp/output.XXXXXXXXXX)
        wvText $1 $DOC
        less $DOC
        rm $DOC
    }
    
  • 10

    对于docx,如何http://libopc.codeplex.com/

  • 46

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

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

相关问题