2012-10-29 13 views
17

मैं फ्रेंच में कुछ पाठ है कि मैं कुछ मायनों में कार्रवाई करने के लिए की जरूरत है। कि के लिए, मैं करने की जरूरत है:Lemmatize फ्रेंच पाठ

  • पहले, शब्द में पाठ
  • फिर उन शब्दों lemmatize tokenize एक ही रूट एक बार से अधिक प्रसंस्करण से बचने के लिए

जहां तक ​​मैं देख सकता हूँ, एनएलटीके में वर्डनेट लेमैमाइज़र केवल अंग्रेजी के साथ काम करता है। मुझे ऐसा कुछ चाहिए जो "vouloir" लौटा सकता है जब मैं इसे "voudrais" देता हूं और इसी तरह। मैं apostrophes की वजह से ठीक से टोकननाइज़ नहीं कर सकता। किसी भी प्वाइंटर की अत्यधिक सराहना की जाएगी। :)

उत्तर

11

Here की एक nltk देव द्वारा एक पुराने लेकिन प्रासंगिक टिप्पणी। लगता है सबसे उन्नत stemmers तरह nltk में सभी अंग्रेजी विशिष्ट हैं:

nltk.stem मॉड्यूल वर्तमान में 3 stemmers शामिल हैं: पोर्टर स्टेमर, लैंकेस्टर स्टेमर, और एक नियमित रूप से-अभिव्यक्ति आधारित स्टेमर। पोर्टर स्टेमर और लंकास्टर स्टेमर दोनों अंग्रेजी- विशिष्ट हैं। नियमित अभिव्यक्ति आधारित स्टेमर को पर अनुकूलित किया जा सकता है जो आपकी इच्छित नियमित अभिव्यक्ति का उपयोग करता है। तो आप regexp stemmer का उपयोग कर गैर-अंग्रेज़ी भाषाओं के लिए सरल स्टेमर लिखने में सक्षम होना चाहिए। उदाहरण के लिए, के लिए फ्रेंच:

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

लेकिन आप भाषा-विशिष्ट नियमित अभिव्यक्ति खुद के साथ आने के लिए आवश्यकता होगी। एक और उन्नत स्टेमर के लिए, यह संभवतः एक नया मॉड्यूल जोड़ने के लिए आवश्यक होगा। (यह एक अच्छा विद्यार्थी परियोजना हो सकता है।)

regexp स्टेमर के बारे में अधिक जानकारी के लिए:

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

-Edward

नोट: लिंक वह देता है मर चुका है, को देखने के वर्तमान regexstemmer दस्तावेज के लिए here

अधिक हाल ही में जोड़ा snowball stemmer हालांकि फ्रेंच स्टेम करने में सक्षम प्रतीत होता है। चलिए इसे परीक्षण में डाल दें:

>>> 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' 

जैसा कि आप देख सकते हैं, कुछ परिणाम थोड़ा संदिग्ध हैं।

आप के लिए काफी नहीं हैं कि क्या उम्मीद कर रहे थे, लेकिन मुझे लगता है कि यह एक शुरुआत है।

+0

हाँ यह निराशाजनक वहाँ गैर-अंग्रेज़ी भाषाओं के लिए कोई स्टेमर ही यह काम कर सकते हैं। मैं वास्तव में क्या कर रहा था यह है कि मैंने विराम चिह्नों पर शब्दों को चिन्हित किया, फिर मैंने सभी अवशिष्ट एक-अक्षर लेखों को हटा दिया (जैसे शेष एल "उदाहरण के लिए" एल 'ensemble ")। इसके बाद मैंने शब्दों और संबंधित लेमाटा की एक सूची का उपयोग किया, विशेष रूप से http://www.limsi.fr/Individu/anne/OLDlexique.txt पर होस्ट किया गया, जिसे कई पोस्टों द्वारा ऑनलाइन संदर्भित किया गया था, यह चाल है। स्नोबॉल स्टेमर ऐसा लगता है कि यह भी काम कर रहा है, धन्यवाद जूनक्सक्स। :) – yelsayed

2
TreeTagger साथ

शायद? मैं कोशिश नहीं की है लेकिन इस एप्लिकेशन फ्रेंच

http://www.cis.uni-muenchen.de/~schmid/tools/TreeTagger/
http://txm.sourceforge.net/installtreetagger_fr.html

+0

गोश, treetaggers unsupervised lemmas देते हैं, मैं अगर संभव हो तो उससे दूर रहने की सलाह देंगे। – alvas

+0

क्या मैं जान सकता हूं कि आप शब्दों को शांत करने के लिए ट्रिटैगर का उपयोग कैसे करते हैं? जो मैंने ट्रिटैगर के साथ समझा, उससे हम केवल शब्दों को टैग कर सकते हैं। – sel