75

Python で wordnet lemmatizer を使用したかったのですが、デフォルトの pos タグが NOUN であり、pos タグが明示的に VERB として指定されていない限り、動詞の正しい見出し語が出力されないことがわかりました。

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

を使用して投稿タグ付けをnltk.pos_tag行いましたが、ツリーバンクの投稿タグをワードネット互換の投稿タグに統合することに迷っています。助けてください

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

NN、JJ、VB、RB で出力タグを取得します。これらをワードネット互換のタグに変更するにはどうすればよいですか?

また、タグ付けされたコーパスを使用してトレーニングnltk.pos_tag()する必要がありますか?それとも、データで直接使用して評価できますか?

4

8 に答える 8

95

まず、nltk.pos_tag()トレーニングせずに直接使用できます。この関数は、事前トレーニング済みのタガーをファイルから読み込みます。nltk.tag._POS_TAGGERファイル名は次のように表示できます。

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

Treebank コーパスでトレーニングされているため、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.

于 2013-03-23T18:15:42.243 に答える