3

我想使用

from nltk import word_tokenize, sent_tokenize, pos_tag
from nltk.stem.wordnet import WordNetLemmatizer
from nltk.corpus import wordnet
lmtzr = WordNetLemmatizer()
POS = pos_tag(text)

def get_wordnet_pos(treebank_tag):
        #maps pos tag so lemmatizer understands
        from nltk.corpus import wordnet
        if treebank_tag.startswith('J'):
            return wordnet.ADJ
        elif treebank_tag.startswith('V'):
            return wordnet.VERB
        elif treebank_tag.startswith('N'):
            return wordnet.NOUN
        elif treebank_tag.startswith('R'):
            return wordnet.ADV
        else:
            return wordnet.NOUN
 lmtzr.lemmatize(text[i], get_wordnet_pos(POS[i][1]))

问题是 POS 标记器知道“procaspases”是“NNS”,但是我如何将 NNS 转换为 wordnet,因为即使在词形还原器之后,“procaspases”仍然是“procaspaseS”。

4

2 回答 2

8

NLTK 处理大多数复数形式,而不仅仅是删除结尾的 's。

import nltk
from nltk.stem.wordnet import WordNetLemmatizer

Lem = WordNetLemmatizer()

phrase = 'cobblers ants women boys needs finds binaries hobbies busses wolves'

words = phrase.split()
for word in words :
  lemword = Lem.lemmatize(word)
  print(lemword)

输出: cobbler ant woman boy need find binary hobby bus wolf

于 2016-12-08T00:41:35.753 回答
6

我可以使用 wordnet.morphy 轻松地对事物进行词形还原:

>>> from nltk.corpus import wordnet
>>> wordnet.morphy('cats')
u'cat'

请注意 procaspases 不在 WordNet 中(但是,caspase 是,而 morphy 会将 caspase 作为引理),并且可能您的 lemmatizer 根本无法识别它。如果您没有对其他词进行词形还原的问题,那么它可能与实施无关。

于 2015-07-03T17:46:35.483 回答