Python命名实体识别查找特定实体

我目前有一个关于自然语言处理的项目,我尝试使用NLTK来识别一个人的名字。但是,问题比仅仅找出词性要更具挑战性。

"input = "Hello world, the case is complex. John Due, the plaintiff in the case has hired attorney John Smith for the case."

所以,挑战在于:我只想从整个文档中获取律师的名字作为返回结果,而不是其他人的名字,所以是“John Smith”,词性:PERSON,职业:律师。返回结果可以是这样的,或者只是“John Smith”。

{  "name": "John Smith", "type": "PERSON", "occupation": "attorney"}

我已经尝试了NLTK的词性分析,也尝试了Google Cloud Natural Language API,但它们只能帮助我检测到人的名字。我如何检测它是否是律师?请指导我正确的途径。我是否需要训练自己的数据或语料库来检测“律师”。我有成千上万的法院文档txt文件。


回答:

预训练的机器学习模型的问题在于,它们在你想要实现的目标上没有太多的灵活性。像Google Cloud Natural Language这样的工具提供了一些非常有趣的功能,但你不能让它们为你做其他工作。在这种情况下,你需要训练自己的模型,或者尝试不同的方法,使用像TensorFlow这样的工具,这需要很高的专业知识才能获得不错的结果。

然而,关于你的具体用例,你可以使用analyzeEntities方法来查找命名实体(常见名词和专有名词)。结果表明,如果“律师”这个词紧挨着实际是律师的人的名字(如“我是John,我的律师James正在处理我的案件。”或你的例子“Hello world, the case is complex. John Due, the plaintiff in the case has hired attorney John Smith for the case.”),它会将这两个实体联系在一起。

你可以使用我分享的这个调用在API Explorer中进行测试,你会看到对于这个请求:

{ "document": {  "content": "I am John, and my attorney James is working on my case.",  "type": "PLAIN_TEXT" }, "encodingType": "UTF8"}

一些结果实体是:

{   "name": "James",   "type": "PERSON",   "metadata": {   },   "salience": 0.5714066,   "mentions": [    {     "text": {      "content": "attorney",      "beginOffset": 18     },     "type": "COMMON"    },    {     "text": {      "content": "James",      "beginOffset": 27     },     "type": "PROPER"    }   ]  },  {   "name": "John",   "type": "PERSON",   "metadata": {   },   "salience": 0.23953272,   "mentions": [    {     "text": {      "content": "John",      "beginOffset": 5     },     "type": "PROPER"    }   ]  }

在这种情况下,你将能够解析JSON响应,并看到James(正确地)与“律师”这个名词联系在一起,而John则没有。然而,根据我进行的一些测试,这种行为似乎只有在“律师”这个词紧挨着你试图识别的名字时才可重现。

我希望这对你有帮助,但如果你的需求更复杂,你将无法使用像Natural Language API这样的现成解决方案来实现。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注