8

オランダ語のテキストから名前付きエンティティを抽出しようとしています。nltk-trainerを使用して、conll2002 オランダ語コーパスでタガーとチャンカーをトレーニングしました。ただし、チャンカーからの parse メソッドは名前付きエンティティを検出していません。これが私のコードです:

str = 'Christiane heeft een lam.'

tagger = nltk.data.load('taggers/dutch.pickle')
chunker = nltk.data.load('chunkers/dutch.pickle')

str_tags = tagger.tag(nltk.word_tokenize(str))
print str_tags

str_chunks = chunker.parse(str_tags)
print str_chunks

そして、このプログラムの出力:

[('Christiane', u'N'), ('heeft', u'V'), ('een', u'Art'), ('lam', u'Adj'), ('.', u'Punc')]
(S Christiane/N heeft/V een/Art lam/Adj ./Punc)

クリスティアーネが名前付き実体として検出されることを期待していました。何か助けはありますか?

4

1 に答える 1

7

コーパスにはスペイン語とオランダ語の両方のテキストが含まれているため、 のようにパラメーターconll2002を必ず使用する必要があります。スペイン語とオランダ語の両方でトレーニングすると、結果が悪くなります。fileidspython train_chunker.py conll2002 --fileids ned.train

デフォルトのアルゴリズムは Tagger ベースの Chunker であり、conll2002 ではうまく機能しません。代わりに、NaiveBayes のような分類子ベースのチャンカーを使用すると、完全なコマンドは次のようになります (結果のチャンカーが "Christiane" を "PER" として認識することを確認しました)。

python train_chunker.py conll2002 --fileids ned.train --classifier NaiveBayes --filename ~/nltk_data/chunkers/conll2002_ned_NaiveBayes.pickle

于 2012-07-06T01:43:18.493 に答える