Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.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
使用Stanford coreNLP的python nltk中的共引用解析_Python_Nlp_Nltk_Stanford Nlp - Fatal编程技术网

使用Stanford coreNLP的python nltk中的共引用解析

使用Stanford coreNLP的python nltk中的共引用解析,python,nlp,nltk,stanford-nlp,Python,Nlp,Nltk,Stanford Nlp,StanfordCorenlp提供了共指解析,还提供了一些关于其在Java中实现的见解 但是,我正在使用python和NLTK,我不确定如何在python代码中使用CoreNLP的共同引用解析功能。我已经能够在NLTK中设置StanfordParser,这是到目前为止我的代码 from nltk.parse.stanford import StanfordDependencyParser stanford_parser_dir = 'stanford-parser/' eng_model_pat

StanfordCorenlp提供了共指解析,还提供了一些关于其在Java中实现的见解

但是,我正在使用python和NLTK,我不确定如何在python代码中使用CoreNLP的共同引用解析功能。我已经能够在NLTK中设置StanfordParser,这是到目前为止我的代码

from nltk.parse.stanford import StanfordDependencyParser
stanford_parser_dir = 'stanford-parser/'
eng_model_path = stanford_parser_dir  + "stanford-parser-models/edu/stanford/nlp/models/lexparser/englishRNN.ser.gz"
my_path_to_models_jar = stanford_parser_dir  + "stanford-parser-3.5.2-models.jar"
my_path_to_jar = stanford_parser_dir  + "stanford-parser.jar"
如何在python中使用CoreNLP的共同引用解析?

也许这对您有用?
如果没有,您可以尝试使用@Igor提到的

将两者结合起来。您可以尝试在这个GitHub repo中实现的python包装器:

本回购协议包含两个主要文件: corenlp.py client.py

执行以下更改以使coreNLP正常工作:

  • 在corenlp.py中,更改corenlp文件夹的路径。设置本地计算机包含corenlp文件夹的路径,并将该路径添加到corenlp.py的第144行

    如果不是corenlp\u路径:
    corenlp_path=

  • “corenlp.py”中的jar文件版本号不同。根据您拥有的corenlp版本进行设置。在corenlp.py的第135行进行更改

    jars=[“stanford-corenlp-3.4.1.jar”,
    “stanford-corenlp-3.4.1-models.jar”,
    “joda time.jar”,
    “xom.jar”,
    “jollyday.jar”]

  • 在本文中,将3.4.1替换为您下载的jar版本

  • 运行以下命令:

    python corenlp.py

  • 这将启动服务器

  • 现在运行主客户端程序

    python客户端.py

  • 这提供了一个字典,您可以使用“coref”作为键访问coref:

    约翰是一位计算机科学家。他喜欢编码

    {
         "coref": [[[["a Computer Scientist", 0, 4, 2, 5], ["John", 0, 0, 0, 1]], [["He", 1, 0, 0, 1], ["John", 0, 0, 0, 1]]]]
    }
    
    我已经在Ubuntu 16.04上试过了。使用java版本7或8

    ,相对较新的包装器,可能适合您

    假设文本是“巴拉克·奥巴马出生在夏威夷。他是总统。奥巴马于2008年当选。

    守则:

    # coding=utf-8
    
    import json
    from stanfordcorenlp import StanfordCoreNLP
    
    nlp = StanfordCoreNLP(r'G:\JavaLibraries\stanford-corenlp-full-2017-06-09', quiet=False)
    props = {'annotators': 'coref', 'pipelineLanguage': 'en'}
    
    text = 'Barack Obama was born in Hawaii.  He is the president. Obama was elected in 2008.'
    result = json.loads(nlp.annotate(text, properties=props))
    
    num, mentions = result['corefs'].items()[0]
    for mention in mentions:
        print(mention)
    
    上面的每一个“提及”都是这样的Python格言:

    {
      "id": 0,
      "text": "Barack Obama",
      "type": "PROPER",
      "number": "SINGULAR",
      "gender": "MALE",
      "animacy": "ANIMATE",
      "startIndex": 1,
      "endIndex": 3,
      "headIndex": 2,
      "sentNum": 1,
      "position": [
        1,
        1
      ],
      "isRepresentativeMention": true
    }
    

    斯坦福大学的CoreNLP现在有一个叫做StanfordNLP的,你可以在

    本机API仍然支持coref处理器,但您可以使用CoreNLPClient接口从Python调用“标准”CoreNLP(原始Java软件)

    因此,在遵循设置Python包装器的说明之后,您可以获得如下所示的共同引用链:

    从stanfordnlp.server导入CoreNLPClient
    巴拉克出生在夏威夷。他的妻子米歇尔出生在米兰。他说她很聪明
    打印(f“输入文本:{text}”)
    #设置客户端
    client=CoreNLPClient(属性={'annotators':'coref','coref.algorithm':'statistic'},超时=60000,内存=16G')
    #将请求提交到服务器
    ann=客户端。注释(文本)
    mychains=list()
    链=ann.corefChain
    对于链中链:
    mychain=list()
    #把这条链子的每一个字都循环一遍
    在链中提及。提及:
    #获取该提及所在的句子,并获取属于该提及的单词
    #(我们可以有多个词,例如,一个提词可以是像“他”这样的代词,也可以是像“他的妻子米歇尔”这样的复合名词)
    words\u list=ann.station[title.sentenceIndex].token[title.beginIndex:title.endIndex]
    #用上面提到的单词组成一个字符串
    单词=''.join([x.word代表单词列表中的x])
    mychain.append(单词)
    mychains.append(mychain)
    对于mychains中的链:
    打印(“”.连接(链))
    
    尝试过,但不起作用。Jython是python的java实现,我不能使用它,因为我的许多模块使用NLTK,我不能用java重新实现。还有其他建议吗?我们如何从您的JSON输出中创建
    {“coref”:[[[[“计算机科学家”,0,4,2,5],“John”,0,0,0,1],[[“He”,1,0,0,0,1],“John”,0,0,0,1]]}
    ?截至今天,该包装器的最新提交时间是2014年