2012-04-29 4 views

답변

25

당신은 NLTK

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

1980 년대에 PorterStemmer가 개발되지 않았습니까? 확실히 고급 옵션이 있습니까? – kalu

+1

다른 형태소 분석기가 맞습니다. [형태소 분석기에서 파이썬으로 자연어 처리] 섹션의 미리보기에서 (http://www.nltk.org/book3/ch03.html#stemmers) 그들은 Lancaster와 Porter의 간단한 비교를 수행 한 다음 "Stemming is not 잘 정의 된 프로세스인데, 우리는 일반적으로 우리가 염두에두고있는 응용 프로그램에 가장 적합한 형태소 분석기를 선택합니다. 일부 텍스트의 색인을 생성하고 대체 단어 형식을 사용하여 검색을 지원하려는 경우 Porter Stemmer는 좋은 선택입니다. " – ditkin

5

파이썬에 따른 모듈 포터, Porter2, Paice - 껍질, 그리고 로빈스 같은 다양한 형태소 분석 알고리즘의 구현을 가지고 시도 할 수 있습니다. 여기서 논의 된 http://pypi.python.org/pypi/stemming/1.0

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

이것은 순수한 파이썬 구현이며 빠른 C 구현을위한 래퍼 인 PyStemmer보다 느린 속도로 수행된다는 것을 알아 두십시오 –

2

이 모든 형태소 분석기 그러므로 그들은 같은

같은 예기치 않은 결과가 항상를 생성 할 수 있습니다, 알고리즘 형태소 분석기입니다
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 : 형태소 분석기의 객체는 루트 단어 (또는 lemmatization)를 찾지 않아 nltk도 에 대한 모듈), 오히려 다른 변환이 단축 할 단어의 단축 버전을 찾습니다. 줄기 세포가 뿌리 단어를 찾지 못하더라도 중요하지 않습니다. '줄기 ('말도 안돼 ') == 줄기 ('무의미한 ')! = 줄기 ('바나나 ')', 괜찮아. –

0

gensim package는 포터 형태소 분석기 알고리즘과 함께 제공 :

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

PorterStemmer는 gensim에서 구현하는 유일한 따른 옵션입니다.

사이드 노트 : 대부분의 텍스트 마이닝 관련 모듈에는 Porter의 형태소 분석, 공백 제거 및 중지 단어 제거와 같은 간단한 사전 처리 절차에 대한 자체 구현이 있다고 상상할 수 있습니다.