我目前正在使用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,但对我感兴趣的一些词语的准确性要差得多。
答案 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))