Python NLTK:lemmatizer和pos_标签

Python NLTK:lemmatizer和pos_标签,python,nltk,lemmatization,Python,Nltk,Lemmatization,我建立了一个纯文本语料库,下一步是将我的所有文本进行语法化。我正在使用WordNetLemmatizer并需要每个标记的pos_标签,以避免出现诸如loving->lemma=loving and love->lemma=love 我想默认的WordNetLemmatizer POS标签是n(=名词),但是如何使用POS_标签呢?我认为预期的WordNetLemmatizer词性标签与我得到的词性标签不同。有什么能帮我的吗 在这行中,我认为单词_pos是错误的,这就是错误的原因 lemma=w

我建立了一个纯文本语料库,下一步是将我的所有文本进行语法化。我正在使用WordNetLemmatizer并需要每个标记的pos_标签,以避免出现诸如loving->lemma=loving and love->lemma=love


我想默认的WordNetLemmatizer POS标签是n(=名词),但是如何使用POS_标签呢?我认为预期的WordNetLemmatizer词性标签与我得到的词性标签不同。有什么能帮我的吗

在这行中,我认为单词_pos是错误的,这就是错误的原因

lemma=wordnet\u lemmatizer.lemmatize(单词,单词位置)



附加问题:pos_标签是否足以用于我的柠檬化,或者我需要另一个标签?我的文本是歌词…

您需要将pos\u标记器中的标记转换为wordnet识别的四个“语法类别”之一,然后将其作为单词\u pos传递给lemmatizer

发件人:

句法类别:名词类为n,动词类为v,形容词类为a,副词类为r


我认为你的诊断是正确的;nltk已经有了一个新的POS标记器,但是显示的解决方案应该仍然有效。如果您对
nltk.pos_tag()
的准确性满意(并且如果您的文本不太奇怪,它需要一个自定义标记器),您就不需要麻烦地安装另一个标记器。(不知羞耻的插件;P)试试这个:?这是一段代码片段,也许这也合适这个答案有一个很好的一行:;它是
wnpos=lambda e:('a'如果e[0]。lower()=='j'else e[0]。lower())如果e[0]。lower()在['n','r','v']else'n'
中。然后使用wnpos(nltk_pos)获取可以馈送到的pos。lemmatize()
import nltk
from nltk.corpus import PlaintextCorpusReader
from nltk import sent_tokenize, word_tokenize, pos_tag
from nltk.stem import WordNetLemmatizer
wordnet_lemmatizer = WordNetLemmatizer()

corpus_root = 'C:\\Users\\myname\\Desktop\\TestCorpus'
lyrics = PlaintextCorpusReader(corpus_root,'.*')

for fileid in lyrics.fileids():
     tokens = word_tokenize(lyrics.raw(fileid))
     tagged_tokens = pos_tag(tokens)
     for tagged_token in tagged_tokens:
         word = tagged_token[0]
         word_pos = tagged_token[1]
         print(tagged_token[0])
         print(tagged_token[1])
         lemma = wordnet_lemmatizer.lemmatize(word,pos=word_pos)
         print(lemma)