OpenNLP Toolsによる英語の品詞解析

英文校正サイト [NativeChecker] では、入力した英文の各単語の品詞表示を行っています。
この品詞解析処理には、自然言語処理プロジェクト群であるOpenNLP中のOpenNLP Toolsを使っています。
OpenNLP Toolsによる品詞分析について、Web上に日本語の資料があまり見当たらないので、以下に手順を書いてみようと思います。

1. OpenNLP Toolsのダウンロード

以下のOpenNLPのサイトから[Download]をクリックして、OpenNLP Toolsをダウンロードします。
redirect

2. モデルファイルのダウンロード

同サイトの[Models]から、モデルファイルをダウンロードします。品詞解析に必要になるのは、以下のディレクトリ中のtag.bin.gzとtagdictです。

http://opennlp.sourceforge.net/models/english/parser/

3. opennlp.tools.lang.english.PosTaggerの使用

以下がサンプルプログラムです。1でダウンロードしたOpenNLP Tools中のjarファイルとsrcディレクトリ以下をクラスパスに追加する必要があります。また、2でダウンロードしたモデルファイルをC:\opennlpディレクトリに保存してあるものとします。

import java.io.IOException;

import opennlp.tools.lang.english.PosTagger;
import opennlp.tools.postag.POSDictionary;

public class Test {
    public static void main(String[] args) {
        try {
            POSDictionary dic = new POSDictionary(
                "C:\\opennlp\\tagdict", false);
            PosTagger tagger = new PosTagger(
                "C:\\opennlp\\tag.bin.gz", dic);

            String pos = tagger.tag("convention over configuration");
            System.out.println(pos);
        }
        catch(IOException e) {
            e.printStackTrace();
        }
    }
}

このプログラムを実行すると、次の出力が得られます。

convention/NN over/IN configuration/NN

入力した英文の各単語の後ろに、スラッシュ区切りで品詞情報がくっついてきます。NNとかINというラベルの意味が良く分かりませんが、これはPenn Treebank品詞体系に基づく表記です。

http://bulba.sdsu.edu/jeanette/thesis/PennTags.html

上のPenn Treebank解説ページによると、

IN - Preposition or subordinating conjunction
NN - Noun, singular or mass

となっていますので、INは前置詞または従属接続詞、NNは単数形の名詞または不加算名詞ということが分かります。

このように、OpenNLP Toolsを利用することで、Javaプログラムに品詞解析処理を非常に簡単に組み込むことができます。