LoginSignup
3
4

More than 5 years have passed since last update.

事情があって、各種ファイルからテキストから抜き出して、Solrに入れるという作業をすることになりました。
Solrにもファイルを渡して、解析をしてくれるI/Fがありますがタイミングをプログラムでコントロールしたかったので、Solrにやらせず文書登録機能からSolrをアップデートさせる方向で考えました。
どうせなら同じライブラリを使おうと思い、Apache LuceneのサブプロジェクトのApache Tikaを使うことにしたのですが、情報が少ないのでテストプログラムを書いてみました。

pom.xmlでの依存関係

pom.xml
        <dependency>
            <groupId>org.apache.tika</groupId>
            <artifactId>tika-core</artifactId>
            <version>1.5</version>
        </dependency>

        <dependency>
            <groupId>org.apache.tika</groupId>
            <artifactId>tika-parsers</artifactId>
            <version>1.5</version>
        </dependency>

Parseする場合にByteArrayInputStreamの形に変換する必要があるので、手っ取り早くやるために、Commons-IOを使うために以下も追加しました。

pom.xml
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>

例外処理を除いたコード片

実際にパースするだけであれば、簡単で、以下のコードで取得できます。分割しているのでJUnitコードをほとんど載せます。ファイルパスをタイプごとに管理しているMapの詳細は割愛します。

TikaTest.java
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.io.FileUtils;
import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;
import org.apache.tika.sax.WriteOutContentHandler;
import org.junit.Test;
import org.xml.sax.SAXException;

public class TIkaTest {

    @Test
    public void test() throws IOException, SAXException, TikaException {
        Parser parser = new AutoDetectParser();
        Metadata metadata = new Metadata();
        StringWriter writer = new StringWriter();

        ByteArrayInputStream bytes = getTestData("doc");

        parser.parse(bytes,
                     new WriteOutContentHandler(writer),
                     metadata,
                     new ParseContext());

        //このcontentが目的の文字列。Solrの形態素解析をおこなうフィールドに格納して、解析させる。
        String content = writer.toString();


    }


    private ByteArrayInputStream getTestData(String type) throws IOException{

        //ファイル種別をキーとして、テスト用のファイルパスを値とするMapからパスを取り出して、読み込む。        
        return read(TYPES.get(type));

    }

    private ByteArrayInputStream read(String path) throws IOException{

        File file = new File(path);

        return new ByteArrayInputStream(FileUtils.readFileToByteArray(file));


    }
3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4