2011-11-03 4 views
2

다음 란 단어와 함께 무엇을 해야할지하지 않습니다NLTK lemmatizer 미국인

from nltk import WordNetLemmatizer as wnl 
wnl().lemmatize("American") 
wnl().lemmatize("Americans") 

둘 단순히 인수를 반환합니다. 나는 미국인들이 미국인으로 줄어들길 바란다. 아무도 어떻게 이런 일이 생길지 모를거야?

나는 lemmatizer가 사용하고있는 내부 사전을 수정해야한다고 생각했습니다. 이 올바른지? 더 나은 방법을 아는 사람이 있습니까?

감사합니다.

+0

은 나에게 더 자연스러운 것 같다 :

모든 대문자 단어에 관심이 있다면

, 당신은 또한 케이스를 포함 할 수 있습니다. – RoundTower

답변

0

단어를 소문자로 변환하기 전에 소문자로 변환하고 나중에 대소 문자를 복원 할 수 있습니다.

나는 과거에이 코드를 사용했습니다 :

word = 'Americans' 
lemmatized = wnl().lemmatize(word.lower()) 
if word.istitle(): 
    word = lemmatized.capitalize() 
else: 
    word = lemmatized 
# word = 'American' 

이 내 사건에 대한 사실 ("마이 스페이스"와 같은) 단어에 여러 개의 대문자의 어떤 경우가 없다고 가정 그때. 대문자가 여러 개인 단어는 적절한 명사가되는 경향이 있으므로 대개는 이들을 정규화 할 필요가 없기 때문에 이것이 일반적으로 사실이라고 생각합니다. 그들은 모두 America``에 원형 화 된 경우

word = 'AMERICANS' 
lemmatized = wnl().lemmatize(word.lower()) 
if word.istitle(): 
    word = lemmatized.capitalize() 
elif word.upper()==word: 
    word = lemmatized.upper() 
else: 
    word = lemmatized 
# word = 'AMERICAN' 
4

분명히 중요한 것은 WordNet이지만, PorterStemmer도 사용할 수 있습니다.

>>> wnl().lemmatize('americans') 
'american' 
>>> from nltk.stem import PorterStemmer as ps 
>>> ps().stem('Americans') 
'American' 
+2

응답 해 주셔서 감사합니다. 나는 스 트리머를 사용하고 싶지 않습니다. 왜냐하면 저는 이것들을 표현할 수있는 사전 단어가 대부분 필요합니다 (미국인은 텍스트 단락에 있음). 나는 미국인이 형용사 또는 명사가 될 수 있다는 것이 문제라고 생각한다. '미국 시장에 갔다'대 '그는 미국 시장에 갔다' 나는 그들이 모두 같은 어휘의 일부라고 생각하지 않는다고 생각한다. – Maus