2016-12-09 56 views
0

非常に新しいnltk。英語以外の言語のPOS

これにより、品詞に従って品詞にタグを付けることができます。しかし、他の言語でこれを行うときにはどのようなステップが必要ですか?

import nltk 
sentence = "I'm not sure!" 
tokens = nltk.word_tokenize(sentence) 
tagged = nltk.pos_tag(tokens) 

UPDATE

私はスペイン語で始まるで興味を持っています。

UPDATE 2

import nltk 
from nltk.tokenize import word_tokenize 

training_set = [[(w.lower(),t) for w,t in s] for s in nltk.corpus.conll2002.tagged_sents('esp.train')] 

unigram_tagger = nltk.UnigramTagger(training_set) 
bigram_tagger = nltk.BigramTagger(train_set, backoff=unigram_tagger) 

tokens = [token.lower() for token in word_tokenize("El Congreso no podrá hacer ninguna ley con respecto al establecimiento de la religión, ni prohibiendo la libre práctica de la misma; ni limitando la libertad de expresión, ni de prensa; ni el derecho a la asamblea pacífica de las personas, ni de solicitar al gobierno una compensación de agravios.")] 

生産:

[('el', 'DA'), ('congreso', 'NC'), ('no', 'RN'), ('podrá', 'VMI'), ('hacer', 'VMN'), ('ninguna', 'DI'), ('ley', 'NC'), ('con', 'SP'), ('respecto', 'NC'), ('al', 'SP'), ('establecimiento', 'NC'), ('de', 'SP'), ('la', 'DA'), ('religión', 'NC'), (',', 'Fc'), ('ni', 'CC'), ('prohibiendo', None), ('la', 'DA'), ('libre', 'AQ'), ('práctica', 'NC'), ('de', 'SP'), ('la', 'DA'), ('misma', 'DI'), (';', 'Fx'), ('ni', 'CC'), ('limitando', None), ('la', 'DA'), ('libertad', 'NC'), ('de', 'SP'), ('expresión', 'NC'), (',', 'Fc'), ('ni', 'CC'), ('de', 'SP'), ('prensa', 'NC'), (';', 'Fx'), ('ni', 'CC'), ('el', 'DA'), ('derecho', 'NC'), ('a', 'SP'), ('la', 'DA'), ('asamblea', 'NC'), ('pacífica', 'AQ'), ('de', 'SP'), ('las', 'DA'), ('personas', 'NC'), (',', 'Fc'), ('ni', 'CC'), ('de', 'SP'), ('solicitar', 'VMN'), ('al', 'SP'), ('gobierno', 'NC'), ('una', 'DI'), ('compensación', 'NC'), ('de', 'SP'), ('agravios', None), ('.', 'Fp')] 
+0

あなたの他の言語はまだ私には英語のように見えますが(私はわかりません)。 – lenz

+0

深刻なこと:それは本当に言語とタスクに依存します。トークン化のために、NLTKはいくつかの言語をサポートしています。つまり、 'word_tokenize()'の第2引数として言語を追加するだけです。 POSタグを使用するには、言語固有のモデル(サードパーティのサイトから入手する必要がある場合もあります)を使用してタグオブジェクトを作成する必要があります。そこには一つの答えはありません。問題の言語を指定する必要があります。 – lenz

+0

@lenz私は質問に応じて私の質問を更新しました。 – Baz

答えて

2

NLTK私の知る限り、英語以外の言語のタガーやパーサーを使用する準備が付属していません。 nltkの外部には、ダウンロードして使用できるツールがあります。

nltkは、スペイン語のタグ付きコーパスの1つをトレーニング資料として使用して、独自のタガーをスペイン語に訓練するツールを提供しています。たとえば、building a taggerのnltkの指示に従うことができますが、conll2002.tagged_sents("esp.train")をトレーニングデータとして使用します。それは約250Kの言葉しかないので、あなたは素晴らしいパフォーマンスを得ることはできませんが、それはあなたを始めるはずです。 (そしてもちろん、あなたはより大きなタグ付きコーパスを訓練することができます。)

+0

文章にタグを付ける場合や、自分で単語にタグを付ける場合は、譜表作成者の訓練方法を変更する必要があります。例えば、私がタガーを訓練したとき、「ハチア」は文の文脈のない前置詞であることを証明できますか? – Baz

+0

元の質問で2回目の更新に合わせて正しく作業しましたか? – Baz

+0

悪くないですが、あなたの解決策は未知語にタグを付けることができません(デフォルトのタグャーのためのものです)。 'conll2002.tagged_sents(" esp.testa ")'の 'evaluate()'メソッドを呼び出して、あなたのタグをテストしてください。また、nltkのツールキットには、ngramタガー(例えば、「HiddenMarkovModelTagger」、「PerceptronTagger」)よりも洗練されたタガーがありますが、トレーニングに時間がかかります。 – alexis

関連する問題