次のコマンドで始まるテキスト文字列から名詞を抽出するために NLTK を使用しています。
tagged_text = nltk.pos_tag(nltk.Text(nltk.word_tokenize(some_string)))
英語でうまくいきます。ドイツ語でも機能させる簡単な方法はありますか?
(自然言語プログラミングの経験はありませんが、これまでのところ素晴らしい python nltk ライブラリを使用することができました。)
自然言語ソフトウェアは、コーパスとコーパスが提供する統計を活用することで魔法のように機能します。nltk がドイツ語を正しくトークン化できるように、ドイツ語のコーパスについて nltk に伝える必要があります。EUROPARL corpus は、あなたを前進させるのに役立つと信じています。
設定例については、nltk.corpus.europarl_rawとこの回答を参照してください。
また、この質問に「nlp」のタグを付けることを検討してください。
パターン ライブラリには、ドイツ語の文を解析する関数が含まれており、結果には品詞タグが含まれます。以下は、ドキュメントからコピーされたものです。
from pattern.de import parse, split
s = parse('Die Katze liegt auf der Matte.')
s = split(s)
print s.sentences[0]
>>> Sentence('Die/DT/B-NP/O Katze/NN/I-NP/O liegt/VB/B-VP/O'
'auf/IN/B-PP/B-PNP der/DT/B-NP/I-PNP Matte/NN/I-NP/I-PNP ././O/O')
SSTS タグ セットを使用する場合は、オプションのパラメーターを設定できますtagset="STTS"
。
更新: 別のオプションはspacy です。このブログ記事に簡単な例があります:
import spacy
nlp = spacy.load('de')
doc = nlp(u'Ich bin ein Berliner.')
# show universal pos tags
print(' '.join('{word}/{tag}'.format(word=t.orth_, tag=t.pos_) for t in doc))
# output: Ich/PRON bin/AUX ein/DET Berliner/NOUN ./PUNCT
品詞 (POS) タグ付けは、特定の [自然] 言語に非常に固有です。NLTK には、特定のトークン内の特定のトークンのタグを推測するために独自の手法を使用するさまざまなタガーが多数含まれています。これらのタガーのほとんど (すべてではない) は、「トリックを実行する」ためのメインまたは唯一のデバイスとして、ある種の統計モデルを使用します。このようなタガーは、この言語の統計的表現を構築するための「トレーニング データ」を必要とし、トレーニング データはコーパスの形式で提供されます。
NTLK「ディストリビューション」自体には、これらのコーパスの多くと、さまざまなタイプのコーパスを読み取るための API を提供する「コーパス リーダー」のセットが含まれています。NTLK 自体の状況と、これにドイツ語のコーパスが含まれているかどうかはわかりません。ただし、無料のコーパスを見つけて、適切な NTLK コーパス リーダーを満たす形式に変換する必要があります。これを使用して、ドイツ語の POS タガーをトレーニングできます。
独自のコーパスを作成することもできますが、それは骨の折れる仕事です。あなたが大学で働いているなら、あなたは賄賂やそうでなければ学生にあなたのためにそれをするように強制する方法を見つけなければなりません;-)
おそらく、Stanford POS tagger を使用できます。以下、私が書いたレシピです。私がコンパイルしたドイツ語 NLP の Python レシピがあり、http://htmlpreview.github.io/ ?https://github.com/alvations/DLTK/blob/master/docs/index.html でアクセスできます。
#-*- coding: utf8 -*-
import os, glob, codecs
def installStanfordTag():
if not os.path.exists('stanford-postagger-full-2013-06-20'):
os.system('wget http://nlp.stanford.edu/software/stanford-postagger-full-2013-06-20.zip')
os.system('unzip stanford-postagger-full-2013-06-20.zip')
return
def tag(infile):
cmd = "./stanford-postagger.sh "+models[m]+" "+infile
tagout = os.popen(cmd).readlines()
return [i.strip() for i in tagout]
def taglinebyline(sents):
tagged = []
for ss in sents:
os.popen("echo '''"+ss+"''' > stanfordtemp.txt")
tagged.append(tag('stanfordtemp.txt')[0])
return tagged
installStanfordTag()
stagdir = './stanford-postagger-full-2013-06-20/'
models = {'fast':'models/german-fast.tagger',
'dewac':'models/german-dewac.tagger',
'hgc':'models/german-hgc.tagger'}
os.chdir(stagdir)
print os.getcwd()
m = 'fast' # It's best to use the fast german tagger if your data is small.
sentences = ['Ich bin schwanger .','Ich bin wieder schwanger .','Ich verstehe nur Bahnhof .']
tagged_sents = taglinebyline(sentences) # Call the stanford tagger
for sent in tagged_sents:
print sent
ドイツ語の注釈付き TIGER コーパスを NLTK で使用するために変換する方法についてのブログ投稿を書きました。こちらをご覧ください。