私は最近UIMAについて知りました(http://uima.apache.org/)。トークン化、文の分割、スピーチの一部のタグ付けなどの単純なNLPタスクで有望に見えます。
パイプラインにOpenNLPコンポーネントを使用している既に構成されている最小Javaサンプルを手に入れることができました。
コードは次のようになります:
public void ApplyPipeline() throws IOException, InvalidXMLException,
ResourceInitializationException, AnalysisEngineProcessException {
XMLInputSource in = new XMLInputSource(
"opennlp/OpenNlpTextAnalyzer.xml");
ResourceSpecifier specifier = UIMAFramework.getXMLParser()
.parseResourceSpecifier(in);
AnalysisEngine ae = UIMAFramework.produceAnalysisEngine(specifier);
JCas jcas = ae.newJCas();
jcas.setDocumentText("This is my text.");
ae.process(jcas);
this.doSomethingWithResults(jcas);
jcas.reset();
ae.destroy();
}
private void doSomethingWithResults(JCas jcas) {
AnnotationIndex<Annotation> idx = jcas.getAnnotationIndex();
FSIterator<Annotation> it = idx.iterator();
while (it.hasNext()) {
System.out.println(it.next().toString());
}
}
opennlptextanalyzer.xmlからの抜粋:
<delegateAnalysisEngine key="SentenceDetector">
<import location="SentenceDetector.xml" />
</delegateAnalysisEngine>
<delegateAnalysisEngine key="Tokenizer">
<import location="Tokenizer.xml" />
</delegateAnalysisEngine>
Javaコードは、次のような出力を生成します。
Token
sofa: _InitialView
begin: 426
end: 435
pos: "NNP"
ToString()メソッドが使用する各注釈オブジェクトから同じ情報を取得しようとしています。私はすでにUIMAのソースコードを調べて、値がどこから来ているのかを理解しています。それらのような作品を取得しようとする私の試みは、いかなる方法でも賢くはありません。
JCASオブジェクトから情報を抽出する簡単な例を見つけるのに苦労しています。
たとえば、すべての注釈が私の事後またはSentencesPlitterによって生成される方法を得る方法を探しています。
私は推測する
List<Feature> feats = it.next().getType().getFeatures();
値を取得する開始ですが、UIMAがプリミティブタイプのクラスを所有しているため、注釈クラスのToStringメソッドのソースコードでさえ、顔の平手打ちのように読み取られます。
基本的なUIMAのものを使用するJavaコードはどこにあり、優れたチュートリアル(フレームワーク自体のJavadocを除く)はどこにありますか?