2017-04-25 2 views
1

Ich bin auf der Suche nach englischen Wörtern mit Lucene 6.5. Ich habe eine ganze Reihe von Beispielen für die Verwendung von Lucene gesehen, um dies zu erreichen. Die Beispiele, die ich bisher gesehen habe, scheinen jedoch alte Versionen von Lucene zu verwenden, und die Replikation derselben mit Lucene 6 war nicht möglich.Stemming Englisch Wörter mit Lucene 6

Ein Fallbeispiel ist this one. Die vorgeschlagenen und akzeptierten Lösungen verwenden org.apache.lucene.analysis.PorterStemmer, die nicht 6.

UPDATE in Lucene im gleichen Paket zu sein scheint: Ich habe herausgefunden, dass der aktuelle vollständige Pfad für den PorterStemmer stemmer org.apache.lucene.analysis.en.PorterStemFilter ist. Zusätzlich benötigt man die Abhängigkeit "org.apache.lucene" % "lucene-queryparser" % "6.5.0".

Ich arbeite jetzt daran, eine Liste von Wörtern zu stempeln. Und ich denke, ich werde diese Frage nur auf das Wort stemming konzentrieren, da die Beispiele, die ich mit diesem Stemmer gesehen habe, weder mit der aktuellen Version von Lucene (Version 6.5.0) noch mit der aktuellen Version funktionieren.

Antwort

2

ich endlich einen Weg gefunden Worten Einhalt zu gebieten Lucene 6 mit:

public List<String> stem(String term) throws Exception { 
    Analyzer analyzer = new StandardAnalyzer(); 
    TokenStream result = analyzer.tokenStream(null, term); 
    result = new PorterStemFilter(result); 
    result = new StopFilter(result, StopAnalyzer.ENGLISH_STOP_WORDS_SET); 
    CharTermAttribute resultAttr = result.addAttribute(CharTermAttribute.class); 
    result.reset(); 

    List<String> tokens = new ArrayList<>(); 
    while (result.incrementToken()) { 
     tokens.add(resultAttr.toString()); 
    } 
    return tokens; 
} 

Aufruf dieser Methode mit einer Eingabezeichenfolge, term, eine Liste von String-Token wird wieder aus dem Eingabestring erzeugt. Die Methode entfernt zusätzlich Stoppwörter von der Eingabe. Ich werde das hier in der Hoffnung lassen, dass es für jemanden hilfreich ist.

+0

Wow ... ist es wirklich so kompliziert? Ich habe in den letzten 2 Jahren nach Lucene 6 geforscht, kaum etwas ist aufgetaucht. Aber im Javadoc finde ich eine Klasse org.tartarus.snowball.ext.EnglishStemmer ... mir ist nur nicht klar, wie man sich mit einem EnglishAnalyzer verbindet. –

Verwandte Themen