53

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

私はこれを見つけまし- 他の提案があったかどうか疑問に思いましたか?

4

7 に答える 7

73

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

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

コマンドラインfuで見つけたもの

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

于 2014-09-02T09:46:24.923 に答える
43

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のコマンドライン構文は少し複雑すぎるため、プロセスを簡単にする便利なラッパーunoconvがあります。

Apache POI

もう1つのオプションはApachePOIです。これは、アンチワードとは異なり、、、、、、、ファイルの読み取り、作成、変換が可能な、十分にサポートされている.docJava.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

于 2012-09-03T10:52:23.310 に答える
14

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

java -jar tika-app-1.4.jar --text ./my-document.doc
于 2014-01-02T14:45:04.387 に答える
10

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

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

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

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

于 2011-04-15T03:14:29.967 に答える
5

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
}
于 2013-10-31T11:29:08.883 に答える
1

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

于 2011-04-16T00:33:38.830 に答える
1

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

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

于 2014-07-23T16:22:27.807 に答える