我正在尝试从荷兰文字中提取命名实体。我使用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)

我期望克里斯蒂安妮被视作一个命名实体。
有什么帮助吗?

最佳答案

conll2002语料库同时具有西类牙语和荷兰语文本,因此您应确保像fileids一样使用python 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

关于python - NLTK在荷兰命名实体识别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11293149/

10-11 01:29