Stanford NLP + Cherry PI

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