2012-10-29 15 views
17

Ho un testo in francese che devo elaborare in qualche modo. Per questo, ho bisogno di:Lemmatize testo in francese

  • In primo luogo, simboleggiare il testo in parole
  • Poi lemmatize quelle parole per evitare l'elaborazione della stessa radice più di una volta

Per quanto posso vedere, la il wordnet lemmatizer in NLTK funziona solo con l'inglese. Voglio qualcosa che possa restituire "vouloir" quando gli do "voudrais" e così via. Inoltre non riesco a tokenize correttamente a causa degli apostrofi. Qualsiasi suggerimento sarebbe molto apprezzato. :)

risposta

11

Here è un vecchio ma rilevante commento di un nltk dev. Sembra che la maggior parte delle stemmer avanzati in NLTK sono tutti inglese specifica:

Il modulo nltk.stem contiene attualmente 3 stemmer: Porter Stemmer, l'Stemmer Lancaster, ed un'espressione regolare basata Stemmer. Lo stelo Porter e lo stemmer Lancaster sono entrambi specifici per l'inglese . Lo stemmer basato su espressioni regolari può essere personalizzato su utilizzando qualsiasi espressione regolare desiderata. Quindi dovresti essere in grado di scrivere un semplice stemmer per le lingue diverse dall'inglese usando lo stemma regexp. Per esempio, per il francese:

from nltk import stem 
stemmer = stem.Regexp('s$|es$|era$|erez$|ions$| <etc> ') 

Ma avresti bisogno di venire con la specifica-linguaggio regolare espressione te stesso. Per uno stemmer più avanzato, sarebbe probabilmente necessario aggiungere per aggiungere un nuovo modulo. (Questo potrebbe essere un buon progetto studente .)

Per ulteriori informazioni sul Stemmer regexp:

http://nltk.org/doc/api/nltk.stem.regexp.Regexp-class.html

-Edward

Nota: il link che dà è morto, vedere here per la documentazione corrente di regexstemmer.

Il più recente aggiunto snowball stemmer sembra essere in grado di arginare il francese però. Mettiamola alla prova:

>>> from nltk.stem.snowball import FrenchStemmer 
>>> stemmer = FrenchStemmer() 
>>> stemmer.stem('voudrais') 
u'voudr' 
>>> stemmer.stem('animaux') 
u'animal' 
>>> stemmer.stem('yeux') 
u'yeux' 
>>> stemmer.stem('dors') 
u'dor' 
>>> stemmer.stem('couvre') 
u'couvr' 

Come potete vedere, alcuni risultati sono un po 'dubbiosi.

Non proprio quello che speravi, ma immagino sia un inizio.

+0

yea E 'deludente non c'è Stemmer per le lingue non inglesi. quello che ho finito per fare è che ho modificato le parole sulla punteggiatura, quindi ho rimosso tutti gli articoli a una sola lettera (come la restante l in "l'ensemble" per esempio). Poi ho usato un elenco di parole e lemmata corrispondenti, in particolare quello ospitato su http://www.limsi.fr/Individu/anne/OLDlexique.txt, che è stato referenziato da diversi post online, ha fatto il trucco. Anche lo stelo della palla di neve sembra funzionare, grazie Junuxx. :) – yelsayed

Problemi correlati