2009-11-03 15 views
18

Estoy buscando una clase o método que requiera una larga cadena de cientos de palabras y tokenizes, elimina las palabras de parada y los tallos para usar en un sistema de IR.Tokenizador, Stop Word Removal, Stemming en Java

Por ejemplo:

"El gran gato gordo, dijo 'el tipo más gracioso que sé' para el canguro ..."

la tokenizer eliminaría la puntuacion y el retorno ArrayList una de las palabras

la palabra parada removedor eliminaría palabras como "el", "a", etc

la lentilla reduciría cada palabra su 'raíz', por ejemplo 'más divertido' se volvería gracioso

Muchas gracias de antemano.

Respuesta

8

AFAIK Lucene puede hacer lo que quiera. Con StandardAnalyzer y StopAnalyzer puedes parar la eliminación de palabras. En combinación con el proyecto Lucene contrib-snowball (que incluye el trabajo desde Snowball), también puede realizar la derivación.

Pero para detener también considerar esta respuesta a: Stemming algorithm that produces real words

+0

hey! @jitter va Lucene no ayuda?necesita un enlace más específico. – jsroyal

6

Estos son los requisitos estándar en el procesamiento de lenguaje natural, por lo que buscaría en tales kits de herramientas. Dado que usted requiere Java me gustaría empezar con OpenNLP: http://opennlp.sourceforge.net/

Si se puede ver en otros idiomas también hay NLTK (Python)

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

+0

http://en.wikipedia.org/wiki/Natural_language_processing_toolkits – Fedearne

+0

¿Hay modelado de temas en openLP? no lo vi en la descripción. –

0

Aquí está la lista completa de NLP tools. En algún momento, tiene sentido crearlos tú mismo, ya que serán más livianos y tendrás más control sobre el funcionamiento interno: utiliza la expresión regular simple para las tokenizaciones. Para parada palabras simplemente empujan la siguiente lista o alguna otra lista a un HashSet:

common-english-words.txt

Aquí es uno de los muchos Java implementation of porter stemer).

1

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

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

El enlace a este trabajo es 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 de vez en cuando.

+0

¿dónde puedo descargar los tokenizadores del noroeste? – Hector

+0

@Hector Pruebe en https://bitbucket.org/pibburns/morphadorner/src/9c3188655f6386e65c93f315f86b3a176607c8f7/src/edu/northwestern/at/morphadorner/corpuslinguistics/tokenizer/?at=default. Quizás di el paquete equivocado. Después de 4 años es difícil ver si el paquete cambió o me equivoqué originalmente – demongolem