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

时间:2018-01-24 23:07:10

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

我目前有一个关于NLP的项目,我尝试使用NLTK来识别PERSON名称。但是,问题比仅仅找到词性更具挑战性。

"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文件。

1 个答案:

答案 0 :(得分:1)

具有预先训练的机器学习模型的是,您想要实现的灵活性没有太大的空间。诸如Google Cloud Natural Language之类的工具提供了一些非常有趣的功能,但是你无法让它们为你做其他工作。在这样的casa中,您需要使用诸如TensorFlow之类的工具来训练您自己的模型或尝试不同的方法,这些工具需要高专业知识才能获得不错的结果。

但是,关于您的确切用例,您可以使用analyzeEntities method查找命名实体(常用名词和专有名称)。事实证明,如果律师的名字旁边是实际上是律师的人的姓名(如“我是约翰,我的律师詹姆斯正在研究我的案件。”或者你的例子“Hello world,the case”)案件的原告约翰·杜(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等开箱即用的解决方案。