web-dev-qa-db-ja.com

.docおよび.docxファイルからプレーンテキストのみを抽出する方法は?

.docまたは.docxからプレーンテキストのみを抽出するために推奨できることは誰でも知っていますか?

私は this を見つけました-他に何か提案があるかどうか疑問に思いましたか?

42
docextract

純粋なプレーンテキスト(私の要件)が必要な場合は、必要なのは

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

command line f で見つけたもの

Docxファイルを解凍し、実際のドキュメントを取得してから、すべてのxmlタグを取り除きます。明らかにすべてのフォーマットは失われます。

50
rob

LibreOffice

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

別のオプションは 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を使用)。

28
ccpizza

Apache Tika を試してください。 Javaベースのライブラリ(特に、 Apache POI )を使用して、ほとんどのドキュメント形式(Office形式、OpenOffice/LibreOffice形式、PDFなど)をサポートしています。使い方はとても簡単です:

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

11
molnarg

私のお気に入りはアンチワードです:

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

そして、docxのサポートを主張する同様のプロジェクトを次に示します。

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

10
Chris Eberle

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
}
5
Andre

私は最近この問題に対処し、OpenOffice/LibreOfficeコマンドラインツールが本番環境で信頼できないことを発見しました(数千のドキュメントが処理され、同時に数十のドキュメントが処理されました)。

最終的に、軽量のラッパー DocRipper を作成しました。これははるかに高速で、フォーマットせずに.doc、.docx、および.pdfからすべてのテキストを取得します。 DocRipperは、Antiword、grep、pdftotextを使用してテキストを取得し、返します。

1
Paul

Docxの場合はどうですか http://libopc.codeplex.com/

1
JasonPlutext