【问题标题】:NLTK named entity recognition in dutch荷兰语 NLTK 命名实体识别
【发布时间】:2012-07-02 20:04:28
【问题描述】:

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

我期待 Christiane 被检测为命名实体。 有什么帮助吗?

【问题讨论】:

  • 当“Christiane”出现在句子中间时会发生什么?
  • @larsmans 也没有实体。我什至尝试使用训练语料库中的一句话,但没有运气。我在conll2002语料库(ned.train)上使用了train_chunker.py
  • 你能具体说明你是如何使用train_chunker.py的吗?我在text-processing.com/demo/tag 的demo 认出了Christiane,当然我在conll2002 上用过train_chunker,所以训练参数肯定有区别。
  • @Jacob 我做了python train_chunker.py conll2002。我也试过 python train_chunker.py conll2002 --classifier Maxent ,但是,大约 40 分钟后,得到了 ValueError: setting an array element with a sequence. 。您是如何训练分类器的?

标签: python nlp nltk named-entity-recognition


【解决方案1】:

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

【讨论】:

  • 我已经重现了有问题的问题,即使标记器和分块器仅在 ned.train 上进行训练,它也会发生。此外,即使在带有金色 POS 标签的训练语料库的句子中,分块器似乎也无法识别任何 NE。
猜你喜欢
  • 1970-01-01
  • 2013-10-19
  • 2011-08-08
  • 2015-10-28
  • 1970-01-01
  • 2020-02-01
  • 2017-05-18
  • 1970-01-01
  • 2014-08-15
相关资源
最近更新 更多