我正在使用Python3.5的nltk pos_tag函数和WordNetLemmatizer。我的目标是在我们的数据库中拼合单词以分类文本。我正在尝试使用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)
是的,我担心缺乏背景是问题所在。我想我试图潜入nltk没有适当的背景。现在从第一章开始写这本书。必须找到另一种方法来尝试解决这个问题。 – kinghenry14