OpenNLP Toolsによる英語の解析: 構文解析編
以前のエントリで、Javaの自然言語処理ライブラリOpenNLP Toolsを使った英語の品詞解析(POS tagging)について書いたんですが、構文解析についても方法を知りたがっている方が多いようなので、手順を簡単に説明します。
1. OpenNLP Toolsのダウンロード
以下のOpenNLPのサイトからOpenNLP Toolsをダウンロードします。
2. モデルファイルのダウンロード
http://opennlp.sourceforge.net/models/english/parser/
上記ページ内の全てのファイルをダウンロードして、1つのディレクトリに保存します。
3. opennlp.tools.lang.english.TreebankParserの使用
以下が、TreebankParserを使って"I am a student."を構文解析するサンプルです。1でダウンロードしたOpenNLP Tools中のjarファイルとsrcディレクトリ以下をクラスパスに追加する必要があります。また、2のファイルをC:\opennlpに保存してあるものとします。
import opennlp.tools.lang.english.TreebankParser; import opennlp.tools.parser.Parse; import opennlp.tools.parser.ParserME; import opennlp.tools.util.Span; public class Test { public static void main(String[] args) throws Exception { ParserME parser = TreebankParser.getParser("C:\\opennlp", true, false, ParserME.defaultBeamSize, ParserME.defaultAdvancePercentage); String input = "I am a student."; Parse[] parses = TreebankParser.parseLine(input, parser, 1); for (Parse parse : parses) { output(parse); } } private static void output(Parse parse) { if (parse.getChildCount() == 0) { Span span = parse.getSpan(); String word = parse.getText().substring( span.getStart(), span.getEnd()); System.out.print(word); } else { System.out.print("(" + parse.getType() + " "); for (Parse child : parse.getChildren()) { output(child); } System.out.print(")"); } } }
プログラムを実行すると、以下の出力が得られます。
(TOP (S (NP (PRP I))(VP (VBP am)(NP (DT a)(NN student.)))))
これが、"I am a student."を解析した結果の構文木になります。NP, PRP, VPといったラベルの意味は品詞解析のときと同じで、Penn Treebank準拠です。