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