2012-04-16 14 views
9

OpenNLPのNameFinder APIのサンプルドキュメントを使用しています。私は日食に「文書」を、これを持参する場合(「文書」ではない)変数は私に変数を言って、エラーを与えているがOpenNLP名前ファインダ

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

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

    nameFinder.clearAdaptiveData() 
} 

:名前ファインダーを初期化した後のドキュメントは、入力されたテキストのために次のコードを使用しています文書は解決できません。 'documents'配列変数を参照しているドキュメントは何ですか?このエラーがなくなるためにtxtファイルを保持する 'ドキュメント'という配列を初期化する必要がありますか?

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

答えて

16

OpenNLP documentationは、入力テキストを文書、文章およびトークンに分割する必要があると述べています。あなたが提供したコードは、いくつかの文書を扱う方法を示しています。

文書が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))); 
} 

あなたはOpenNLP documentationドキュメントからSentenceDetectorとトークナイザを使用する方法を学ぶことができます。

+0

返信いただきありがとうございます。私はそれを接続したが、まだエラーが発生します: "型の不一致:要素型の文字列から文字列[]"に変換できず、文章変数が5行目で私にエラーを起こしています:for(String [] sentence:sentences){ – Chris

+0

はい、そこにエラーだったfor(String sentence []:sentences)から[]を削除しました。ありがとうございました。 – wcolen

+0

wcolen、ご協力いただきありがとうございます。配列の構文[]を削除するときの唯一の問題は、findメソッドが配列として引数を取るので、文章がうまく動作しないため、次の行が表示されることです。Span nameSpans [] = nameFinder.find(sentence); – Chris

関連する問題