.doc
または.docx
からプレーンテキストのみを抽出するために推奨できることは誰でも知っていますか?
私は this を見つけました-他に何か提案があるかどうか疑問に思いましたか?
純粋なプレーンテキスト(私の要件)が必要な場合は、必要なのは
unzip -p some.docx Word/document.xml | sed -e 's/<[^>]\{1,\}>//g; s/[^[:print:]]\{1,\}//g'
command line f で見つけたもの
Docxファイルを解凍し、実際のドキュメントを取得してから、すべてのxmlタグを取り除きます。明らかにすべてのフォーマットは失われます。
1つのオプションは、ヘッドレスモードでの 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コマンドライン構文は少し複雑すぎるため、プロセスを簡単にする便利なラッパー noconv があります。
別のオプションは 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
clonable gradle project これは、必要なすべての依存関係をプルし、ラッパーシェルスクリプトを生成します(gradle installDist
を使用)。
Apache Tika を試してください。 Javaベースのライブラリ(特に、 Apache POI )を使用して、ほとんどのドキュメント形式(Office形式、OpenOffice/LibreOffice形式、PDFなど)をサポートしています。使い方はとても簡単です:
Java -jar tika-app-1.4.jar --text ./my-document.doc
私のお気に入りはアンチワードです:
そして、docxのサポートを主張する同様のプロジェクトを次に示します。
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を使用してテキストを取得し、返します。
Docxの場合はどうですか http://libopc.codeplex.com/