This commit is contained in:
2025-09-06 10:11:09 +08:00
parent 6a8577d8ad
commit 619340f04d
12 changed files with 31 additions and 7 deletions

View File

@@ -61,13 +61,22 @@ class XunFeiAudioEvaluator:
def on_message(self, ws, message):
"""WebSocket消息处理"""
print(f"Received message: {message}")
data = json.loads(message)
# 检查是否存在错误码
if data.get("code") != 0:
print(f"API错误: {data.get('message', '未知错误')}")
ws.close()
return
try:
data = json.loads(message)
if data.get('code') != 0:
self.results = {'error': data.get('message', 'Unknown error')}
return
# 修复移除状态码为2的硬性检查只要有数据就解析
inner_data = data.get('data', {})
xml_b64 = inner_data.get('data', '')
if xml_b64:
xml_data = base64.b64decode(xml_b64)
xml_content = xml_data.decode("utf-8")
self.parse_evaluation_results(xml_content) # 确保中文也能进入解析
except Exception as e:
print(f"Error processing message: {e}")
self.results = {'error': str(e)}
# 安全获取data字段
response_data = data.get("data", {})
@@ -158,8 +167,23 @@ class XunFeiAudioEvaluator:
time.sleep(0.04)
def parse_evaluation_results(self, xml_content):
root = ET.fromstring(xml_content)
# 兼容中英文不同的根节点
read_node = root.find('.//read_sentence') or root.find('.//read_chapter')
if read_node is not None:
self.results = {
'total_score': read_node.attrib.get('total_score', '0'),
'accuracy': read_node.attrib.get('accuracy_score', '0'),
'fluency': read_node.attrib.get('fluency_score', '0'),
'integrity': read_node.attrib.get('integrity_score', '0')
}
else:
# 打印未匹配的XML结构用于调试
print(f"No evaluation nodes found in XML: {xml_content}")
self.results = {'error': '未找到有效评分节点'}
"""解析评测结果XML并提取得分信息"""
try:
print(xml_content)
root = ET.fromstring(xml_content)
# 查找read_chapter节点