我目前有一个关于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文件。
答案 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等开箱即用的解决方案。