如何使用"普遍依赖,增强"解析器来自stanford NLP in nltk?

时间:2017-11-12 14:58:24

标签: python parsing nlp nltk stanford-nlp

我能够在NLTK中使用来自斯坦福的通用依赖解析器,但有没有办法在NLTK中使用通用依赖,增强?如下所示Stanford Parser

由于

1 个答案:

答案 0 :(得分:0)

我的方法是绕过所提供的NLTK接口,直接查看其实现。

找到源代码./nltk/parse/corenlp.py

GenericCoreNLPParser类中,有一个称为api_call的方法。当您构造依赖项解析器对象时。您可以调用此方法来获取原始的JSON对象。

您将获得一个具有以下键的JSON对象:basic dependenciesenhancedDependenciesenhancedPlusPlusDependenciestokens。得到结果时。我们可以编写一个简单的函数来将结果解析为与调用其接口相同的格式。

以下是一些摘要

    def parse_sentence(self, sentence: str) -> object:
        """
        Parse a sentence for given sentence and with user-defined properties
        :type properties: object
        :type sentence: str
        The pizza is overpriced
        return : Json Object from the NLP server.
        """
        return self.get_parser().api_call(sentence)["sentences"][0]

一旦得到结果。


    def create_parsing_tuples(self, response: object, parse_type: str) -> list:
        """
        According to raw parse result, create dependency tuples by parse_type.
        parse_type options: basicDependencies , enhancedDependencies, enhancedPlusPlusDependencies

        :param response:
        :param parse_type:
        :return:
        """

        tuple_list = []
        for dependency in response[parse_type]:
            if dependency['dep'] == 'ROOT':
                continue
            governor = (dependency['governorGloss'], response['tokens'][dependency['governor'] - 1]['pos'])
            relation = dependency['dep']
            dependent = (dependency['dependentGloss'], response['tokens'][dependency['dependent'] - 1]['pos'])
            tuple_list.append((governor, relation, dependent))

        return [tuple_list]

在他们的源代码中,他们将JSON对象转换为树结构,这在大多数情况下更为通用。

Here is a demo picture

希望我的帖子会有所帮助。