128 lines
3.7 KiB
Python
128 lines
3.7 KiB
Python
import json
|
|
|
|
from flask import Flask, request
|
|
|
|
from analysis_client import get_analysis_client
|
|
from translator_client import get_translation
|
|
|
|
app = Flask(__name__)
|
|
|
|
analysis_client = None
|
|
translator_client = None
|
|
|
|
|
|
def serialize_linked_entities(linked_entities):
|
|
result = []
|
|
for entity in linked_entities:
|
|
entity_item = {}
|
|
for key in ['bing_entity_search_api_id', 'data_source', 'data_source_entity_id', 'language', 'name', 'url']:
|
|
if key in entity:
|
|
entity_item[key] = entity[key]
|
|
if 'matches' in entity:
|
|
matches_list = []
|
|
for match in entity['matches']:
|
|
match_item = {}
|
|
for key in ['confidence_score', 'length', 'offset', 'text']:
|
|
if key in match:
|
|
match_item[key] = match[key]
|
|
matches_list.append(match_item)
|
|
entity_item['matches'] = matches_list
|
|
result.append(entity_item)
|
|
return result
|
|
|
|
|
|
def serialize_recognize_entities(recognize_entities):
|
|
result = []
|
|
for entity in recognize_entities:
|
|
item = {}
|
|
for key in ['category', 'confidence_score', 'length', 'offset', 'subcategory', 'text']:
|
|
if key in entity:
|
|
item[key] = entity[key]
|
|
result.append(item)
|
|
return result
|
|
|
|
|
|
@app.route('/ping')
|
|
def ping():
|
|
return 'MS-ACS Service'
|
|
|
|
|
|
@app.route('/wiki_links', methods=['post'])
|
|
def wiki_links():
|
|
response_body = {
|
|
'code': 0,
|
|
'content': None,
|
|
'message': ""
|
|
}
|
|
data_body = request.get_json()
|
|
global analysis_client
|
|
if analysis_client is None:
|
|
analysis_client = get_analysis_client()
|
|
try:
|
|
response = analysis_client.recognize_linked_entities(data_body)
|
|
for doc in response:
|
|
if not doc.is_error:
|
|
result = serialize_linked_entities(doc.entities)
|
|
response_body['code'] = 200
|
|
response_body['content'] = result
|
|
else:
|
|
response_body['code'] = 500
|
|
response_body['message'] = "doc is error"
|
|
return response_body
|
|
except Exception as e:
|
|
response_body['code'] = 500
|
|
response_body['message'] = repr(e)
|
|
return response_body
|
|
|
|
|
|
@app.route('/entities', methods=['post'])
|
|
def entities():
|
|
response_body = {
|
|
'code': 0,
|
|
'content': None,
|
|
'message': ""
|
|
}
|
|
data_body = request.get_json()
|
|
global analysis_client
|
|
if analysis_client is None:
|
|
analysis_client = get_analysis_client()
|
|
try:
|
|
response = analysis_client.recognize_entities(data_body)
|
|
for doc in response:
|
|
if not doc.is_error:
|
|
result = serialize_recognize_entities(doc.entities)
|
|
response_body['code'] = 200
|
|
response_body['content'] = result
|
|
else:
|
|
response_body['code'] = 500
|
|
response_body['message'] = "doc is error"
|
|
return response_body
|
|
except Exception as e:
|
|
response_body['code'] = 500
|
|
response_body['message'] = repr(e)
|
|
return response_body
|
|
|
|
|
|
@app.route('/translation', methods=['post'])
|
|
def translation():
|
|
response_body = {
|
|
'code': 0,
|
|
'content': None,
|
|
'message': ""
|
|
}
|
|
data_body = request.get_json()
|
|
text = data_body['text']
|
|
to_language = data_body['to_language']
|
|
try:
|
|
result_json = get_translation(text, to_language)
|
|
response_body['code'] = 200
|
|
response_body['content'] = json.loads(result_json)
|
|
except Exception as e:
|
|
response_body['code'] = 500
|
|
response_body['message'] = repr(e)
|
|
return response_body
|
|
|
|
|
|
if __name__ == '__main__':
|
|
app.run(host='0.0.0.0', port=5110)
|