NLTK:lemmatizer和pos_tag

时间:2016-03-08 14:39:22

标签: python nltk lemmatization

我建立了一个明文语料库,下一步就是将我的所有文本都化解。我使用 WordNetLemmatizer 并为每个令牌需要 pos_tag ,以便不会遇到问题,例如:爱 - >引理=爱和爱 - >引理=爱...

我认为默认的WordNetLemmatizer-POS-Tag是n(= Noun),但我如何使用pos_tag?我认为预期的WordNetLemmatizer-POS-Tag与我得到的pos_tag不同。是否有功能或某些东西可以帮助我?!?!

  

在这一行中,我认为word_pos是错误的,这是错误原因

     

lemma = wordnet_lemmatizer.lemmatize(word,word_pos)

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)

附加问题: pos_tag是否足以让我的词形还原还是需要另一个标记器?我的文字是歌词......

1 个答案:

答案 0 :(得分:2)

您需要将pos_tagger中的标记转换为四个"语法类别之一" wordnet识别,然后将其作为word_pos传递给lemmatizer。

来自the docs

  

句法类别:n代表名词文件,v代表动词文件,a代表形容词文件,r代表副词文件。