web-dev-qa-db-fra.com

Tokenizer, arrêt de la suppression des mots, stemming in Java

Je cherche une classe ou une méthode qui prend une longue chaîne de nombreux mots et jetons, supprime les mots d'arrêt et les tiges à utiliser dans un système IR.

Par exemple:

"le gros chat gros, a dit" ton mec plus drôle que je connais "au kangourou ..."

le tokéniseur supprimerait la ponctuation et retournerait un ArrayList de mots

le dissolvant de mot d'arrêt supprimerait des mots comme "le", "à", etc.

la timmer réduirait chaque mot la "racine", par exemple "la plus drôle" deviendrait drôle

Merci d'avance.

20
Phil

Afaik Lucene peut faire ce que vous voulez. Avec StandardAnalyzer et StopAnalyzer vous pouvez en élimination des mots d'arrêt. En combinaison avec le Lucene contrib-Snowball (qui inclut le travail de - Snowball ) Projet que vous pouvez faire la stemming aussi.

Mais pour stemming, considérez également cette réponse à: stemming algorithme qui produit des mots réels

8
jitter

Ce sont des exigences standard en matière de traitement des langues naturelles, donc je regarderais dans de telles annuelles. Depuis que vous avez besoin Java Je commencerais avec OpenNLP: http://opennlp.sourceforge.net/

Si vous pouvez regarder d'autres langues, il y a aussi NLTK (Python)

Notez que "votre gars le plus drôle que je connaisse" n'est pas une syntaxe standard et cela rend plus difficile à traiter que "tu es le gars le plus drôle que je connaisse". Pas impossible, mais beaucoup plus difficile. Je ne connais aucun système qui équivaut à "ton" à "tu es".

6

J'ai traité la question sur un certain nombre de tâches que j'ai travaillé, alors laissez-moi donner une suggestion de tokenizer. Comme je ne le vois pas, donné directement comme une réponse, j'utilise souvent edu.northwestern.at.utils.corpuslinguistics.tokenizer.* comme ma famille de jetons de jobe. Je vois un certain nombre de cas où j'ai utilisé la classe PennTreebankTokenizer. Voici comment vous l'utilisez:

    WordTokenizer wordTokenizer = new PennTreebankTokenizer();
    List<String> words = wordTokenizer.extractWords(text);

Le lien vers ce travail est ici . Juste un avertissement, je n'ai aucune affiliation avec le nord-ouest, le groupe ou le travail qu'ils le font. Je ne suis que quelqu'un qui utilise le code de temps en temps.

1
demongolem