2025-05-28 19:16:17 +08:00

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)