import gradio as gr import json import tempfile import os import difflib def compare_texts(correct_file, wrong_file): """讀取並返回文件內容""" correct_text = correct_file.decode('utf-8') wrong_text = wrong_file.decode('utf-8') # 比較兩個文本並找出不同的位置 s = difflib.SequenceMatcher(None, wrong_text, correct_text) diff_positions = [] correct_text_with_positions = "" wrong_text_with_positions = "" wrong_ids = [] for i, (tag, i1, i2, j1, j2) in enumerate(s.get_opcodes()): if tag == "equal": correct_text_with_positions += correct_text[j1:j2] wrong_text_with_positions += wrong_text[i1:i2] else: correct_text_segment = correct_text[j1:j2] wrong_text_segment = wrong_text[i1:i2] # 對於不一緻的部分,添加標記 wrong_ids.extend(range(i1, i2)) correct_text_with_positions += f"[{correct_text_segment}]" wrong_text_with_positions += f"[{wrong_text_segment}]" wrong_ids_str = ",".join(map(str, wrong_ids)) return correct_text_with_positions, wrong_text_with_positions, wrong_ids_str def generate_json(file_id, correct_text, wrong_text, wrong_ids): """根據輸入生成 JSON 數據,並保存為文件""" wrong_ids_list = [int(x) for x in wrong_ids.split(',')] data = { "id": file_id, "original_text": wrong_text, "wrong_ids": wrong_ids_list, "correct_text": correct_text } json_data = json.dumps([data], ensure_ascii=False, indent=4) # 創建臨時文件來保存 JSON 數據 temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".json", mode='w', encoding='utf-8') temp_file.write(json_data) temp_file.close() return json_data, temp_file.name TITLE = """