2016-06-22 3 views
0

には:アパッチティカ抽出するjarファイルを介したメタデータではなく、私は次の行を使用してティカアプリ実行可能なjarファイルを経由してメタデータを抽出することができましたサンプルコード

java -jar tika-app-1.13.jar --metadata example_received_regular.msg 

これは、すべてのメタデータを出力します。しかし、私がJavaプログラムで同じファイルを簡単に抽出しようとすると、私はそれを取得しません。

public static void main(String[] args) throws Exception { 
    Class<?> clazz = Class.forName("org.apache.tika.parser.ocr.TesseractOCRParser"); 
    FileInputStream des = new FileInputStream("/Users/jason/docstore/example_received_regular.msg"); 
    Tika tika = new Tika(); 
    AutoDetectParser parser = new AutoDetectParser(); 
    BodyContentHandler handler = new BodyContentHandler(-1); 
    String detected = tika.detect(des); 
    Metadata tikaMetadata = new Metadata(); 
    parser.parse(des, handler, tikaMetadata, new ParseContext()); 
    String[] names = tikaMetadata.names(); 
    for (String name : names) { 
     System.out.println(name + ": " + tikaMetadata.get(name)); 
    } 
    System.out.println(detected); 
} 

私が最初に考えたのは、ティカ・パーサライブラリが何らかの形で、実行時に使用できなかったこと、したがって、私は最初の行にTesseractOCRParserをロードしようとしますが、そのクラスのロードだけで大丈夫でした。次の出力では、このプログラムの結果を実行すると:

X-Parsed-By: org.apache.tika.parser.EmptyParser 
Content-Type: application/octet-stream 
application/x-tika-msoffice 

これは、私はどこでも見つけることができるティカメタデータ抽出の最も基本的な例のように思えます。抽出は、この例ではなく、瓶でうまくいく。何か不足していますか?

答えて

3

TikaCLIプログラムは、上記の例のFileInputStreamとは異なり、TikaInputStreamオブジェクトを使用してメタデータを入力します。

あなたは順番に以下の変更は、メタデータの値を印刷することができます:

public static void main(String[] args) throws Exception { 
    File file = new File("/Users/jason/docstore/example_received_regular.msg"); 
    AutoDetectParser parser = new AutoDetectParser(); 
    BodyContentHandler handler = new BodyContentHandler(-1); 
    Metadata tikaMetadata = new Metadata(); 
    InputStream input = TikaInputStream.get(file, tikaMetadata); 
    parser.parse(input, handler, tikaMetadata, new ParseContext()); 
    String[] names = tikaMetadata.names(); 
    Arrays.sort(names); 
    for (String name : names) { 
     System.out.println(name + ": " + tikaMetadata.get(name)); 
    } 
} 
+0

おかげで多くのことを、TikaInputStreamが働い使用します。あなたの例のget(ファイル・ファイル、メタデータ・メタデータ)メソッドは実際には廃止されましたので、get(パス・パス、メタデータ・メタデータ)バージョンを使用しました。 – json4639

+1

TikaInputStreamは、メタデータオブジェクト(ファイル/パスが送信された場合)にのみファイル長を追加し、その他のメタデータは追加しません。私は、ファイルストリームが解析前に正しくリセットされていなかったということが起こったと思います。通常、TikaInputStreamはmark/resetを使って正しいことを行います。常にそれをお勧めします。 –

関連する問題