2012-04-16 6 views
9

Ich verwende das NameFinder API-Beispieldokument von OpenNLP. Nach der Initialisierung verwendet den Namen Finder die Dokumentation den folgenden Code für die Eingabe von Text:OpenNLP Name Finder

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

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

    nameFinder.clearAdaptiveData() 
} 

Jedoch, wenn ich dies in Eclipse bringen die ‚Dokumente‘ (nicht ‚Dokument‘) Variable gibt mir eine Fehlermeldung, die Variable Dokumente können nicht aufgelöst werden. Auf welche Dokumentation bezieht sich die Array-Variable 'Dokumente'? Muss ich ein Array namens "Dokumente" initialisieren, das txt-Dateien für diesen Fehler enthält?

Vielen Dank für Ihre Hilfe.

Antwort

16

Die OpenNLP documentation besagt, dass der Eingabetext in Dokumente, Sätze und Token segmentiert werden sollte. Der Code, den Sie zur Verfügung gestellt haben, veranschaulicht, wie Sie mit mehreren Dokumenten umgehen.

Wenn Sie nur ein Dokument haben, brauchen Sie nicht das erste für, nur das innere mit dem Array von Sätzen, das sich aus einem Array von Token zusammensetzt.

Um ein Array von Sätzen aus einem Dokument zu erstellen, können Sie den OpenNLP-Satzdetektor verwenden, und für jeden Satz können Sie OpenNLP Tokenizer verwenden, um das Token-Array zu erhalten.

Ihr Code wird wie folgt aussehen:

// 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))); 
} 

können Sie lernen, wie die SentenceDetector zu verwenden und die Tokenizer von OpenNLP documentation Dokumentation.

+0

Vielen Dank für Ihre Antwort! Ich steckte das ein, aber immer noch Fehler: "Typenkonflikt: kann nicht vom Elementtyp String in String []" konvertiert werden und die Satzvariable ist in Zeile 5 fehlerhaft: for (String [] Satz: Sätze) { – Chris

+0

Ja, da war ein Fehler. Einfach die [] aus für (String sets []: sets) entfernt. Vielen Dank. – wcolen

+0

wcolen, vielen Dank für Ihre Hilfe. Das einzige Problem beim Löschen der Array-Syntax [] ist, dass die nächste Zeile mich jetzt anbellt, weil die Methode find ein Array als Argument verwendet, also funktioniert der Satz nicht: Span nameSpans [] = nameFinder.find (sentence); – Chris