nltk pos_tag 関数と WordNetLemmatizer で python3.5 を使用しています。私の目標は、データベース内の単語を平坦化してテキストを分類することです。lemmatizer を使用してテストしようとしていますが、同一のトークンで POS タガーを使用すると、奇妙な動作が発生します。以下の例では、3 つの文字列のリストがあり、それらを 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)