我想在python中使用wordnet lemmatizer,并且我了解到默认pos标记为NOUN,并且除非为pos标记明确指定为VERB,否则它不会为动词输出正确的引理。
我的问题是,为了准确地进行上述词素化,什么是最好的镜头?
我使用了pos标记nltk.pos_tag,但是迷失了将树库pos标记集成到wordnet兼容pos标记中的信息。请帮忙
nltk.pos_tag
from nltk.stem.wordnet import WordNetLemmatizer lmtzr = WordNetLemmatizer() tagged = nltk.pos_tag(tokens)
我得到了NN,JJ,VB,RB中的输出标签。如何将它们更改为Wordnet兼容标签?
我还必须训练nltk.pos_tag()带标签的语料库,还是可以直接在数据中使用它来进行评估?
nltk.pos_tag()
首先,您nltk.pos_tag()无需培训即可直接使用。该函数将从文件中加载预训练的标记器。您可以使用以下命令查看文件名nltk.tag._POS_TAGGER:
nltk.tag._POS_TAGGER
nltk.tag._POS_TAGGER >>> 'taggers/maxent_treebank_pos_tagger/english.pickle'
在使用Treebank语料库进行训练时,它也使用Treebank标签集。
以下功能会将树库标签映射到语音名称的WordNet部分:
from nltk.corpus import wordnet def get_wordnet_pos(treebank_tag): 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 ''
然后可以将返回值与lemmatizer一起使用:
from nltk.stem.wordnet import WordNetLemmatizer lemmatizer = WordNetLemmatizer() lemmatizer.lemmatize('going', wordnet.VERB) >>> 'go'
在将返回值传递给Lemmatizer之前,请先检查返回值,因为空字符串会产生KeyError。
KeyError