NLTK使用Lemmainser

4

我目前有这样一句话:

text = "This is a car."

我接着使用分词器,然后进行词干提取,具体操作如下:
ps = PorterStemmer()
text = word_tokenize(text)
stemmed_words = []
for w in words:
    stemmed_words.append(ps.stem(w))

然而,我现在希望使用NLTK的词形还原器来代替原先的方式。为了使用它,我需要像这样(在循环内部)给它提供单词的词性:

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

然而,我不确定如何获取pos参数。 我知道可以使用它来获取词性,但它不能作为参数接受:

pos = nltk.pos_tag(text)

WordNetLemmatizer 不需要第二个参数。大多数情况下,只使用您要还原的单词即可完美运行。 - DYZ
@DYZ 我理解这一点,但希望使用它能够改善它。 - starnger
那么你的问题在这里已经得到了部分回答:https://dev59.com/vGUp5IYBdhLWcg3wAj3y - DYZ
可能你想要这样的东西:https://gist.github.com/alvations/07758d02412d928414bb。原始来源于https://github.com/alvations/pywsd/blob/master/pywsd/utils.py#L66 - alvas
1个回答

5
你需要一个词典来将NLTK POS标签翻译为WordNet标签:
pos_translate = {'J':'a', 'V':'v', 'N':'n', 'R':'r'}

现在,提取POS标签,如果可能的话翻译每个标签(如果不行,选择默认标签,例如n),并进行词形还原:
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', '.']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接