doc*_*act 42 unix text-extraction doc extract docx
任何人都知道他们可以推荐什么,以便从.doc或.docx中提取纯文本?
我发现这种最好的方法从Word文档中提取文本而不使用COM /自动化? - 想知道是否还有其他建议?
速度并不重要,我们甚至可以使用具有一些API的网站上传和提取文件,但我一直无法找到.
谢谢
rob*_*rob 50
如果你想要纯文本(我的要求),那么你需要的只是
unzip -p some.docx word/document.xml | sed -e 's/<[^>]\{1,\}>//g; s/[^[:print:]]\{1,\}//g'
Run Code Online (Sandbox Code Playgroud)
我在命令行fu找到了
它解压缩docx文件并获取实际文档,然后删除所有xml标记.显然所有格式都丢失了.
ccp*_*zza 28
一种选择是无头模式下的libreoffice/openoffice(确保首先关闭libreoffice的所有其他实例):
libreoffice --headless --convert-to "txt:Text (encoded):UTF8" mydocument.doc
Run Code Online (Sandbox Code Playgroud)
欲了解更多详情,请参见例如此链接: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 -一个很好的支持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>Run Code Online (Sandbox Code Playgroud)
注意:您需要将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
Run Code Online (Sandbox Code Playgroud)
运行转换:
java -cp /usr/share/java/*:. WordToTextConverter doc.docx doc.txt
Run Code Online (Sandbox Code Playgroud)
mol*_*arg 12
试试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中的函数,用于在终端中临时查看文件。根据需要进行更改。
# open word in less (ie worl document.doc)
worl() {
DOC=$(mktemp /tmp/output.XXXXXXXXXX)
wvText $1 $DOC
less $DOC
rm $DOC
}
Run Code Online (Sandbox Code Playgroud)