| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- #将高考题md文档分割成单独的题目
- import re
- import os
- def parse_document(content):
- """
- 解析文档内容,提取所有题目和对应的答案详解
- """
- # 分割题目部分和答案部分
- parts = content.split("**《2024年新课标全国Ⅰ卷数学真题》参考答案**")
- if len(parts) < 2:
- return []
- questions_part = parts[0]
- answers_part = parts[1]
- # 提取所有题目
- questions = extract_questions(questions_part)
- # 提取所有答案
- answers = extract_answers(answers_part)
- # 合并题目和答案
- result = []
- for i, (q_num, q_content) in enumerate(questions):
- if i < len(answers):
- result.append((q_num, q_content, answers[i][1]))
- return result
- def extract_questions(content):
- """
- 从题目部分提取所有题目
- """
- questions = []
- # 匹配题目的正则表达式(匹配 "数字." 格式)
- pattern = r'(\d+).(.*?)(?=\d+.|$)'
- matches = re.finditer(pattern, content, re.DOTALL)
- for match in matches:
- question_num = match.group(1)
- question_content = match.group(2).strip()
- questions.append((question_num, question_content))
- return questions
- def extract_answers(content):
- """
- 从答案部分提取所有答案详解
- """
- answers = []
- # 匹配答案的正则表达式
- pattern = r'(\d+).(.*?)(?=\d+.|$)'
- matches = re.finditer(pattern, content, re.DOTALL)
- for match in matches:
- answer_num = match.group(1)
- answer_content = match.group(2).strip()
- # 清理答案内容,移除开头的选项字母
- answer_content = re.sub(r'^[A-D]', '', answer_content).strip()
- answers.append((answer_num, answer_content))
- return answers
- def get_question_type(question_num):
- """
- 根据题号确定题目类型
- """
- num = int(question_num)
- if 1 <= num <= 8:
- return "单选"
- elif 9 <= num <= 11:
- return "多选"
- elif 12 <= num <= 14:
- return "填空"
- else:
- return "解答"
- def format_question_md(question_num, question_content, answer_content):
- """
- 格式化单个题目为Markdown格式,答案用callouts隐藏
- """
- question_type = get_question_type(question_num)
- # 添加元数据
- metadata = f"""---
- Tags:
- - 题库
- 年份: 2024
- 源卷: 全国1
- 原题号: {question_num}
- 题目类型: {question_type}
- 知识点:
- -
- 难度:
- ---
- """
- # 处理答案内容,每一行都加上 > 前缀
- formatted_answer = ""
- for line in answer_content.split('\n'):
- if line.strip(): # 非空行
- formatted_answer += f"> {line}\n"
- else: # 空行
- formatted_answer += ">\n"
- md_content = f"""{metadata}# 第{question_num}题
- ## 题目
- {question_content}
- ## 答案
- > [!question]- 点击查看答案
- {formatted_answer}
- """
- return md_content
- def save_questions(questions_data, output_dir="questions"):
- """
- 保存所有题目为单独的Markdown文件
- """
- if not os.path.exists(output_dir):
- os.makedirs(output_dir)
- for question_num, question_content, answer_content in questions_data:
- filename = f"{question_num}.md"
- filepath = os.path.join(output_dir, filename)
- md_content = format_question_md(question_num, question_content, answer_content)
- with open(filepath, 'w', encoding='utf-8') as f:
- f.write(md_content)
- print(f"已保存: {filename}")
- def main():
- # 读取文档内容(这里使用文档2的内容)
- with open('document2.txt', 'r', encoding='utf-8') as f:
- content = f.read()
- # 解析文档
- questions_data = parse_document(content)
- if not questions_data:
- print("未能解析出题目数据")
- return
- print(f"成功解析 {len(questions_data)} 道题目")
- # 保存为单独的Markdown文件
- save_questions(questions_data)
- if __name__ == "__main__":
- main()
|