Apache tikaを使ってみる

2012-04-25T00:00:00+09:00 Java

一応、tika-app.jarってのを使えば出来るんですけど、とにかくJavaりたいんだっという欲求により(ry

pom.xmlを作成

<?xml version="1.0" ?>
<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/maven-v4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>net.kinjouj.tika</groupId>
    <artifactId>kinjouj_tika</artifactId>
    <version>1.0</version>
    <name>kinjouj_tika</name>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.apache.tika</groupId>
            <artifactId>tika-core</artifactId>
            <version>1.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tika</groupId>
            <artifactId>tika-parsers</artifactId>
            <version>1.1</version>
        </dependency>
    </dependencies>
</project>

Client.java

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;

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.BodyContentHandler;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;

public class Sample {

    public static void main(String[] args){
        StringWriter out = new StringWriter();

        InputStream is = null;

        try {
            is = new BufferedInputStream(new FileInputStream(new File("sample.doc")));

            Parser parser = new AutoDetectParser();
            ContentHandler handler = new BodyContentHandler(out);

            Metadata metadata = new Metadata();

            parser.parse(is, handler, metadata, new ParseContext());

            for (String name : metadata.names()) {
                String value = metadata.get(name);

                if (value != null) {
                    System.out.println("Metadata Name:  " + name);
                    System.out.println("Metadata Value: " + value);
                }
            }

            System.out.println(out.toString());
        } catch (IOException e) {
            e.printStackTrace();
        } catch (TikaException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } finally {
            if (is != null) {
                try {
                    is.close();
                } catch(IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

とりあえずWordなファイルを解析してみる。まぁ実行はやってみてのお楽しみということで

追記1

gistに載せてたのを忘れたので書いとく。コードのDLとかはそこからの方が楽かと(若干コード違うので注意)

https://gist.github.com/2507727

追記

とりあえず適当にネットで探したパワーポイントファイルからテキストを抽出してどれくらい出来るのか試してみた

Node.jsのrequire Hadoop+Cassandra (3) - Mapper & ReducerでCassandra -