Ich habe ein Modul basierend auf Apache Lucene
5.5/6.0, die Schlüsselwörter abruft. Alles funktioniert gut außer einer Sache - Lucene
filtert keine Stoppwörter.Apache Lucene filtert keine Stoppwörter trotz der Verwendung von StopAnalyzer und StopFilter
Ich versuchte, Stop-Word-Filterung mit zwei verschiedenen Ansätzen zu ermöglichen.
Ansatz # 1:
tokenStream = new StopFilter(new ASCIIFoldingFilter(new ClassicFilter(new LowerCaseFilter(stdToken))), EnglishAnalyzer.getDefaultStopSet());
tokenStream.reset();
Ansatz # 2:
tokenStream = new StopFilter(new ClassicFilter(new LowerCaseFilter(stdToken)), StopAnalyzer.ENGLISH_STOP_WORDS_SET);
tokenStream.reset();
Der vollständige Code ist hier verfügbar:
https://stackoverflow.com/a/36237769/462347
Meine Fragen:
- Warum nicht Stoppwörter filtert?
- Wie kann ich die Stoppwörter Filterung in
Lucene
5.5/6.0 aktivieren?
Das Problem ist, dass 'Lucene' nicht solche Worte nicht herausfiltern, wie 'wir',' I' und andere gebräuchliche englische Wörter. Sollte ich andere erweiterte Stoppwörter Wörterbuch anhängen? Bietet 'Lucene' andere Stoppwörterbücher? –
'EnglishAnalyzer' und' StandardAnalyzer' verwenden das gleiche Stopword-Set, also glaube ich nicht, dass es eine umfangreichere Stop-Liste gibt, die in Lucene verpackt ist. Also, ja, Sie müssten wahrscheinlich Ihre eigenen erstellen. Wenn Sie StandardAnalyzer verwenden, können Sie die Stoppwörter einfach in einer Nur-Text-Datei speichern und einen Leser an den Konstruktor übergeben. – femtoRgon
Meinst du 'StandardAnalyzer' oder' StandardTokenizer'? Ich benutze 'StandardAnalyzer.STOP_WORDS_SET', aber es wird kein Konstruktor für' StandardAnalyzer' verwendet. Im Gegensatz dazu habe ich 'stdToken.setReader (new StringReader (fullText));'. Wo genau sollte ich meine Stoppwörterliste platzieren? –