2016-11-04 3 views
0

Ich benutze Englisch Tokenizer zu analysieren Token und ich habe eine seltsame Situation konfrontiert, wo Worte wie wirklich/Antwort in realli, repli umgewandelt wird.Lucene Englisch Tokenizer gibt komische Wörter

Unten ist das Code-Snippet, das ich verwende.

object Learning { 

    def tokenize(content: String): Seq[String] = { 
    val tReader = new StringReader(content) 
    val analyzer = new EnglishAnalyzer() 
    val tStream = analyzer.tokenStream("contents", tReader) 
    val term = tStream.addAttribute(classOf[CharTermAttribute]) 
    tStream.reset() 

    val result = mutable.ArrayBuffer.empty[String] 
    while(tStream.incrementToken()) { 
     result += term.toString 
    } 
    result 
    } 

    def main(args: Array[String]): Unit = { 
    println(tokenize("This deal looks really interesting, I will look into it and reply")) 
    } 

} 

Dies gibt als - Arraybuffer (Deal, schauen, realli, Zinsen, i, schauen, repli). Soweit ich sehen kann, gibt es keine Wörter wie realli, repli in der englischen Sprache.

Kann jemand darauf hinweisen, warum dies die Ausgabe so gibt?

+0

Wenn Sie die Basisformen (Lemmas) der Wörter anstelle von künstlichen Stielen wünschen, suchen Sie nach einem "Lemmatizer". –

Antwort

1

Der Zweck eines Lucene-Analysators besteht darin, Zeichenfolgen von einer Quelle zu nehmen (bereitgestellt durch eine Parsing-Prozedur) und einen Token-Stream entsprechend der beabsichtigten Analyse zu erzeugen. Der EnglishAnalyzer führt stemming standardmäßig aus und liefert Token, die nicht notwendigerweise englische Wörter sind. In diesem Fall kann ein Token "repli" die Ausgabe für mehrere englische Wörter sein, die dieselbe Semantik haben: "Antworten", "Antworten", "Antworten", "Antworten".

Daher wäre eine kurze Antwort "es ist egal, Wörter wurden bequem durch den Analysator stemmed". Wenn dies nicht das beabsichtigte Verhalten ist, sollten Sie in der Lage sein, einen benutzerdefinierten Analysator mit einem anderen Stemmer zu erstellen (oder ihn vollständig zu entfernen). Weitere Informationen und eine Liste der zur Verfügung gestellten Stemmer finden Sie unter documentation on analyzers.