1. ホーム
  2. python

Python によるワードネットレマタイズと pos タグ付け

2023-12-05 05:36:56

質問

pythonでwordnet lemmatizerを使いたいのですが、デフォルトのposタグはNOUNで、posタグが明示的にVERBとして指定されない限り、動詞に対する正しいレンマを出力しないことを学びました。

私の質問は、上記のlemmatizationを正確に実行するためのベストショットとは何ですか?

私は、posタグ付けを nltk.pos_tag でposタグを付けましたが、ツリーバンクのposタグをワードネット互換のposタグに統合するのに迷っています。よろしくお願いします。

from nltk.stem.wordnet import WordNetLemmatizer
lmtzr = WordNetLemmatizer()
tagged = nltk.pos_tag(tokens)

NN,JJ,VB,RBというタグが出力されます。これらをワードネット互換のタグに変更するにはどうしたらよいでしょうか?

また nltk.pos_tag() をタグ付きコーパスで学習させる必要があるのでしょうか?

どのように解決するのですか?

まず最初に nltk.pos_tag() を学習させることなく直接使用することができます。 この関数は、事前に学習されたタグ付け器をファイルから読み込みます。ファイル名には と共に nltk.tag._POS_TAGGER :

nltk.tag._POS_TAGGER
>>> 'taggers/maxent_treebank_pos_tagger/english.pickle' 

Treebankコーパスで学習させたので、このコーパスにも ツリーバンクタグセット .

次の関数は、TreebankのタグをWordNetの品詞名にマッピングします。

from nltk.corpus import wordnet

def get_wordnet_pos(treebank_tag):

    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 ''

そして、その返り値をレムマタイザで利用することができます。

from nltk.stem.wordnet import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
lemmatizer.lemmatize('going', wordnet.VERB)
>>> 'go'

レンマタイザーに渡す前に戻り値をチェックします。空文字列だと KeyError .