| import json |
| from typing import Dict |
|
|
|
|
| def read_text_file(file_path: str) -> str: |
| with open(file_path, 'r', encoding='utf-8') as file: |
| return file.read() |
|
|
|
|
| def read_json_file(file_path: str) -> Dict: |
| with open(file_path, 'r', encoding='utf-8') as file: |
| return json.load(file) |
|
|
|
|
| def write_text_file(file_path: str, content: str): |
| with open(file_path, 'w', encoding='utf-8') as file: |
| file.write(content) |
|
|
|
|
| def write_json_file(file_path: str, data:dict) -> Dict: |
| with open(file_path, "w", encoding="utf-8") as json_file: |
| json_file.write(json.dumps(data, indent=4, ensure_ascii=False)) |
|
|
|
|
| def parse_llm_output_to_json(output_text: str) -> dict: |
| """ |
| Safely parse LLM output text into a Python dictionary. |
| """ |
| start = output_text.find("{") |
| end = output_text.rfind("}") + 1 |
| json_str = output_text[start:end] |
| try: |
| data = json.loads(json_str) |
| except: |
| raise |
| data = {} |
| return data |
|
|
| def json_to_markdown(paper): |
| """ |
| Converts a paper dictionary to a Markdown string with multi-level headlines. |
| |
| Args: |
| paper (dict): The paper dictionary containing problem details and tasks. |
| |
| Returns: |
| str: A Markdown-formatted string representing the paper. |
| """ |
| markdown_lines = [] |
|
|
| |
| markdown_lines.append("## Problem Background") |
| markdown_lines.append(paper.get('problem_background', 'No background provided.') + "\n") |
|
|
| |
| markdown_lines.append("## Problem Requirement") |
| markdown_lines.append(paper.get('problem_requirement', 'No requirements provided.') + "\n") |
|
|
| |
| markdown_lines.append("## Problem Analysis") |
| markdown_lines.append(paper.get('problem_analysis', 'No analysis provided.') + "\n") |
|
|
| |
| if 'problem_modeling' in paper: |
| markdown_lines.append("## Problem Modeling") |
| markdown_lines.append(paper.get('problem_modeling', 'No modeling provided.') + "\n") |
|
|
| |
| tasks = paper.get('tasks', []) |
| if tasks: |
| markdown_lines.append("## Tasks\n") |
| for idx, task in enumerate(tasks, start=1): |
|
|
| markdown_lines.append(f"### Task {idx}") |
|
|
| task_description = task.get('task_description', 'No description provided.') |
| markdown_lines.append("#### Task Description") |
| markdown_lines.append(task_description + "\n") |
|
|
| |
| task_analysis = task.get('task_analysis', 'No analysis provided.') |
| markdown_lines.append("#### Task Analysis") |
| markdown_lines.append(task_analysis + "\n") |
|
|
| |
| task_formulas = task.get('mathematical_formulas', 'No formulas provided.') |
| markdown_lines.append("#### Mathematical Formulas") |
| if isinstance(task_formulas, list): |
| for formula in task_formulas: |
| markdown_lines.append(f"$${formula}$$") |
| else: |
| markdown_lines.append(f"$${task_formulas}$$") |
| markdown_lines.append("") |
|
|
| |
| task_modeling = task.get('mathematical_modeling_process', 'No modeling process provided.') |
| markdown_lines.append("#### Mathematical Modeling Process") |
| markdown_lines.append(task_modeling + "\n") |
|
|
| |
| task_result = task.get('result', 'No result provided.') |
| markdown_lines.append("#### Result") |
| markdown_lines.append(task_result + "\n") |
|
|
| |
| task_answer = task.get('answer', 'No answer provided.') |
| markdown_lines.append("#### Answer") |
| markdown_lines.append(task_answer + "\n") |
|
|
| |
| charts = task.get('charts', []) |
| if charts: |
| markdown_lines.append("#### Charts") |
| for i, chart in enumerate(charts, start=1): |
| markdown_lines.append(f"##### Chart {i}") |
| markdown_lines.append(chart + "\n") |
|
|
| |
| |
| |
| |
|
|
| |
| markdown_str = "\n".join(markdown_lines) |
| return markdown_str |
|
|
|
|
| def json_to_markdown_general(json_data): |
| """ |
| Convert a JSON object to a markdown format. |
| |
| Args: |
| - json_data (str or dict): The JSON data to convert. It can be a JSON string or a dictionary. |
| |
| Returns: |
| - str: The markdown formatted string. |
| """ |
| |
| if isinstance(json_data, str): |
| json_data = json.loads(json_data) |
|
|
| def recursive_markdown(data, indent=0): |
| markdown_str = "" |
| indent_space = " " * indent |
| |
| if isinstance(data, dict): |
| for key, value in data.items(): |
| markdown_str += f"### {key}\n" |
| markdown_str += recursive_markdown(value, indent + 1) |
| elif isinstance(data, list): |
| for index, item in enumerate(data): |
| markdown_str += f"- **Item {index + 1}**\n" |
| markdown_str += recursive_markdown(item, indent + 1) |
| else: |
| markdown_str += f"- {data}\n" |
| |
| return markdown_str |
| |
| markdown = recursive_markdown(json_data) |
| return markdown |
|
|
|
|