如何从.doc&.docx文件中提取纯文本? (unix)

任何人都知道他们可以推荐的任何东西,只是从.doc或.docx中提取纯文本?

我发现这个最好的方式来从Word文档中提取文本,而不使用COM /自动化? – 想知道有没有其他build议?

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

谢谢

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

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

我在命令行find了fu

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

LibreOffice的

一种select是在无头模式下的libreoffice / openoffice(确保libreoffice的所有其他实例先closures):

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

欲了解更多详情,请参阅此链接: http : //ask.libreoffice.org/en/question/2641/convert-to-command-line-parameter/

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

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

Apache POI

另一种select是Apache POI – 一个受到良好支持的Java库,它不像antiword可以读取,创build和转换.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: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.16</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.16</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-scratchpad --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-scratchpad</artifactId> <version>3.16</version> </dependency> 

我最喜欢的是antiword:

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

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

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

docx2txt是为Debian打包的。

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

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

我发现wv比catdoc或antiword更好。 它可以处理.docx并转换为文本或HTML。 这是我添加到我的.bashrc中的function,以临时查看terminal中的文件。 根据需要更改它。

 # 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命令行工具在生产中不可靠(成千上万个文档同时处理,几十个)。

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