3

を使用してレンマライズしたい

from nltk import word_tokenize, sent_tokenize, pos_tag
from nltk.stem.wordnet import WordNetLemmatizer
from nltk.corpus import wordnet
lmtzr = WordNetLemmatizer()
POS = pos_tag(text)

def get_wordnet_pos(treebank_tag):
        #maps pos tag so lemmatizer understands
        from nltk.corpus import wordnet
        if treebank_tag.startswith('J'):
            return wordnet.ADJ
        elif treebank_tag.startswith('V'):
            return wordnet.VERB
        elif treebank_tag.startswith('N'):
            return wordnet.NOUN
        elif treebank_tag.startswith('R'):
            return wordnet.ADV
        else:
            return wordnet.NOUN
 lmtzr.lemmatize(text[i], get_wordnet_pos(POS[i][1]))

問題は、POS タガーが「プロカスパーゼ」が「NNS」であることを取得することですが、レンマタイザーの後でも「プロカスパーゼ」はそのまま「プロカスパーゼS」のままであるため、NNS をワードネットに変換するにはどうすればよいかということです。

4

2 に答える 2

8

NLTK は、末尾の 's.' を削除するだけでなく、ほとんどの複数形を処理します。

import nltk
from nltk.stem.wordnet import WordNetLemmatizer

Lem = WordNetLemmatizer()

phrase = 'cobblers ants women boys needs finds binaries hobbies busses wolves'

words = phrase.split()
for word in words :
  lemword = Lem.lemmatize(word)
  print(lemword)

出力: cobbler ant woman boy need find binary Hobby bus wolf

于 2016-12-08T00:41:35.753 に答える
6

wordnet.morphy を使用して簡単に見出し語を付けることができます。

>>> from nltk.corpus import wordnet
>>> wordnet.morphy('cats')
u'cat'

procaspases は WordNet にはないことに注意してください (ただし、caspases はあり、morphy はカスパーゼをレンマとして提供します)、レンマタイザーは単にそれを認識しない可能性があります。他の単語の見出し語化に問題がない場合、それは実装とは無関係である可能性があります。

于 2015-07-03T17:46:35.483 に答える