またはからプレーンテキストのみを抽出するために推奨できることを知っている人はいます.doc
か.docx
?
私はこれを見つけました- 他の提案があったかどうか疑問に思いましたか?
純粋なプレーンテキスト(私の要件)が必要な場合は、必要なのは
unzip -p some.docx word/document.xml | sed -e 's/<[^>]\{1,\}>//g; s/[^[:print:]]\{1,\}//g'
コマンドラインfuで見つけたもの
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のコマンドライン構文は少し複雑すぎるため、プロセスを簡単にする便利なラッパーunoconvがあります。
もう1つのオプションはApachePOIです。これは、アンチワードとは異なり、、、、、、、ファイルの読み取り、作成、変換が可能な、十分にサポートされている.doc
Java.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>
注:apachepoiライブラリをクラスパスに追加する必要があります。ubuntu / debianでは、ライブラリをsudo apt-get install libapache-poi-java
インストールできます—これにより、の下にライブラリがインストールされ/usr/share/java
ます。他のシステムの場合は、ライブラリをダウンロードして、の代わりに使用する必要があるフォルダーにアーカイブを解凍する必要があります/usr/share/java
。maven / gradle(推奨オプション)を使用する場合は、コードスニペットに示されているようにorg.apache.poiの依存関係を含めます。
同じコードが両方.doc
で.docx
機能し、必要なコンバーターの実装がバイナリストリームを検査することによって選択されるためです。
上記のクラスをコンパイルします(デフォルトのパッケージにあり、apache poi jarsが下にあると仮定します/usr/share/java
):
javac -cp /usr/share/java/*:. WordToTextConverter.java
変換を実行します。
java -cp /usr/share/java/*:. WordToTextConverter doc.docx doc.txt
必要なすべての依存関係をプルし、ラッパーシェルスクリプトを生成するクローン可能なgradleプロジェクト(を使用)gradle installDist
。
Apache Tikaを試してください。Java ベースのライブラリ (特にApache POI )を使用して、ほとんどのドキュメント形式 (すべての MS 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 を利用してテキストを取得し、返します。