我创建了一个纯文本语料库,下一步是对所有文本进行词形归并处理。我使用的是 WordNetLemmatizer,需要每个标记的 pos_tag 来避免出现爱 -> lemma = 爱和喜爱 -> lemma = 喜爱等问题...
我认为默认的 WordNetLemmatizer-POS-Tag 是 n (=名词),但是我该如何使用 pos_tag?我认为期望的 WordNetLemmatizer-POS-Tag 与我得到的 pos_tag 不同。是否有一种函数或其他方法可以帮助我解决这个问题?!?!
我认为默认的 WordNetLemmatizer-POS-Tag 是 n (=名词),但是我该如何使用 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对于我的词形还原是否足够?我需要另一个标记器吗?我的文本是歌词...
nltk.pos_tag()
的准确性感到满意(并且如果您的文本不太奇怪,需要自定义标记器),则无需安装其他标记器。 - alexiswnpos = lambda e: ('a' if e[0].lower() == 'j' else e[0].lower()) if e[0].lower() in ['n', 'r', 'v'] else 'n'
。然后使用 wnpos(nltk_pos) 来获取你可以传递给 .lemmatize() 的词性。 - wordsforthewise