我正在使用带有 nltk pos_tag 函数和 WordNetLemmatizer 的 python3.5。我的目标是展平我们数据库中的单词以对文本进行分类。我正在尝试使用 lemmatizer 进行测试,但在相同的令牌上使用 POS 标记器时遇到了奇怪的行为。在下面的示例中,我有一个包含三个字符串的列表,当在 POS 标记器中运行它们时,每个其他元素都作为名词(NN)返回,其余元素作为动词(VBG)返回。
这会影响词形还原。输出看起来像这样:
pos Of token: v
lemmatized token: skydive
pos Of token: n
lemmatized token: skydiving
pos Of token: v
lemmatized token: skydive
如果我将更多元素添加到相同字符串的列表中,则此相同模式将继续。我正在使用的完整代码是这样的:
tokens = ['skydiving', 'skydiving', 'skydiving']
lmtzr=WordNetLemmatizer()
def get_wordnet_pos(treebank_tag):
if treebank_tag.startswith('J'):
return 'a'
elif treebank_tag.startswith('V'):
return 'v'
elif treebank_tag.startswith('N'):
return 'n'
elif treebank_tag.startswith('R'):
return 'r'
elif treebank_tag.startswith('S'):
return ''
else:
return ''
numTokens = (len(tokens))
for i in range(0,numTokens):
tokens[i]=tokens[i].replace(" ","")
noSpaceTokens = pos_tag(tokens)
for token in noSpaceTokens:
tokenStr = str(token[1])
noWhiteSpace = token[0].replace(" ", "")
preLemmed = get_wordnet_pos(tokenStr)
print("pos Of token: " + preLemmed)
lemmed = lmtzr.lemmatize(noWhiteSpace,preLemmed)
print("lemmatized token: " + lemmed)