1- from nltk .parse .stanford import StanfordParser
1+ from nltk .parse .stanford import StanfordParser , GenericStanfordParser
22from nltk .internals import find_jars_within_path
3+ from nltk .tree import Tree
4+ from pycorenlp import StanfordCoreNLP
35
46
57class Parser :
@@ -25,6 +27,7 @@ def parse(self, line):
2527
2628 Returns:
2729 Tree object representing parsed sentence
30+ None if parse fails
2831 """
2932 tree = list (self .parser .raw_parse (line ))[0 ]
3033 tree = tree [0 ]
@@ -37,4 +40,28 @@ def __init__(self):
3740 self .parser = StanfordParser (
3841 model_path = 'edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz' )
3942 stanford_dir = self .parser ._classpath [0 ].rpartition ('/' )[0 ]
40- self .parser ._classpath = tuple (find_jars_within_path (stanford_dir ))
43+ self .parser ._classpath = tuple (find_jars_within_path (stanford_dir ))
44+
45+
46+ class StanfordServerParser (Parser , GenericStanfordParser ):
47+ """Follow the readme to setup the Stanford CoreNLP server"""
48+ def __init__ (self , host = 'localhost' , port = 9000 ):
49+ url = 'http://{0}:{1}' .format (host , port )
50+ self .nlp = StanfordCoreNLP (url )
51+
52+ def _make_tree (self , result ):
53+ return Tree .fromstring (result )
54+
55+ def parse (self , sent ):
56+ output = self .nlp .annotate (sent , properties = {
57+ 'annotators' : 'parse' ,
58+ 'outputFormat' : 'json'
59+ })
60+
61+ # Got random html, return empty tree
62+ if isinstance (output , unicode ):
63+ return Tree ('' , [])
64+
65+ parse_output = output ['sentences' ][0 ]['parse' ] + '\n \n '
66+ tree = next (next (self ._parse_trees_output (parse_output )))[0 ]
67+ return tree
0 commit comments