6
votes

Tokenize, éliminez les mots d'arrêt à l'aide de Lucene avec Java

J'essaie de togmenter et de supprimer les mots d'arrêt d'un fichier TXT avec Lucene. J'ai ceci: xxx

Mon principal ressemble à ceci: xxx

Ceci me donne une erreur mais je ne peux pas comprendre pourquoi .


2 commentaires

Quelle est l'erreur que vous voyez?


Il se plaint alors que (Tokenstream.incrementationToken ())


3 Réponses :


0
votes

Vous pouvez essayer d'appeler Tokenstream.Reset () avant d'appeler Tokenstream.incrimentationToken ()


0 commentaires

10
votes

J'ai eu le même problème. Pour supprimer les mots d'arrêt à l'aide de Lucene Vous pouvez utiliser son ensemble d'arrêt par défaut à l'aide de la méthode anglaisnalyzer.getDefaultStopset (); . Sinon, vous pouvez créer votre propre liste de mots d'arrêt personnalisée.

Le code ci-dessous indique la version correcte de votre retirer des mots () : xxx

Pour utiliser une liste personnalisée des mots d'arrêt Utilisez ce qui suit: xxx


3 commentaires

Quelles importations sont nécessaires pour faire fonctionner le code ci-dessus?


Voici actuels, exemples de travail: Docs.LePonceau .org / java-exemples / java-évaluation / ... et docs.leponceau.org/java-examples/java-evaluation/...


@ user1050755 Le lien Anglaisalalyzer Version fonctionne, le Standardanalyzer On ne supprime aucun mot, car vous devez probablement lui donner une liste de mots d'arrêt. Comment tu fais ça? Veuillez également publier ce code comme réponse, car l'autre code ci-dessus est obsolète et ne fonctionne plus avec les dernières versions de Lucene plus (J'utilise 8.6.3).



0
votes

Lucene a changé et à cause de cette réponse suggérée (postée en 2014) ne compilera pas. Il s'agit d'une version légèrement altérée du code @ user1050755 liée qui fonctionne avec Lucene 8.6.3 et Java 8:

final String text = "This is a short test!"
final List<String> stopWords = Arrays.asList("short","test"); //Filters both words
final CharArraySet stopSet = new CharArraySet(stopWords, true);

try {
    ArrayList<String> remaining = new ArrayList<String>();

    Analyzer analyzer = new StandardAnalyzer(stopSet); // Filters stop words in the given "stopSet"
    //Analyzer analyzer = new StandardAnalyzer(); // Only filters punctuation marks out of the box, you have to provide your own stop words!
    //Analyzer analyzer = new EnglishAnalyzer(); // Filters the default English stop words (see link below)
    //Analyzer analyzer = new EnglishAnalyzer(stopSet); // Only uses the given "stopSet" but also runs a stemmer, so the result might not look like what you expected.
    
    TokenStream tokenStream = analyzer.tokenStream(CONTENTS, new StringReader(text));
    CharTermAttribute term = tokenStream.addAttribute(CharTermAttribute.class);
    tokenStream.reset();

    while(tokenStream.incrementToken()) {
        System.out.print("[" + term.toString() + "] ");
        remaining.add(term.toString());
    }

    tokenStream.close();
    analyzer.close();
} catch (IOException e) {
    e.printStackTrace();
}


0 commentaires