From 48672c979e514ccd28ef3426c37a11de135cd8aa Mon Sep 17 00:00:00 2001 From: Bo Peng Date: Fri, 15 Jun 2018 12:40:39 -0500 Subject: [PATCH] Update SpaCy server python script --- BotSharp.Core/Engines/SpaCy/server.py | 59 ++++++++++++++++++++++++--- 1 file changed, 54 insertions(+), 5 deletions(-) diff --git a/BotSharp.Core/Engines/SpaCy/server.py b/BotSharp.Core/Engines/SpaCy/server.py index e57cec2c..37d47bcf 100644 --- a/BotSharp.Core/Engines/SpaCy/server.py +++ b/BotSharp.Core/Engines/SpaCy/server.py @@ -1,6 +1,7 @@ from bottle import route, run, request from spacy.tokenizer import Tokenizer from spacy.pipeline import EntityRecognizer +from spacy.pipeline import TextCategorizer import spacy nlp = spacy.load('en') @@ -19,7 +20,7 @@ def tokenize(): print(token) list.append({'text': token.text, 'offset': token.idx}) return {'tokens': list} - + @route('/featurize') def tokenize(): doc = nlp(request.query.text) @@ -29,7 +30,7 @@ def tokenize(): print(vec) list.append(str(vec.real)) return {'vectors': list} - + @route('/entitize') def entitize(): doc = nlp(request.query.text) @@ -38,6 +39,54 @@ def entitize(): for entity in doc.ents: print(entity) list.append(entity) - return {'entities': list} - -run(host='0.0.0.0', port=5005, debug=True) \ No newline at end of file + return {'entities': list} + +@route('/textcategorizer', method='POST') +def textcategorizer(): + texts = request.json["Texts"] + golds = request.json["Golds"] + labels = request.json["Labels"] + print(labels) + train_data = [] + for index in range(len(texts)): + tuple =(texts[index], golds[index]) + train_data.append(tuple) + + print("training data body is: {0}".format(train_data)) + textcat = nlp.create_pipe('textcat') + nlp.add_pipe(textcat, last=True) + for label in labels: + textcat.add_label(label) + optimizer = nlp.begin_training() + for itn in range(2): + for doc, gold in train_data: + nlp.update([doc], [gold], sgd=optimizer) + + textcat.to_disk('./textcat_try') + + + + return {'ModelName':'textcat_try'} + +@route('/predict') +def predict(): + textcat = TextCategorizer(nlp.vocab) + textcat.from_disk('./textcat_try') + + nlp.add_pipe(textcat, last=True) + + doc = nlp(request.query.text) + + #scores = textcat.predict([request.query.text]) + #print(scores) + + list = [] + for label, confidence in doc.cats: + print(label) + list.append({'Label': label, 'Confidence': confidence}) + + print (list) + + return {'Labels': list} + +run(host='0.0.0.0', port=5005, debug=True)