【问题标题】:Python Named Entities Recognition finding a specific entityPython命名实体识别查找特定实体
【发布时间】:2018-07-04 03:07:36
【问题描述】:

我目前有一个关于 NLP 的项目,我尝试使用 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,但它只是帮助我检测 PERSON 名称。怎么判断是不是律师?请指导我采取正确的方法。我是否必须训练自己的数据或语料库来检测“律师”。我有成千上万的法庭文件 txt 文件。

【问题讨论】:

  • 我认为使用经典的 NER 方法/工具无法完成“在文本中未明确检测占用”。您可以获得人员姓名,但您需要一些训练有素的机器学习模型来预测/分类职业。

标签: machine-learning nlp deep-learning google-cloud-platform nltk


【解决方案1】:

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

但是,对于您的具体用例,您可以使用 analyzeEntities method 来查找命名实体(常用名词和专有名称)。事实证明,如果律师这个词紧挨着实际是律师的人的名字(如“我是约翰,我的律师詹姆斯正在处理我的案子。”或者你的例子“你好世界,案件很复杂。此案的原告 John Due 已聘请律师 John Smith 处理此案。”),它将把这两个实体绑定在一起。

您可以使用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(正确地)连接到了 attorney 名词,而 John 没有。但是,根据我一直在运行的一些测试,这种行为似乎只有在您尝试识别的姓名之一旁边出现“律师”一词时才能重现。

我希望这对您有所帮助,但如果您的需求更加复杂,您将无法使用自然语言 API 等开箱即用的解决方案来实现。

【讨论】:

    猜你喜欢
    • 2014-03-17
    • 2020-11-04
    • 2011-07-31
    • 2018-03-08
    • 2020-07-02
    • 2015-01-11
    • 2013-02-09
    • 1970-01-01
    • 2010-11-04
    相关资源
    最近更新 更多