2016-12-11 50 views
4

我現在有這樣的句子:Lemmainser使用NLTK

text = "This is a car." 

然後我用一個tokeniser,然後幹它像這樣:

ps = PorterStemmer() 
text = word_tokenize(text) 
stemmed_words = [] 
for w in words: 
    stemmed_words.append(ps.stem(w)) 

不過,我現在想使用NLTK的lemmainser到代之以做。要使用它,我需要給它的字的-speach部分,像這樣(內循環):

lemmatizer = WordNetLemmatizer() 
word = lemmatizer.lemmatize(w, pos=pos) 

不過,我不能確定如何獲得pos參數。我明白,我可以用它來獲取speach的一部分,但沒有被接受爲一種說法:

pos = nltk.pos_tag(text) 
+0

'WordNetLemmatizer'不需要第二個參數大部分時間它用你試圖解釋的單詞完美地工作。 – DyZ

+0

@DYZ我明白這一點,但我希望使用這將改善它。 – starnger

+0

然後你的答案已經部分在這裏回答:http://stackoverflow.com/questions/15586721/wordnet-lemmatization-and-pos-tagging-in-python – DyZ

回答

5

你需要一本字典對NLTK POS標籤翻譯成共發現標籤:

pos_translate = {'J':'a', 'V':'v', 'N':'n', 'R':'r'} 

現在,提取POS標籤,如果可能的話翻譯每個標籤(如果沒有,選擇默認的標籤,比如說,"n"和lemmatize:

text = ['This', 'is', 'a', 'car', '.'] 
[lemmatizer.lemmatize(w,\ 
     pos=pos_translate[pos[0]] if pos[0] in pos_translate else 'n')\ 
     for w,pos in nltk.pos_tag(text)] 
# ['This', 'be', 'a', 'car', '.']