2017-10-18 1 views
0

Wie üblich durchquere ich die Sätze eines kommentierten Dokuments in einem for-Schleife (Java):Wie ersetzt man ein Token (CoreLabel) in einem Satz (CoreMap) mit Stanford NLP?

for (CoreMap sentence : document.get(CoreAnnotations.SentencesAnnotation.class)) { 
    ... 
} 

Dann im Innern, dass ich ein Wort aus dem Satz entfernen (zB „Lehrer“) mit dem Wort Index, habe ich den Text neuen Wort „John“ mit der CoreLabel Methode setWord() und am Ende habe ich das erneuerte Wort in dem gleichen Index in dem Satz hinzufügen zu sein:

sentence.get(CoreAnnotations.TokensAnnotations.class).remove(token.get(CoreAnnotations.IndexAnnotation.class)); 
token.setWord("John"); 
sentence.get(CoreAnnotations.TokensAnnotation.class).add(token.get(CoreAnnotations.IndexAnnotation.class),token); 

das Problem ist, dass der Satz bleibt als ist. Auch wenn ich den Satztext direkt nach dem Entfernen ausdrucke, ändert sich nichts. Mache ich etwas falsch? Gibt es einen vernünftigeren Weg?

Antwort

0

Ich werde wagen, dass, obwohl Sie das Wort geändert haben, haben Sie nicht die originalText geändert. Im Allgemeinen solltest du vorsichtig sein mit diesen Arten von Transformationen - sie können alle Arten von bizarren Effekten haben (zB werden deine Charakter-Offsets gebrochen sein), aber wenn du dich tapfer fühlst und den Bug zur Hand haben willst , sollten Sie in der Lage sein, es zu beheben, indem Sie setzen:

token.setOriginalText("John"); 
Verwandte Themen