9

OpenNLP のNameFinder API サンプル ドキュメントを使用しています。Name Finder を初期化した後、ドキュメントは入力テキストに次のコードを使用します。

for (String document[][] : documents) {

  for (String[] sentence : document) {
    Span nameSpans[] = nameFinder.find(sentence);
    // do something with the names
  }

  nameFinder.clearAdaptiveData()
}

ただし、これをEclipseに持ち込むと、「ドキュメント」(「ドキュメント」ではない)変数により、変数ドキュメントを解決できないというエラーが表示されます。「ドキュメント」配列変数で参照しているドキュメントは何ですか? このエラーを解消するには、txt ファイルを保持する「documents」という配列を初期化する必要がありますか?

ご協力ありがとうございました。

4

1 に答える 1

16

OpenNLPのドキュメントには、入力テキストをドキュメント、文、およびトークンに分割する必要があると記載されています。あなたが提供したコードは、複数のドキュメントを処理する方法を示しています。

最初のドキュメントが不要なドキュメントが 1 つしかない場合は、トークンの配列として構成された、文の配列を持つ内側のドキュメントのみが必要です。

ドキュメントから文の配列を作成するには、OpenNLP SentenceDetector を使用できます。各文について、OpenNLP Tokenizer を使用してトークンの配列を取得できます。

コードは次のようになります。

// somehow get the contents from the txt file 
//      and populate a string called documentStr

String sentences[] = sentenceDetector.sentDetect(documentStr);
for (String sentence : sentences) {
    String tokens[] = tokenizer.tokenize(sentence);
    Span nameSpans[] = nameFinder.find(tokens);
    // do something with the names
    System.out.println("Found entity: " + Arrays.toString(Span.spansToStrings(nameSpans, tokens)));
}

SentenceDetector と Tokenizer の使用方法については、OpenNLP のドキュメントドキュメントを参照してください。

于 2012-04-17T01:58:29.513 に答える