2009-11-03 15 views
18

Sto cercando una classe o un metodo che richiede una lunga stringa di molti 100s di parole e tokenizes, rimuove le parole stop e stems per l'utilizzo in un sistema IR.Tokenizer, Stop Word Removal, Stemming in Java

Ad esempio:

"La grande gatto grasso, detto 'il tuo ragazzo più divertente che io so' per il canguro ..."

il tokenizzatore eliminerebbe la punteggiatura e ritorno un ArrayList di parole

la parola fermata rimozione eliminerebbe parole come "il", "a", ecc

lo stemmer ridurrebbe ogni parola alla loro 'radice', ad esempio 'più divertente' sarebbe divertente

Molte grazie in anticipo.

risposta

8

AFAIK Lucene può fare quello che vuoi. Con StandardAnalyzer e StopAnalyzer è possibile interrompere la rimozione della parola. In combinazione con il progetto Lucene contrib-snowball (che include lavoro dal Snowball) è possibile eseguire anche lo stemming

Ma per derivante anche prendere in considerazione questa risposta a: Stemming algorithm that produces real words

+0

ehi! @ jitter andando Lucene non aiuta?bisogno di un link più specifico – jsroyal

6

Questi sono i requisiti standard in Natural Language Processing, quindi guarderei in questi toolkit. Dal momento che hai bisogno di Java mi piacerebbe iniziare con OpenNLP: http://opennlp.sourceforge.net/

Se si può guardare in altri lingue c'è anche NLTK (Python)

nota che "il vostro ragazzo più divertente che io so" non è la sintassi standard, e questo rende più difficile l'elaborazione di "Sei il ragazzo più divertente che conosca". Non impossibile, ma molto più difficile. Non conosco alcun sistema che equiparasse "il tuo" a "tu sei".

+0

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

+0

Esiste la modellazione degli argomenti in openNLP? non l'ho visto nella descrizione –

0

Ecco la lista completa dei NLP tools. A volte è logico crearli da soli in quanto saranno più leggeri e si avrà un maggiore controllo sui meccanismi interni: utilizzare la semplice espressione regolare per le tokenizzazioni. Per l'arresto parole solo spingere la lista qui sotto o qualche altra lista per un HashSet:

common-english-words.txt

Ecco uno dei tanti Java implementation of porter stemer).

1

Ho affrontato il problema su un numero di attività con cui ho lavorato, quindi consentitemi di fornire un suggerimento per i tokenizer. Siccome non lo vedo dato direttamente come risposta, io uso spesso edu.northwestern.at.utils.corpuslinguistics.tokenizer.* come la mia famiglia di tokenizer. Vedo un numero di casi in cui ho utilizzato la classe PennTreebankTokenizer. Ecco come lo si utilizza:

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

Il link per questo lavoro è here. Solo un disclaimer, non ho alcuna affiliazione con Northwestern, il gruppo o il lavoro che fanno. Sono solo qualcuno che usa il codice ogni tanto.

+0

da dove posso scaricare i tokenizer nord-occidentali? – Hector

+0

@Hector Prova su https://bitbucket.org/pibburns/morphadorner/src/9c3188655f6386e65c93f315f86b3a176607c8f7/src/edu/northwestern/at/morphadorner/corpuslinguistics/tokenizer/?at=default. Forse ho dato il pacchetto sbagliato. Dopo 4 anni è difficile vedere se il pacchetto è cambiato o ho sbagliato in origine – demongolem