【问题标题】:Is there a way to tell NLTK that a certain word isn't a proper noun but a noun?有没有办法告诉 NLTK 某个词不是专有名词而是名词?
【发布时间】:2016-04-26 23:04:14
【问题描述】:

我正在做一些 NLP,以了解患者何时被诊断出患有多发性硬化症。

我想用 nltk 告诉我一个句子的名词是多发性硬化症。问题是,医生经常将多发性硬化症称为 MS,而 nltk 将其作为专有名词。

例如,这句话“他的 MS 于 1999 年被诊断出”。被标记为:[('His', 'PRP$'), ('MS', 'NNP'), ('was', 'VBD'), ('diagnosed', 'VBN'), ('in', 'IN'), ('1999', 'CD'), ('.', '.')]

MS 在这里应该是一个名词。有什么建议吗?

【问题讨论】:

  • 命名实体识别是个难题。试试this
  • 您目前使用的默认词性标注器。因此,在这种情况下,您需要通过包含正确的 POS 标记值来训练自己的语料库。如果不是作为后备机制,您应该在使用默认语料库 POS Tagger 模型后有另一个纠错层。
  • 数据的来源是什么?可以分享吗?是否有您希望它们始终是名词的单词/短语/缩写列表?你有标记数据吗?数据的域是什么? POS标记的最终目的是什么?回答这些问题将缩小问题的解决范围。
  • 在您的特定示例中,您可以对标记数据进行后处理并将('MS', 'NNP') 更改为('MS', 'NN')。但我猜你不想要那个,你想要一个完美的标记器。您是否考虑过如何确定要覆盖的单词?
  • 如果 'MS' 不是您唯一的实例,并且您想进行如此大规模的操作,我可能会研究 Word sense disambiguation 并使用医学词典作为最可能含义的基础字。

标签: python nlp nltk


【解决方案1】:

总结一下,你有以下选择:

  1. 在后处理中更正标签 - 有点难看但又快又容易。
  2. 使用外部名称实体识别器(@Bob Dylan 深思熟虑地建议的斯坦福 NER)- 这个涉及更多,特别是因为斯坦福 NER 是在 java 中并且不是特别快。
  3. 针对特定领域的数据重新训练 POS 标记器(您是否有足够大的带注释数据集来使用它?)
  4. 使用 WSD(词义消歧)方法 - 首先,您需要有一个好的域字典才能使用。

【讨论】:

    猜你喜欢
    • 2016-03-31
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多