2012-04-29 33 views
13

मुझे प्री-प्रोसेसिंग चरण में टेक्स्ट दस्तावेज़ों को स्टेम करने के लिए एक अच्छा पायथन मॉड्यूल चाहिए।टेक्स्ट दस्तावेज़ों के दायरे के लिए एक पायथन मॉड्यूल की आवश्यकता है

मैं इस एक

http://pypi.python.org/pypi/PyStemmer/1.0.1

पाया, लेकिन मैं दिए गए लिंक पूर्णांक प्रलेखन नहीं मिल रहा।

मुझे कोई भी जानता है कि दस्तावेज़ीकरण या किसी अन्य अच्छे स्टेमिंग एल्गोरिदम को कहां ढूंढें कृपया मदद करें।

उत्तर

25

आप NLTK

>>> from nltk import PorterStemmer 
>>> PorterStemmer().stem('complications') 
+0

1 9 80 के दशक में पोर्टरस्टेमर विकसित नहीं हुआ था? निश्चित रूप से एक और उन्नत विकल्प है? – kalu

+1

आप सही हैं कि अन्य स्टेमर्स हैं। [स्टेमर्स पर पायथन अनुभाग के साथ [प्राकृतिक भाषा प्रसंस्करण] के पूर्वावलोकन से (http://www.nltk.org/book3/ch03.html#stemmers) वे लंकास्टर से पोर्टर की एक साधारण तुलना करते हैं और फिर "स्टेमिंग नहीं है एक अच्छी तरह से परिभाषित प्रक्रिया है, और हम आम तौर पर उस स्टेमर को चुनते हैं जो हमारे मन में सबसे अच्छी तरह से उपयुक्त है। पोर्टर स्टेमर एक अच्छा विकल्प है यदि आप कुछ ग्रंथों को अनुक्रमणित कर रहे हैं और शब्दों के वैकल्पिक रूपों का उपयोग करके खोज का समर्थन करना चाहते हैं। " – ditkin

5

अजगर उत्पन्न मॉड्यूल पोर्टर, Porter2, पेस-भूसी, और Lovins जैसे विभिन्न उत्पन्न एल्गोरिदम के क्रियान्वयन है की कोशिश कर सकते हैं। http://pypi.python.org/pypi/stemming/1.0

>> from stemming.porter2 import stem 
    >> stem("factionally") 
    faction 
+0

ध्यान रखें कि यह एक शुद्ध पायथन कार्यान्वयन है और पाइस्टेमर जैसी चीजों की तुलना में धीमी गति से प्रदर्शन करता है जो तेजी से सी कार्यान्वयन –

2

इन सभी stemmers कि यहाँ चर्चा की गई है एल्गोरिथम स्टेमर कर रहे हैं, इसलिए वे हमेशा इस तरह के

के रूप में अप्रत्याशित परिणाम उत्पन्न कर सकते
In [3]: from nltk.stem.porter import * 

In [4]: stemmer = PorterStemmer() 

In [5]: stemmer.stem('identified') 
Out[5]: u'identifi' 

In [6]: stemmer.stem('nonsensical') 
Out[6]: u'nonsens' 

सही ढंग से जड़ शब्द एक एक शब्दकोश आधारित स्टेमर इस तरह की जरूरत प्राप्त करने के लिए Hunspell Stemmer के रूप में। यहां link में इसका एक अजगर कार्यान्वयन है। उदाहरण कोड यहां है

>>> import hunspell 
>>> hobj = hunspell.HunSpell('/usr/share/myspell/en_US.dic', '/usr/share/myspell/en_US.aff') 
>>> hobj.spell('spookie') 
False 
>>> hobj.suggest('spookie') 
['spookier', 'spookiness', 'spooky', 'spook', 'spoonbill'] 
>>> hobj.spell('spooky') 
True 
>>> hobj.analyze('linked') 
[' st:link fl:D'] 
>>> hobj.stem('linked') 
['link'] 
+4

-1 के लिए रैपर हैं: स्टेमर्स का उद्देश्य मूल शब्द नहीं ढूंढना है (या लेमैमैटिज़ेशन, जो nltk भी है के लिए एक मॉड्यूल), बल्कि शब्द के एक संक्षिप्त संस्करण को खोजने के लिए कि अन्य inflections भी कम हो जाएगा। इससे कोई फर्क नहीं पड़ता कि स्टेमर को रूट शब्द नहीं मिला है; जब तक 'स्टेम (' बकवास ') == स्टेम (' बकवास ')! = स्टेम (' केले ')', यह ठीक है। –

0

gensim package विषय मॉडलिंग के लिए एक पोर्टर Stemmer एल्गोरिथ्म के साथ आता है:

>>> from gensim import parsing 
>>> gensim.parsing.stem_text("trying writing nonsense") 
'try write nonsens' 

PorterStemmer केवल उत्पन्न gensim में लागू विकल्प है।

एक साइड नोट: मैं कल्पना कर सकता हूं (बिना किसी संदर्भ के) कि अधिकांश टेक्स्ट-खनन-संबंधित मॉड्यूल में पोर्टर के स्टेमिंग, व्हाइट-स्पेस हटाने और स्टॉप-वर्ड हटाने जैसी सरल प्री-प्रोसेसिंग प्रक्रियाओं के लिए अपना स्वयं का कार्यान्वयन होता है।