Für Lucene, möchte ich einige Verarbeitung nur auf das letzte Token des TokenStream mit TokenFilter. Wenn zum Beispiel der Satz "Hallo meine Welt" gegeben wird, wenden Sie meine Verarbeitung nur auf "Welt" an, nicht auf andere Token.Lucene TokenFilter: Wie erkennt man das letzte Token von TokenStream?
Ich kann tun, indem ich zuerst die gesamte Eingabe von tokenStream iteriere, um den Offset des letzten Tokens zu bekommen, und dann vom ersten Token neu zu starten. Da ich den Offset des letzten Tokens bereits kenne, kann ich erkennen, ob das aktuelle Token ein letztes Token ist oder nicht.
Da jedoch zweimal Schleifen ineffizient ist sicher, ich möchte es mit der iterieren tokenStream nur einmal tun, aber es scheint wie schwer zu finden, richtig.
Angenommen, MyFilter sieht folgendermaßen aus: (Sicher, dieser MyFilter ist die grundlegende Struktur des TokenFilter).
public class MyFilter extends TokenFilter{
public MyFilter(TokenStream input){
super(input);
}
@Override
public boolean incrementToken() throws IOException {
if (input.incrementToken()){
/*
if(current token is the last token):
Want to apply something only to the last token.
*/
return true;
}
return false;
}
}
Wie zu erkennen, ob das aktuelle Token das letzte ist oder nicht?