用于Python的Stanford Parser:输出格式

时间:2017-01-07 14:28:40

标签: python parsing nltk stanford-nlp

我目前正在使用Stanford Parser的Python界面。

@GET("/data/2.5/weather")
Observable<WeatherResponse> getWeather(@Query("q") String city, @Query("APPID") String api);

我得到的输出看起来像这样:

    from nltk.parse.stanford import StanfordParser
    import os

    os.environ['STANFORD_PARSER'] ='/Users/au571533/Downloads/stanford-parser-full-2016-10-31'
    os.environ['STANFORD_MODELS'] = '/Users/au571533/Downloads/stanford-parser-full-2016-10-31'
    parser=StanfordParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")

    new=list(parser.raw_parse("The young man who boarded his usual train that Sunday afternoon was twenty-four years old and fat. "))
    print new

但是,我只需要部分语音标签,因此我希望输出的格式看起来像word / tag。

在java中,可以指定-outputFormat&#39; wordsAndTags&#39;它给出了我想要的东西。有关如何在Python中实现此功能的任何提示?

非常感谢帮助。 谢谢!

PS:试图使用斯坦福大学的POSTAGger,但对我感兴趣的一些词语的准确性要差得多。

1 个答案:

答案 0 :(得分:1)

如果您查看the NLTK classes for the Stanford parser,可以看到raw_parse_sents()方法没有发送您想要的-outputFormat wordsAndTags选项,而是发送-outputFormat Penn 。 如果您从StanfordParser派生自己的类,则可以覆盖此方法并指定wordsAndTags格式。

from nltk.parse.stanford import StanfordParser

class MyParser(StanfordParser):

        def raw_parse_sents(self, sentences, verbose=False):
        """
        Use StanfordParser to parse multiple sentences. Takes multiple sentences as a
        list of strings.
        Each sentence will be automatically tokenized and tagged by the Stanford Parser.
        The output format is `wordsAndTags`.

        :param sentences: Input sentences to parse
        :type sentences: list(str)
        :rtype: iter(iter(Tree))
        """
        cmd = [
            self._MAIN_CLASS,
            '-model', self.model_path,
            '-sentences', 'newline',
            '-outputFormat', 'wordsAndTags',
        ]
        return self._parse_trees_output(self._execute(cmd, '\n'.join(sentences), verbose))