【问题标题】:Typed Dependency Parsing in NLTK PythonNLTK Python 中的类型化依赖解析
【发布时间】:2018-07-03 12:00:41
【问题描述】:

我有一句话

"I shot an elephant in my sleep"

句子的类型依赖是

nsubj(shot-2, I-1)
det(elephant-4, an-3)
dobj(shot-2, elephant-4)
prep(shot-2, in-5)
poss(sleep-7, my-6)
pobj(in-5, sleep-7)

如何在 Python 中使用 NLTK(最好,但也可以)使用 Stanford Parser(或任何解析器)获取类型化依赖项?

注意 - 我知道它与 this question 非常相似。但不存在好的答案。

【问题讨论】:

    标签: python nltk stanford-nlp


    【解决方案1】:

    Stanford 解析器有一个 python 包装器,你可以得到它here

    它会给你句子的依赖树。


    编辑:

    我在这里假设您启动了一个服务器,如here 所说。我还假设你已经安装了 jsonrpclib。

    下面的代码会产生你想要的:

    import json
    import jsonrpclib
    
    class StanfordNLP:
        def __init__(self, port_number=8080):
            self.server = jsonrpclib.Server("http://localhost:%d" % port_number)
    
        def parse(self, text):
            return json.loads(self.server.parse(text))
    
    nlp = StanfordNLP()
    sentence = 'I shot an elephant in my sleep'
    result = nlp.parse(sentence)
    result['sentences'][0]['indexeddependencies']
    
    >>>
    ['root', 'ROOT-0', 'shot-2']
    ['nsubj', 'shot-2', 'I-1']
    ['det', 'elephant-4', 'an-3']
    ['dobj', 'shot-2', 'elephant-4']
    ['poss', 'sleep-7', 'my-6']
    ['prep_in', 'shot-2', 'sleep-7']
    

    EDIT2:

    现在,斯坦福解析器有一个HTTP API。因此,不再需要 python 包装器。

    【讨论】:

    • 它有效。但它给出的输出与文档中示例中的输出不同。我该如何纠正?
    • 我编辑了我的答案,以便为您提供更多详细信息。结果和你的不完全一样,但我认为它已经足够接近了。
    猜你喜欢
    • 1970-01-01
    • 2011-11-18
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多