Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有办法告诉NLTK某个单词不是';不是专有名词而是名词?_Python_Nlp_Nltk - Fatal编程技术网

Python 有没有办法告诉NLTK某个单词不是';不是专有名词而是名词?

Python 有没有办法告诉NLTK某个单词不是';不是专有名词而是名词?,python,nlp,nltk,Python,Nlp,Nltk,我正在做NLP,在那里我发现患者何时被诊断为多发性硬化症 我想用nltk告诉我一个句子的名词是多发性硬化症。问题是,医生经常将多发性硬化症称为MS,nltk将其作为专有名词 例如,这句话“他的多发性硬化症是在1999年被诊断出来的。”被标记为:[('His','PRP$),('MS','NNP'),('was','VBD'),('diagnostics','VBN'),('in','in'),('1999','CD'),(',',,')] MS在这里应该是一个名词。有什么建议吗?总结一下,您有以

我正在做NLP,在那里我发现患者何时被诊断为多发性硬化症

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

例如,这句话“他的多发性硬化症是在1999年被诊断出来的。”被标记为:
[('His','PRP$),('MS','NNP'),('was','VBD'),('diagnostics','VBN'),('in','in'),('1999','CD'),(',',,')]


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

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

  • 在后处理中更正标记-有点难看,但快速简单
  • 使用外部名称实体识别器(Stanford NER,正如@Bob Dylan深思熟虑地建议的那样)——这一个更复杂,特别是因为Stanford NER使用java,速度不是特别快
  • 对特定于域的数据重新培训POS标记器(您是否有足够大的注释数据集来使用它?)
  • 使用WSD(词义消歧)方法-首先,您需要有一个好的域词典来使用

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