2009-10-15 9 views
4

J'utilise Lucene (ou plus précisément Compass), pour enregistrer des discussions dans un forum et j'ai besoin d'un moyen d'extraire les mots clés derrière la discussion. Cela dit, je ne veux pas indexer toutes les entrées que quelqu'un fait, mais plutôt avoir une liste de «mots-clés» qui sont pertinents pour un certain contexte et si l'entrée correspond à un mot-clé et est au-dessus d'un seuil que j'ajouterais ces entrées à l'index. Je veux pouvoir utiliser la puissance d'un analyseur pour extraire les choses et faire sa magie, mais ensuite retourner les jetons de l'analyseur afin de faire correspondre les mots-clés, et aussi compter le nombre d'occurrences de certains mots être mentionné.Demander des jetons Lucene sans indexer

Existe-t-il un moyen d'obtenir les jetons à partir d'un analyseur sans avoir à subir le surdébit d'indexation de chaque entrée? Je pensais que je devrais maintenir un RAMDirectory pour contenir toutes les entrées, puis effectuer des recherches en utilisant ma liste de mots-clés, puis fusionner les documents pertinents au gestionnaire de persistance pour stocker réellement les entrées pertinentes.

+0

quelqu'un sait quelle réponse est meilleure ci-dessous ... Je suis à la recherche dans un problème similaire – andy

Répondre

2

Vous êtes sur la bonne voie. Vous pouvez créer un index de chaque document à l'aide de RAMDirectory, puis le rechercher pour vérifier que ce document contient un mot clé pertinent. Si non, ignorez ce document. Sinon, vous l'ajoutez à l'index persistant/principal.

Vous n'avez pas besoin de conserver tous les documents en mémoire. Il va consommer beaucoup de mémoire inutilement.

+0

+ 1 merci ... que pensez-vous de la réponse ci-dessous? – andy

2

Vous devriez pouvoir ignorer complètement le répertoire RAMDirectory. Vous pouvez appeler le StandardAnalyzer directement et l'obtenir pour vous renvoyer une liste de jetons (alias mots-clés).

StandardAnalyzer analyzer = new StandardAnalyzer; 
TokenStream stream = analyzer.tokenStream("meaningless", new StringReader("<text>")); 
while (true) { 
    Token token = stream.next(); 
    if (token == null) break; 

    System.out.println(token.termText()); 
} 

Mieux encore, écrivez votre propre analyseur (ils ne sont pas difficiles, jetez un oeil au code source pour ceux qui existent déjà) qui utilise votre propre filtre pour surveiller vos mots-clés.

+0

+1 Il n'y a donc aucun avantage à indexer si vous n'avez plus besoin de cette information? – andy

+1

ahh mon mauvais ... vous devez encore indexer quelque chose avant que les jetons ne soient créés? Je me demandais s'il y avait un moyen de jeter un peu de texte à un analyseur et d'avoir des jetons de retour? – andy