Code pour faire un rest service en Python qui consomme Stanford NLP
import cherrypy
import json
from stanfordcorenlp import StanfordCoreNLP
cherrypy.server.socket_host = 'localhost'
cherrypy.server.socket_port = 8888
class StanfordNLP:
def __init__(self, host='http://localhost', port=9000):
self.nlp = StanfordCoreNLP(host, port=port,
timeout=30000) # , quiet=False, logging_level=logging.DEBUG)
self.props = {
'annotators': 'tokenize,ssplit,pos,lemma,ner,parse,depparse,dcoref,relation',
'pipelineLanguage': 'en',
'outputFormat': 'json'
}
def word_tokenize(self, sentence):
return self.nlp.word_tokenize(sentence)
def pos(self, sentence):
return self.nlp.pos_tag(sentence)
def ner(self, sentence):
return self.nlp.ner(sentence)
def parse(self, sentence):
return self.nlp.parse(sentence)
def dependency_parse(self, sentence):
return self.nlp.dependency_parse(sentence)
def annotate(self, sentence):
return json.loads(self.nlp.annotate(sentence, properties=self.props))
@cherrypy.expose
class nlp_rest(object):
snlp = StanfordNLP()
@cherrypy.tools.accept(media='text/plain')
def GET(self):
return cherrypy.session['mystring']
@cherrypy.tools.json_in()
@cherrypy.tools.json_out()
def POST(self):
try:
data = cherrypy.request.json
str1 = self.snlp.annotate(data['text'])
str2 = self.snlp.pos(data['text'])
str3 = self.snlp.word_tokenize(data['text'])
str4 = self.snlp.ner(data['text'])
str5 = self.snlp.parse(data['text'])
str6 = self.snlp.dependency_parse(data['text'])
return {
"annotate": str1,
"pos": str2,
"tokenize": str3,
"ner": str4,
"parse": str5,
"dependency_parse": str6
}
except:
return {"error": "Exception 22-31"}
def PUT(self, another_string):
cherrypy.session['mystring'] = another_string
def DELETE(self):
cherrypy.session.pop('mystring', None)
if __name__ == '__main__':
conf = {
'/': {
'request.dispatch': cherrypy.dispatch.MethodDispatcher(),
'tools.sessions.on': True,
'tools.response_headers.on': True,
'tools.response_headers.headers': [('Content-Type', 'text/plain')],
}
}
cherrypy.quickstart(nlp_rest(), '/', conf)
Commentaires
Publier un commentaire