java tokenize stemming stop-words

Tokenizer, Stop Word Removal, Stemming in Java



stop-words (4)

Estoy buscando una clase o método que tome una larga cadena de cientos de palabras y tokenizes, elimine las palabras de parada y los tallos para usar en un sistema IR.

Por ejemplo:

"El gran gato gordo, dijo ''el chico más divertido que conozco'' al canguro ..."

el tokenizer eliminaría la puntuación y devolvería una ArrayList de palabras

el eliminador de palabras clave eliminaría palabras como "the", "to", etc

el stemmer reduciría cada palabra de su ''raíz'', por ejemplo ''funniest'' se volvería divertido

Muchas gracias de antemano.


AFAIK Lucene puede hacer lo que quieras. Con StandardAnalyzer y StopAnalyzer puede detener la eliminación de palabras. En combinación con el proyecto Lucene contrib-snowball (que incluye trabajo de Snowball ), usted también puede hacer lo posible.

Pero para la derivación también considere esta respuesta a: Algoritmo de derivación que produce palabras reales


Aquí está la lista completa de herramientas de PNL . En algún momento tiene sentido crearlos usted mismo, ya que serán más ligeros y tendrá más control sobre el funcionamiento interno: use expresiones regulares simples para tokenizaciones. Para palabras clave, simplemente presione la lista a continuación o alguna otra lista a un HashSet:

common-english-words.txt

Esta es una de las muchas implementaciones de Java de porter stemer .


Estos son requisitos estándar en el procesamiento del lenguaje natural, por lo que buscaría en dichos conjuntos de herramientas. Ya que necesita Java, empezaría con OpenNLP: http://opennlp.sourceforge.net/

Si puedes mirar en otros idiomas también hay NLTK (Python)

Tenga en cuenta que "su tipo más divertido que conozco" no es una sintaxis estándar y esto hace que sea más difícil de procesar que "Usted es el tipo más divertido que conozco". No imposible, pero mucho más difícil. No conozco ningún sistema que equipararía "tu" a "tú eres".


He tratado el problema en una serie de tareas con las que he trabajado, así que permítame darle una sugerencia de tokenizer. Como no lo veo directamente como una respuesta, a menudo uso edu.northwestern.at.utils.corpuslinguistics.tokenizer.* Como mi familia de tokenizadores. Veo varios casos en los que usé la clase PennTreebankTokenizer . Así es como lo usas:

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

El enlace a este trabajo está here . Solo un descargo de responsabilidad, no tengo ninguna afiliación con Northwestern, el grupo o el trabajo que realizan. Solo soy alguien que usa el código ocasionalmente.