Я использую python3.5 с функцией nltk pos_tag и WordNetLemmatizer. Моя цель - сгладить слова в нашей базе данных для классификации текста. Я пытаюсь протестировать с помощью лемматизатора и сталкиваюсь со странным поведением при использовании тега 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)