From 69687a0601aed7b0fe65e7e0586844e6074fdb03 Mon Sep 17 00:00:00 2001 From: WangWeiye Date: Mon, 3 Apr 2023 19:31:52 +0800 Subject: [PATCH] 20230403 afternoon --- 工具/修改题目数据库.ipynb | 2 +- 工具/修改题目数据库.py | 2 +- 工具/全局未标注相同题目检测.py | 102 + 工具/关键字筛选题号.py | 2 +- .../小闲平台作业测验数据导入_2023届.ipynb | 2 +- 工具/剪贴板表格整理.ipynb | 116 + 工具/剪贴板表格整理.py | 63 + 工具/局部相似题目检测.py | 129 + 工具/工具面板.py | 54 +- 工具/手动统计结果转换.ipynb | 4 +- 工具/手动统计结果转换.py | 39 + 工具/批量添加字段数据.py | 83 + 工具/批量添加题库字段数据.ipynb | 227 +- 工具/批量生成题目pdf.py | 197 + 工具/文本文件/metadata.txt | 239 +- 工具/文本文件/手动统计结果.txt | 107 + 工具/文本文件/题号筛选.txt | 2 +- 工具/新题比对.ipynb | 68 +- 工具/新题相似相同比对.py | 108 + 工具/生成使用记录excel.ipynb | 43 +- 工具/目标挂钩清点.py | 27 + 工具/目标挂钩简要清点.ipynb | 94 +- 工具/相似题目标注.ipynb | 25 +- 工具/相似题目检测.ipynb | 790 +-- 工具/相同相似题目标注.py | 41 + 工具/相同题目检测.ipynb | 4215 +---------------- 工具/识别题库中尚未标注的题目类型.ipynb | 20 +- 工具/识别题目类型.py | 31 + 工具/课时目标pdf生成.py | 66 + 文本处理工具/剪贴板表格整理.ipynb | 116 + 题库0.3/Problems.json | 657 ++- 31 files changed, 2361 insertions(+), 5310 deletions(-) create mode 100644 工具/全局未标注相同题目检测.py create mode 100644 工具/剪贴板表格整理.ipynb create mode 100644 工具/剪贴板表格整理.py create mode 100644 工具/局部相似题目检测.py create mode 100644 工具/手动统计结果转换.py create mode 100644 工具/批量添加字段数据.py create mode 100644 工具/批量生成题目pdf.py create mode 100644 工具/文本文件/手动统计结果.txt create mode 100644 工具/新题相似相同比对.py create mode 100644 工具/目标挂钩清点.py create mode 100644 工具/相同相似题目标注.py create mode 100644 工具/识别题目类型.py create mode 100644 工具/课时目标pdf生成.py create mode 100644 文本处理工具/剪贴板表格整理.ipynb diff --git a/工具/修改题目数据库.ipynb b/工具/修改题目数据库.ipynb index 51be37a1..a5fe12ca 100644 --- a/工具/修改题目数据库.ipynb +++ b/工具/修改题目数据库.ipynb @@ -19,7 +19,7 @@ "source": [ "import os,re,json\n", "\"\"\"这里编辑题号(列表)后将在vscode中打开窗口, 编辑后保存关闭, 随后运行第二个代码块\"\"\"\n", - "problems = \"31158:31196\"\n", + "problems = \"14085\"\n", "\n", "def generate_number_set(string,dict):\n", " string = re.sub(r\"[\\n\\s]\",\"\",string)\n", diff --git a/工具/修改题目数据库.py b/工具/修改题目数据库.py index ff99e922..569bc8ad 100644 --- a/工具/修改题目数据库.py +++ b/工具/修改题目数据库.py @@ -1,6 +1,6 @@ import os,re,json """这里编辑题号(列表)后将在vscode中打开窗口, 编辑后保存关闭, 随后运行第二个代码块""" -problems = "1" +problems = "10000,10003" def generate_number_set(string,dict): string = re.sub(r"[\n\s]","",string) diff --git a/工具/全局未标注相同题目检测.py b/工具/全局未标注相同题目检测.py new file mode 100644 index 00000000..489a6cfc --- /dev/null +++ b/工具/全局未标注相同题目检测.py @@ -0,0 +1,102 @@ +import os,re,difflib,Levenshtein,time,json + +# 相同题目的阈值 +threshold = 0.99 + +outputfile = r"临时文件/相同题目列表.txt" + +#生成数码列表, 逗号分隔每个区块, 区块内部用:表示整数闭区间 +def generate_number_set(string): + string = re.sub(r"[\n\s]","",string) + string_list = string.split(",") + numbers_list = [] + for s in string_list: + if not ":" in s: + numbers_list.append(s.zfill(6)) + else: + start,end = s.split(":") + for ind in range(int(start),int(end)+1): + numbers_list.append(str(ind).zfill(6)) + return numbers_list + +#字符串预处理 +def pre_treating(string): + string = re.sub(r"\\begin\{center\}[\s\S]*?\\end\{center\}","",string) + string = re.sub(r"(bracket\{\d+\})|(blank\{\d+\})|(fourch)|(twoch)|(onech)","",string) + string = re.sub(r"[\s\\\{\}\$\(\)\[\]]","",string) + string = re.sub(r"[\n\t]","",string) + string = re.sub(r"(displaystyle)|(overrightarrow)","",string) + string = re.sub(r"[,\.:;?]","",string) + return string + +#difflab字符串比较 +def difflab_get_equal_rate(str1, str2): + # str1 = pre_treating(str1) + # str2 = pre_treating(str2) + return difflib.SequenceMatcher(None, str1, str2).ratio() + +#Levenshtein jaro字符串比较 +def jaro_get_equal_rate(str1,str2): + # str1 = pre_treating(str1) + # str2 = pre_treating(str2) + return Levenshtein.jaro(str1,str2) + +#Levenshtein 字符串比较 +def Lev_get_equal_rate(str1,str2): + # str1 = pre_treating(str1) + # str2 = pre_treating(str2) + return Levenshtein.ratio(str1,str2) + + + + +#指定对比方法 +sim_test = jaro_get_equal_rate + +#读入题库 +with open(r"../题库0.3/Problems.json","r",encoding = "utf8") as f: + database = f.read() +pro_dict = json.loads(database) + +pro_dict_treated = {} +for id in pro_dict: + pro_dict_treated[id] = pro_dict[id].copy() + pro_dict_treated[id]["content"] = pre_treating(pro_dict_treated[id]["content"]) + + +print("题目数:",len(pro_dict)) + +#记录起始时间 +starttime = time.time() +alike_problems = "" + + +count = 0 +keys = list(pro_dict_treated.keys()) +while len(keys) >= 2: + count += 1 + if count % 500 == 0: + print(count) + + currentid = keys.pop(0) + content1 = pro_dict_treated[currentid]["content"] + same = [] + for id in keys: + if not id in pro_dict[currentid]["same"] and not id in pro_dict[currentid]["related"]: + content2 = pro_dict_treated[id]["content"] + if sim_test(content1,content2)>threshold: + same.append(id) + if len(same) >= 1: + # print(currentid) + alike_problems += currentid + "," + for i in same: + # print(i) + keys.pop(keys.index(i)) + alike_problems += ",".join(same) + alike_problems += "\n\n" + +endtime = time.time() +print("耗时: %.3f秒" %(endtime-starttime)) + +with open(outputfile,"w",encoding = "u8") as f: + f.write(alike_problems) \ No newline at end of file diff --git a/工具/关键字筛选题号.py b/工具/关键字筛选题号.py index c0fe31ea..056b7a1b 100644 --- a/工具/关键字筛选题号.py +++ b/工具/关键字筛选题号.py @@ -2,7 +2,7 @@ import os,re,json """---设置关键字, 同一field下不同选项为or关系, 同一字典中不同字段间为and关系, 不同字典间为or关系, _not表示列表中的关键字都不含, 同一字典中的数字用来供应同一字段不同的条件之间的and---""" keywords_dict_table = [ - {"origin":["一模"]} + {"origin":["杨浦"]} ] """---关键字设置完毕---""" # 示例: keywords_dict_table = [ diff --git a/工具/分年级专用工具/小闲平台作业测验数据导入_2023届.ipynb b/工具/分年级专用工具/小闲平台作业测验数据导入_2023届.ipynb index b9ee2771..26d3372f 100644 --- a/工具/分年级专用工具/小闲平台作业测验数据导入_2023届.ipynb +++ b/工具/分年级专用工具/小闲平台作业测验数据导入_2023届.ipynb @@ -14,7 +14,7 @@ "filepath = \"数据导入作业文件\"\n", "\n", "# date = str(time.localtime().tm_year)+str(time.localtime().tm_mon).zfill(2)+str(time.localtime().tm_mday).zfill(2)\n", - "date = \"20230329\"\n", + "date = \"20230331\"\n", "\n", "#生成文件名tex_file和zip_file\n", "files = [os.path.join(filepath,f) for f in os.listdir(filepath)]\n", diff --git a/工具/剪贴板表格整理.ipynb b/工具/剪贴板表格整理.ipynb new file mode 100644 index 00000000..745b1319 --- /dev/null +++ b/工具/剪贴板表格整理.ipynb @@ -0,0 +1,116 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import os,re\n", + "import win32clipboard as wc\n", + "import win32con\n", + "\n", + "# 获取剪切板内容\n", + "def getCopy():\n", + " wc.OpenClipboard()\n", + " t = wc.GetClipboardData(win32con.CF_UNICODETEXT)\n", + " wc.CloseClipboard()\n", + " return t\n", + "\n", + "# 写入剪切板内容\n", + "def setCopy(str):\n", + " wc.OpenClipboard()\n", + " wc.EmptyClipboard()\n", + " wc.SetClipboardData(win32con.CF_UNICODETEXT, str)\n", + " wc.CloseClipboard()\n", + "\n", + "def dollared(string):\n", + " flag = True\n", + " for c in string:\n", + " if not c in \"1234567890.+-:[]()\":\n", + " flag = False\n", + " break\n", + " if flag:\n", + " string = \"$\" + string + \"$\"\n", + " return string\n", + "\n", + "\n", + "\n", + "data = getCopy()\n", + "\n", + "data1 = \"\"\n", + "for c in data:\n", + " if 65296 <= ord(c) < 65306:\n", + " data1 += str(ord(c)-65296)\n", + " else:\n", + " data1 += c\n", + "data = data1\n", + "data = data.replace(\".\",\".\").replace(\":\",\":\")\n", + "elements = data.split(\"\\n\")\n", + "elements_per_line = int(elements.pop(-1)) #这里需要修改\n", + "contents = \"\\\\begin{center}\\n\\\\begin{tabular}{|\"\n", + "for i in range(elements_per_line):\n", + " contents += \"c|\"\n", + "contents += \"}\\n\"\n", + "contents += r\"\\hline\"+\"\\n\"\n", + "col = 1\n", + "for element in elements:\n", + " if col != 1:\n", + " contents += \" & \"\n", + " contents += dollared(element.strip())\n", + " if col == elements_per_line:\n", + " contents += r\" \\\\ \\hline\"+\"\\n\"\n", + " col += 1\n", + " if col > elements_per_line:\n", + " col = 1\n", + "contents += \"\\\\end{tabular}\" + \"\\n\" + \"\\\\end{center}\"\n", + "\n", + "with open(\"临时文件/tablefile.txt\",\"w\",encoding = \"utf8\") as f:\n", + " f.write(contents)\n", + "\n", + "setCopy(contents)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "pythontest", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.15" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "91219a98e0e9be72efb992f647fe78b593124968b75db0b865552d6787c8db93" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/工具/剪贴板表格整理.py b/工具/剪贴板表格整理.py new file mode 100644 index 00000000..4c85002c --- /dev/null +++ b/工具/剪贴板表格整理.py @@ -0,0 +1,63 @@ +import os,re +import win32clipboard as wc +import win32con + +# 获取剪切板内容 +def getCopy(): + wc.OpenClipboard() + t = wc.GetClipboardData(win32con.CF_UNICODETEXT) + wc.CloseClipboard() + return t + +# 写入剪切板内容 +def setCopy(str): + wc.OpenClipboard() + wc.EmptyClipboard() + wc.SetClipboardData(win32con.CF_UNICODETEXT, str) + wc.CloseClipboard() + +def dollared(string): + flag = True + for c in string: + if not c in "1234567890.+-:[]()": + flag = False + break + if flag: + string = "$" + string + "$" + return string + + + +data = getCopy() + +data1 = "" +for c in data: + if 65296 <= ord(c) < 65306: + data1 += str(ord(c)-65296) + else: + data1 += c +data = data1 +data = data.replace(".",".").replace(":",":") +elements = data.split("\n") +elements_per_line = int(elements.pop(-1)) #这里需要修改 +contents = "\\begin{center}\n\\begin{tabular}{|" +for i in range(elements_per_line): + contents += "c|" +contents += "}\n" +contents += r"\hline"+"\n" +col = 1 +for element in elements: + if col != 1: + contents += " & " + contents += dollared(element.strip()) + if col == elements_per_line: + contents += r" \\ \hline"+"\n" + col += 1 + if col > elements_per_line: + col = 1 +contents += "\\end{tabular}" + "\n" + "\\end{center}" + +with open("临时文件/tablefile.txt","w",encoding = "utf8") as f: + f.write(contents) + +setCopy(contents) \ No newline at end of file diff --git a/工具/局部相似题目检测.py b/工具/局部相似题目检测.py new file mode 100644 index 00000000..04850b6b --- /dev/null +++ b/工具/局部相似题目检测.py @@ -0,0 +1,129 @@ +import os,re,difflib,Levenshtein,time,json + +# 重要!!! 新旧题目的范围(有重复默认为新题) +id_new_problems = "40000:41000" +id_old_problems = "1:30000" +threshold = 0.99 + +#生成数码列表, 逗号分隔每个区块, 区块内部用:表示整数闭区间 +def generate_number_set(string): + string = re.sub(r"[\n\s]","",string) + string_list = string.split(",") + numbers_list = [] + for s in string_list: + if not ":" in s: + numbers_list.append(s.zfill(6)) + else: + start,end = s.split(":") + for ind in range(int(start),int(end)+1): + numbers_list.append(str(ind).zfill(6)) + return numbers_list + +#字符串预处理 +def pre_treating(string): + string = re.sub(r"\\begin\{center\}[\s\S]*?\\end\{center\}","",string) + string = re.sub(r"(bracket\{\d+\})|(blank\{\d+\})|(fourch)|(twoch)|(onech)","",string) + string = re.sub(r"[\s\\\{\}\$\(\)\[\]]","",string) + string = re.sub(r"[\n\t]","",string) + string = re.sub(r"(displaystyle)|(overrightarrow)","",string) + string = re.sub(r"[,\.:;?]","",string) + return string + +#difflab字符串比较 +def difflab_get_equal_rate(str1, str2): + # str1 = pre_treating(str1) + # str2 = pre_treating(str2) + return difflib.SequenceMatcher(None, str1, str2).ratio() + +#Levenshtein jaro字符串比较 +def jaro_get_equal_rate(str1,str2): + # str1 = pre_treating(str1) + # str2 = pre_treating(str2) + return Levenshtein.jaro(str1,str2) + +#Levenshtein 字符串比较 +def Lev_get_equal_rate(str1,str2): + # str1 = pre_treating(str1) + # str2 = pre_treating(str2) + return Levenshtein.ratio(str1,str2) + + + + +#指定对比方法 +sim_test = jaro_get_equal_rate + +#读入题库 +with open(r"../题库0.3/Problems.json","r",encoding = "utf8") as f: + database = f.read() +pro_dict = json.loads(database) + +#生成旧题目数据库字典与新题目数据库字典 +new_id_list_raw = generate_number_set(id_new_problems) +new_id_list = [id for id in pro_dict if id in new_id_list_raw] +old_id_list_raw = generate_number_set(id_old_problems) +old_id_list = [id for id in pro_dict if (id in old_id_list_raw and not id in new_id_list_raw)] +old_problems_dict = {} +new_problems_dict = {} +old_problems_dict_content = {} +new_problems_dict_content = {} +for id in new_id_list: + new_problems_dict[id] = pro_dict[id] + new_problems_dict_content[id] = pre_treating(pro_dict[id]["content"]) +for id in old_id_list: + old_problems_dict[id] = pro_dict[id] + old_problems_dict_content[id] = pre_treating(pro_dict[id]["content"]) +print("旧题目数:",len(old_problems_dict),", 新题目数:",len(new_problems_dict)) + +#记录起始时间 +start_time = time.time() +suspect_count = 0 +remarked = 0 + +alike_problems = "" + + + +#开始新题与旧题的比对 +count = 0 +print("开始新题与旧题的比对") +for id_new in new_problems_dict: + count += 1 + if count % 50 == 0: + print(count) + for id_old in old_problems_dict: + similar_rate = sim_test(new_problems_dict_content[id_new],old_problems_dict_content[id_old]) + if similar_rate > threshold or id_new in old_problems_dict[id_old]["related"] or id_new in old_problems_dict[id_old]["same"] or id_old in new_problems_dict[id_new]["related"] or id_old in new_problems_dict[id_new]["same"]: + suspect_count += 1 + if not (id_new in old_problems_dict[id_old]["related"] or id_new in old_problems_dict[id_old]["same"] or id_old in new_problems_dict[id_new]["related"] or id_old in new_problems_dict[id_new]["same"]): + alike_problems += ("%.4f" %similar_rate) + "\n\n" + id_new + " " + new_problems_dict[id_new]["content"] + "\n\n" + id_old + " " + old_problems_dict[id_old]["content"] + "\n\n" + else: + remarked += 1 + +#开始新题之间的比对 +count = 0 +print("开始新题之间的比对") +while len(new_problems_dict) >= 2: + count += 1 + if count % 50 == 0: + print(count) + keys = list(new_problems_dict.keys()) + current_problem = new_problems_dict.pop(keys[0]) + current_problem_content = new_problems_dict_content[current_problem["id"]] + for id_new in new_problems_dict: + similar_rate = sim_test(new_problems_dict_content[id_new],current_problem_content) + if similar_rate > threshold or id_new in current_problem["related"] or id_new in current_problem["same"] or current_problem["id"] in new_problems_dict[id_new]["related"] or current_problem["id"] in new_problems_dict[id_new]["same"]: + suspect_count += 1 + if not (id_new in current_problem["related"] or id_new in current_problem["same"] or current_problem["id"] in new_problems_dict[id_new]["related"] or current_problem["id"] in new_problems_dict[id_new]["same"]): + alike_problems += ("%.4f" %similar_rate) + "\n\n" + id_new + " " + new_problems_dict[id_new]["content"] + "\n\n" + current_problem["id"] + " " + current_problem["content"] + "\n\n" + else: + remarked += 1 + + +#记录终止时间及显示结果 +end_time = time.time() +print("总耗时:",end_time-start_time,"秒.") +print("发现相似: ",suspect_count,", 其中已标注: ",remarked,".") + +with open("临时文件/相似题目.txt","w",encoding="utf8") as f: + f.write(alike_problems) \ No newline at end of file diff --git a/工具/工具面板.py b/工具/工具面板.py index 4e9ad10d..45e37a3a 100644 --- a/工具/工具面板.py +++ b/工具/工具面板.py @@ -47,7 +47,7 @@ def run_command1(): call(["python","试卷答案生成.py"]) elif selectedtool == "单元标记转换": call(["python","单元标记转换.py"]) - elif selectedtool == "目标清点": + elif selectedtool == "目标清点及清单生成": call(["python","单元课时目标题目数据清点.py"]) elif selectedtool == "目标表体生成": call(["python","根据范围提取课时目标.py"]) @@ -58,7 +58,29 @@ def run_command1(): elif selectedtool == "讲义生成": call(["python","讲义生成.py"]) elif selectedtool == "课时目标划分信息汇总": - call(["python","课时目标划分信息汇总.py"]) + call(["python","课时目标划分信息汇总.py"]) + elif selectedtool == "识别题目类型": + call(["python","识别题目类型.py"]) + elif selectedtool == "批量添加字段数据": + call(["python","批量添加字段数据.py"]) + elif selectedtool == "目标挂钩清点": + call(["python","目标挂钩清点.py"]) + elif selectedtool == "批量题号选题pdf生成": + call(["python","批量生成题目pdf.py"]) + elif selectedtool == "目标pdf生成": + call(["python","课时目标pdf生成.py"]) + elif selectedtool == "剪贴板表格整理": + call(["python","剪贴板表格整理.py"]) + elif selectedtool == "手动统计结果转换": + call(["python","手动统计结果转换.py"]) + elif selectedtool == "新题相似相同比对": + call(["python","新题相似相同比对.py"]) + elif selectedtool == "全局未标注相同题目检测": + call(["python","全局未标注相同题目检测.py"]) + elif selectedtool == "局部相似题目检测": + call(["python","局部相似题目检测.py"]) + elif selectedtool == "相同相似题目标注": + call(["python","相同相似题目标注.py"]) LabelTool.config(text = selectedtool+"STEP1命令执行完毕") button1.place_forget() @@ -95,7 +117,12 @@ ImportMenu.add_command(label = "添加关联题目", command = lambda: SetButton # 设置 维护 菜单项 MaintainenceMenu = Menu(menubar, tearoff = False) menubar.add_cascade(label = "维护", menu = MaintainenceMenu) +MaintainenceMenu.add_command(label = "批量添加字段数据", command = lambda: SetButton("批量添加字段数据",1,["文本文件/metadata.txt","批量添加字段数据.py"])) +MaintainenceMenu.add_command(label = "手动统计结果转换", command = lambda: SetButton("手动统计结果转换",1,["文本文件/metadata.txt","文本文件/手动统计结果.txt"])) +MaintainenceMenu.add_separator() MaintainenceMenu.add_command(label = "修改题目", command = lambda: SetButton("修改题目数据库",2,["修改题目数据库.py"])) +MaintainenceMenu.add_command(label = "识别题目类型", command = lambda: SetButton("识别题目类型",1,[])) + # 设置 使用 菜单项 UseMenu = Menu(menubar, tearoff = False) @@ -104,6 +131,7 @@ UseMenu.add_command(label = "关键字筛选题号", command = lambda: SetButton UseMenu.add_separator() UseMenu.add_command(label = "讲义试卷生成", command = lambda: SetButton("讲义生成",1,["讲义生成.py"])) UseMenu.add_command(label = "题号选题pdf生成", command = lambda: SetButton("题号选题pdf生成",1,["题号选题pdf生成.py"])) +UseMenu.add_command(label = "批量题号选题pdf生成", command = lambda: SetButton("批量题号选题pdf生成",1,["批量生成题目pdf.py"])) UseMenu.add_command(label = "试卷答案生成", command = lambda: SetButton("试卷答案生成",1,["试卷答案生成.py"])) # 设置 目标及标签 菜单项 @@ -111,16 +139,32 @@ ObjTagMenu = Menu(menubar, tearoff = False) menubar.add_cascade(label = "目标及标签", menu = ObjTagMenu) ObjTagMenu.add_command(label = "单元标记转换", command = lambda: SetButton("单元标记转换",1,["单元标记转换.py"])) ObjTagMenu.add_separator() -ObjTagMenu.add_command(label = "目标清点", command = lambda: SetButton("目标清点",1,[])) ObjTagMenu.add_command(label = "目标表体生成", command = lambda: SetButton("目标表体生成",1,["根据范围提取课时目标.py"])) +ObjTagMenu.add_command(label = "目标pdf生成", command = lambda: SetButton("目标pdf生成",1,["课时目标pdf生成.py"])) ObjTagMenu.add_command(label = "课时目标寻找题目", command = lambda: SetButton("课时目标寻找题目",1,["课时目标寻找题目.py"])) ObjTagMenu.add_command(label = "课时目标划分信息汇总", command = lambda: SetButton("课时目标划分信息汇总",1,[])) +ObjTagMenu.add_separator() +ObjTagMenu.add_command(label = "目标挂钩基础清点", command = lambda: SetButton("目标挂钩清点",1,[])) +ObjTagMenu.add_command(label = "目标清点及清单生成", command = lambda: SetButton("目标清点及清单生成",1,[])) + +# 设置 相同相似比对 菜单项 +SimRelMenu = Menu(menubar, tearoff= False) +menubar.add_cascade(label = "相同相似", menu = SimRelMenu) +SimRelMenu.add_command(label = "新题相似相同比对", command = lambda: SetButton("新题相似相同比对",1,["新题相似相同比对.py"])) +SimRelMenu.add_separator() +SimRelMenu.add_command(label = "局部相似题目检测", command = lambda: SetButton("局部相似题目检测",1,["局部相似题目检测.py"])) +SimRelMenu.add_command(label = "相同相似题目标注", command = lambda: SetButton("相同相似题目标注",1,["相同相似题目标注.py"])) +SimRelMenu.add_separator() +SimRelMenu.add_command(label = "全局未标注相同题目检测", command = lambda: SetButton("全局未标注相同题目检测",1,[])) + + # 设置 其他 菜单项 OtherMenu = Menu(menubar, tearoff = False) menubar.add_cascade(label = "其他", menu = OtherMenu) -OtherMenu.add_command(label = "mathpix预处理", command = lambda: SetButton("mathpix预处理",1,[])) -OtherMenu.add_command(label = "带圈数字处理", command = lambda: SetButton("带圈数字处理",1,[])) +OtherMenu.add_command(label = "剪贴板mathpix预处理", command = lambda: SetButton("mathpix预处理",1,[])) +OtherMenu.add_command(label = "剪贴板带圈数字处理", command = lambda: SetButton("带圈数字处理",1,[])) +OtherMenu.add_command(label = "剪贴板表格整理", command = lambda: SetButton("剪贴板表格整理",1,[])) menubar.add_command(label = "退出", command = root.destroy) diff --git a/工具/手动统计结果转换.ipynb b/工具/手动统计结果转换.ipynb index 88df9e02..b5c27e9c 100644 --- a/工具/手动统计结果转换.ipynb +++ b/工具/手动统计结果转换.ipynb @@ -17,7 +17,7 @@ " numerals_list[i] = str_numeral\n", " return \"\\t\".join(numerals_list)\n", "\n", - "with open(\"临时文件/统计结果.txt\",\"r\",encoding = \"utf8\") as f:\n", + "with open(\"文本文件/手动统计结果.txt\",\"r\",encoding = \"utf8\") as f:\n", " data = f.read()\n", "\n", "blocks = re.findall(r\"\\[BEGIN\\]([\\s\\S]*?)\\[END\\]\",data)\n", @@ -43,7 +43,7 @@ " output_data += \"\\n\".join(results_dict[id])\n", " output_data += \"\\n\\n\"\n", "\n", - "with open(\"临时文件/字段数据.txt\",\"w\",encoding = \"utf8\") as f:\n", + "with open(\"文本文件/metadata.txt\",\"w\",encoding = \"utf8\") as f:\n", " f.write(output_data)\n" ] }, diff --git a/工具/手动统计结果转换.py b/工具/手动统计结果转换.py new file mode 100644 index 00000000..643c5cf1 --- /dev/null +++ b/工具/手动统计结果转换.py @@ -0,0 +1,39 @@ +import os,re,json + +def form_decimals(string): + string = re.sub(r"[\s]+",r"\t",string) + numerals_list = [n for n in string.split("\t") if len(n)>0] + for i in range(len(numerals_list)): + numeral = numerals_list[i] + str_numeral = "%.3f" %float(numeral) + numerals_list[i] = str_numeral + return "\t".join(numerals_list) + +with open("文本文件/手动统计结果.txt","r",encoding = "utf8") as f: + data = f.read() + +blocks = re.findall(r"\[BEGIN\]([\s\S]*?)\[END\]",data) + +results_dict = {} +for block in blocks: + temp_list = [l.strip() for l in block.split("\n") if l.strip() != ""] + for line in temp_list: + if line[:2] == "##": + date = line[2:].strip() + elif line[:2] == "**": + current_class = line[2:].strip() + else: + separating_pos = re.search("\s",line).span(0)[0] + if not line[:separating_pos].zfill(6) in results_dict: + results_dict[line[:separating_pos].zfill(6)] = [date + "\t" + current_class + "\t" + form_decimals(re.sub("\s+?","\t",line[separating_pos:])).strip()] + else: + results_dict[line[:separating_pos].zfill(6)].append(date + "\t" + current_class + "\t" + form_decimals(re.sub("\s+?","\t",line[separating_pos:])).strip()) + +output_data = "usages\n" +for id in results_dict: + output_data += id + "\n" + output_data += "\n".join(results_dict[id]) + output_data += "\n\n" + +with open("文本文件/metadata.txt","w",encoding = "utf8") as f: + f.write(output_data) diff --git a/工具/批量添加字段数据.py b/工具/批量添加字段数据.py new file mode 100644 index 00000000..97e35582 --- /dev/null +++ b/工具/批量添加字段数据.py @@ -0,0 +1,83 @@ +import os,re,json + +"""---明确数据文件位置---""" +datafile = "文本文件/metadata.txt" +# 双回车分隔,记录内单回车分隔列表,首行为字段名 +"""---文件位置结束---""" + +def trim(string): + string = re.sub(r"^[ \t\n]*","",string) + string = re.sub(r"[ \t\n]*$","",string) + return string +def FloatToInt(string): + f = float(string) + if abs(f-round(f))<0.01: + f = round(f) + return f + +with open(datafile,"r",encoding="utf8") as f: + data = f.read().strip() +pos = data.index("\n") +field = data[:pos].strip() +appending_data = data[pos:] + +with open(r"../题库0.3/Problems.json","r",encoding = "utf8") as f: + database = f.read() +pro_dict = json.loads(database) +with open(r"../题库0.3/LessonObj.json","r",encoding = "utf8") as f: + database = f.read() +obj_dict = json.loads(database) + +#该字段列表可能需要更新 +fields = ["content","objs","tags","genre","ans","solution","duration","usages","origin","edit","same","related","remark","space"] + +if field in fields: + field_type = type(pro_dict["000001"][field]) + datalist = [record.strip() for record in appending_data.split("\n\n") if len(trim(record)) > 0] + for record in datalist: + id = re.findall(r"^[\d]{1,}",record)[0] + data = record[len(id):].strip() + id = id.zfill(6) + if not id in pro_dict: + print("题号:",id,"不在数据库中.") + break + + #字符串类型字段添加数据 + elif field_type == str and data in pro_dict[id][field]: + print("题号:",id,", 字段:",field,"中已有该数据:",data) + elif field_type == str and not data in pro_dict[id][field] and not field == "ans" and not field == "space": + origin_data = pro_dict[id][field] + new_data = trim(origin_data + "\n" + data) + pro_dict[id][field] = new_data + print("题号:",id,", 字段:",field,"中已添加数据:",data) + elif field_type == str and not data in pro_dict[id][field] and field == "ans" or field == "space": + pro_dict[id][field] = data + print("题号:",id,", 字段:",field,"中已修改数据:",data) + + #数值类型字段添加数据 + elif (field_type == int or field_type == float) and abs(float(data) - pro_dict[id][field])<0.01: + print("题号:",id,", 字段:",field,"中已有该数据:",FloatToInt(data)) + elif (field_type == int or field_type == float) and abs(float(data) - pro_dict[id][field])>=0.01: + pro_dict[id][field] = FloatToInt(data) + print("题号:",id,", 字段:",field,"中已修改数据:",FloatToInt(data)) + + #列表类型字段添加数据 + elif field_type == list: + cell_data_list = [d.strip() for d in data.split("\n")] + for cell_data in cell_data_list: + if cell_data in pro_dict[id][field]: + print("题号:",id,", 字段:",field,"中已有该数据:",cell_data) + elif not field == "objs": + pro_dict[id][field].append(cell_data) + print("题号:",id,", 字段:",field,"中已添加数据:",cell_data) + else: + if not cell_data in obj_dict and not cell_data.upper() == "KNONE": + print("题号:",id,", 字段:",field,"目标编号有误:",cell_data) + else: + pro_dict[id][field].append(cell_data.upper()) + print("题号:",id,", 字段:",field,"中已添加数据:",cell_data.upper()) +else: + print("字段名有误") + +with open(r"../题库0.3/Problems.json","w",encoding = "utf8") as f: + f.write(json.dumps(pro_dict,indent=4,ensure_ascii=False)) \ No newline at end of file diff --git a/工具/批量添加题库字段数据.ipynb b/工具/批量添加题库字段数据.ipynb index f9154233..e9bb7117 100644 --- a/工具/批量添加题库字段数据.ipynb +++ b/工具/批量添加题库字段数据.ipynb @@ -9,111 +9,126 @@ "name": "stdout", "output_type": "stream", "text": [ - "题号: 040422 , 字段: ans 中已修改数据: $(-1,3)$\n", - "题号: 040423 , 字段: ans 中已修改数据: $(-\\infty,-1)$\n", - "题号: 040424 , 字段: ans 中已修改数据: $\\sqrt{5}$\n", - "题号: 040425 , 字段: ans 中已修改数据: $5$\n", - "题号: 040426 , 字段: ans 中已修改数据: $\\dfrac{24}{7}$\n", - "题号: 040427 , 字段: ans 中已修改数据: $0.12$\n", - "题号: 040428 , 字段: ans 中已修改数据: $52$\n", - "题号: 040429 , 字段: ans 中已修改数据: $2$\n", - "题号: 040430 , 字段: ans 中已修改数据: $60^{\\circ}$\n", - "题号: 040431 , 字段: ans 中已修改数据: $\\dfrac{4}{5}$\n", - "题号: 040432 , 字段: ans 中已修改数据: $\\dfrac{\\sqrt{10}}{10}$\n", - "题号: 040433 , 字段: ans 中已修改数据: $(-\\infty,-\\frac{2}{\\mathrm{e}}) \\cup(\\frac{2}{\\mathrm{e}},+\\infty)$\n", - "题号: 040434 , 字段: ans 中已修改数据: D\n", - "题号: 040435 , 字段: ans 中已修改数据: C\n", - "题号: 040436 , 字段: ans 中已修改数据: B\n", - "题号: 040437 , 字段: ans 中已修改数据: D\n", - "题号: 040438 , 字段: ans 中已修改数据: (1) 略; (2) $\\dfrac{\\sqrt{15}}{15}$\n", - "题号: 040439 , 字段: ans 中已修改数据: (1) $a_1+a_2=6$, 公差为$4$; (2) $S_n=\\begin{cases}n^2+n, & n=2 k, \\\\ n^2+n+2, & n=2 k-1\\end{cases}$, $k$为正整数\n", - "题号: 040440 , 字段: ans 中已修改数据: (1) $y=0.1 x-0.2$; (2) (i) $5900$万元; (ii) $[\\dfrac{1}{3}, \\dfrac{5}{8}]$\n", - "题号: 040441 , 字段: ans 中已修改数据: (1) $\\dfrac{x^2}{8}+\\dfrac{y^2}{4}=1$; (2) $y= \\pm \\dfrac{\\sqrt{30}}{10} x+1$; (3) $-\\dfrac{1}{2}$\n", - "题号: 040442 , 字段: ans 中已修改数据: (1) $y=(1+a) x$; (2) $-1$; (3) $(-\\infty,-1)$\n", - "题号: 040443 , 字段: ans 中已修改数据: $\\{1,2,3\\}$\n", - "题号: 040444 , 字段: ans 中已修改数据: $\\sqrt{10}$\n", - "题号: 040445 , 字段: ans 中已修改数据: $2 \\pi$\n", - "题号: 040446 , 字段: ans 中已修改数据: $-\\dfrac{1}{3}$\n", - "题号: 040447 , 字段: ans 中已修改数据: $24$\n", - "题号: 040448 , 字段: ans 中已修改数据: $-5$\n", - "题号: 040449 , 字段: ans 中已修改数据: $(\\dfrac{7}{2}, 0, \\dfrac{7}{2})$\n", - "题号: 040450 , 字段: ans 中已修改数据: $(-\\dfrac{1}{3}, 1)$\n", - "题号: 040451 , 字段: ans 中已修改数据: $17$或$18$\n", - "题号: 040452 , 字段: ans 中已修改数据: 支持\n", - "题号: 040453 , 字段: ans 中已修改数据: $\\sqrt{6}-\\sqrt{3}$\n", - "题号: 040454 , 字段: ans 中已修改数据: $\\{(4,-4),(4,1)\\}$\n", - "题号: 040455 , 字段: ans 中已修改数据: C\n", - "题号: 040456 , 字段: ans 中已修改数据: A\n", - "题号: 040457 , 字段: ans 中已修改数据: B\n", - "题号: 040458 , 字段: ans 中已修改数据: B\n", - "题号: 040459 , 字段: ans 中已修改数据: (1) $[-\\dfrac{\\pi}{2}+k \\pi, k \\pi]$, $k \\in \\mathbf{Z}$; (2) $\\dfrac{15 \\sqrt{3}}{4}$\n", - "题号: 040460 , 字段: ans 中已修改数据: (1) 略; (2) $\\dfrac{1}{2}$\n", - "题号: 040461 , 字段: ans 中已修改数据: (1) $\\dfrac{3}{256}$; (2) 选择A同学\n", - "题号: 040462 , 字段: ans 中已修改数据: (1) $\\sqrt{3}$; (2) 略; (3) 存在, $k=\\dfrac{\\sqrt{3}}{2}$, $P(-3 \\sqrt{3}, 0)$\n", - "题号: 040463 , 字段: ans 中已修改数据: (1) $y=2 x$; (2) $(-\\infty, 0] \\cup[1,+\\infty)$; (3) $(-\\infty,\\dfrac{2}{\\mathrm{e}})$\n", - "题号: 040464 , 字段: ans 中已修改数据: $(-2,1]$\n", - "题号: 040465 , 字段: ans 中已修改数据: $1$\n", - "题号: 040466 , 字段: ans 中已修改数据: $\\dfrac{2 \\pi}{3}$\n", - "题号: 040467 , 字段: ans 中已修改数据: $\\sqrt{3}$\n", - "题号: 040468 , 字段: ans 中已修改数据: $(-\\infty,-2] \\cup[0,2]$\n", - "题号: 040469 , 字段: ans 中已修改数据: $y^2=4 x$\n", - "题号: 040470 , 字段: ans 中已修改数据: $\\dfrac{14}{15}$\n", - "题号: 040471 , 字段: ans 中已修改数据: $5$\n", - "题号: 040472 , 字段: ans 中已修改数据: $\\dfrac{6+2 \\sqrt{3}}{5}$\n", - "题号: 040473 , 字段: ans 中已修改数据: $1-2^{2023}$\n", - "题号: 040474 , 字段: ans 中已修改数据: $\\dfrac{2 \\sqrt{3}}{3}$\n", - "题号: 040475 , 字段: ans 中已修改数据: $6+4 \\sqrt{2}$\n", - "题号: 040476 , 字段: ans 中已修改数据: B\n", - "题号: 040477 , 字段: ans 中已修改数据: D\n", - "题号: 040478 , 字段: ans 中已修改数据: C\n", - "题号: 040479 , 字段: ans 中已修改数据: B\n", - "题号: 040480 , 字段: ans 中已修改数据: (1) 略; (2) $\\arccos \\dfrac{2}{3}$\n", - "题号: 040481 , 字段: ans 中已修改数据: (1) $[k \\pi-\\dfrac{3 \\pi}{8}, k \\pi+\\dfrac{\\pi}{8}]$, $k \\in \\mathbf{Z}$; (2) $\\{x | x=\\dfrac{k \\pi}{2}+\\dfrac{\\pi}{8},\\ k \\in \\mathbf{Z}\\}$\n", - "题号: 040482 , 字段: ans 中已修改数据: (1) $1.4$米; (2) $\\arcsin \\dfrac{5 \\sqrt{3}}{14}$\n", - "题号: 040483 , 字段: ans 中已修改数据: (1) $\\dfrac{6 \\sqrt{5}}{5}$; (2) 略; (3) $\\dfrac{3 \\sqrt{3}}{4}$\n", - "题号: 040484 , 字段: ans 中已修改数据: (1) 略; (2) $a_n=\\dfrac{(n+3)(n+4)}{2}$, $b_n=\\dfrac{(n+4)^2}{2}$; (3) $(-\\infty,1]$\n", - "题号: 040485 , 字段: ans 中已修改数据: $4$\n", - "题号: 040486 , 字段: ans 中已修改数据: 四\n", - "题号: 040487 , 字段: ans 中已修改数据: $2$\n", - "题号: 040488 , 字段: ans 中已修改数据: $\\dfrac 23$\n", - "题号: 040489 , 字段: ans 中已修改数据: $12$\n", - "题号: 040490 , 字段: ans 中已修改数据: $40$\n", - "题号: 040491 , 字段: ans 中已修改数据: $2$\n", - "题号: 040492 , 字段: ans 中已修改数据: $72$\n", - "题号: 040493 , 字段: ans 中已修改数据: $3$\n", - "题号: 040494 , 字段: ans 中已修改数据: $\\dfrac{4\\pi}3$\n", - "题号: 040495 , 字段: ans 中已修改数据: $\\sqrt{3}$\n", - "题号: 040496 , 字段: ans 中已修改数据: $-2+\\sqrt{7}$\n", - "题号: 040497 , 字段: ans 中已修改数据: B\n", - "题号: 040498 , 字段: ans 中已修改数据: C\n", - "题号: 040499 , 字段: ans 中已修改数据: D\n", - "题号: 040500 , 字段: ans 中已修改数据: D\n", - "题号: 040501 , 字段: ans 中已修改数据: (1) 证明略; (2) $\\dfrac{\\sqrt{14}}7$\n", - "题号: 040502 , 字段: ans 中已修改数据: (1) $y=0.072x-0.046$; (2) (i) $1060$万; (ii) $(\\dfrac 13,\\dfrac 58]$\n", - "题号: 040503 , 字段: ans 中已修改数据: (1) $[k\\pi,\\dfrac\\pi 4+k\\pi]$, $k\\in \\mathbf{Z}$; (2) $\\dfrac\\pi 4$\n", - "题号: 040504 , 字段: ans 中已修改数据: (1) $\\dfrac{x^2}{4}-y^2=1$; (2) 存在, $t=\\pm \\sqrt{3}$或$t=\\pm \\sqrt{\\dfrac{76}{15}}$; (3) $(-8-5\\sqrt{3},-\\dfrac 12)\\cup (\\dfrac 12,-8+5\\sqrt{3})$\n", - "题号: 040505 , 字段: ans 中已修改数据: (1) $f(g(x))$的导函数为$y=-a\\sin x$, $g(f(x))$的导函数为$y=-a\\sin (ax)$; (2) $(-\\infty,-1]$; (3) $[\\dfrac 32,3)$\n", - "题号: 040506 , 字段: ans 中已修改数据: $4$\n", - "题号: 040507 , 字段: ans 中已修改数据: $1$\n", - "题号: 040508 , 字段: ans 中已修改数据: $24$\n", - "题号: 040509 , 字段: ans 中已修改数据: $x^2+(y-1)^2=4$\n", - "题号: 040510 , 字段: ans 中已修改数据: $(-1,1]$\n", - "题号: 040511 , 字段: ans 中已修改数据: $300(4+\\sqrt{3})$\n", - "题号: 040512 , 字段: ans 中已修改数据: $\\dfrac{1}{2}$\n", - "题号: 040513 , 字段: ans 中已修改数据: $92$\n", - "题号: 040514 , 字段: ans 中已修改数据: $\\dfrac{1}{2}$\n", - "题号: 040515 , 字段: ans 中已修改数据: $\\dfrac{\\sqrt{21}}{6}$\n", - "题号: 040516 , 字段: ans 中已修改数据: $2 \\sqrt{2}$\n", - "题号: 040517 , 字段: ans 中已修改数据: $2$\n", - "题号: 040518 , 字段: ans 中已修改数据: C\n", - "题号: 040519 , 字段: ans 中已修改数据: A\n", - "题号: 040520 , 字段: ans 中已修改数据: A\n", - "题号: 040521 , 字段: ans 中已修改数据: C\n", - "题号: 040522 , 字段: ans 中已修改数据: (1) $2n$; (2) $n^2+n+\\dfrac{4^{n+1}}{3}-\\dfrac{4}{3}$\n", - "题号: 040523 , 字段: ans 中已修改数据: (1) $\\begin{pmatrix}0 & 1 & 2 \\\\ \\dfrac{7}{15} & \\dfrac{7}{15} & \\dfrac{1}{15}\\end{pmatrix}$, 期望为$\\dfrac{3}{5}$; (2) $\\chi^2 \\approx 0.794<3.841$, 不能认为有关\n", - "题号: 040524 , 字段: ans 中已修改数据: (1) 略; (2) $\\dfrac{\\sqrt{10}}{5}$\n", - "题号: 040525 , 字段: ans 中已修改数据: (1) $\\dfrac{x^2}{4}+y^2=1$; (2) 最大值为$3$; 最小值为$\\dfrac{\\sqrt{6}}{3}$; (3) $(0,3)$\n", - "题号: 040526 , 字段: ans 中已修改数据: (1) $y=x+1$; (2) 略; (3) $2$\n" + "题号: 013235 , 字段: usages 中已有该数据: 20230331\t2023届高三10班\t1.000\n", + "题号: 013218 , 字段: usages 中已有该数据: 20230331\t2023届高三10班\t1.000\n", + "题号: 013237 , 字段: usages 中已有该数据: 20230331\t2023届高三10班\t0.000\n", + "题号: 014640 , 字段: usages 中已有该数据: 20230331\t2023届高三10班\t1.000\n", + "题号: 014642 , 字段: usages 中已有该数据: 20230331\t2023届高三10班\t1.000\n", + "题号: 014643 , 字段: usages 中已有该数据: 20230331\t2023届高三10班\t1.000\t1.000\n", + "题号: 014636 , 字段: usages 中已有该数据: 20230331\t2023届高三10班\t1.000\n", + "题号: 014088 , 字段: usages 中已有该数据: 20230331\t2023届高三10班\t1.000\n", + "题号: 014085 , 字段: usages 中已有该数据: 20230331\t2023届高三10班\t1.000\t1.000\t1.000\n", + "题号: 014644 , 字段: usages 中已有该数据: 20230331\t2023届高三10班\t1.000\t1.000\t0.000\n", + "题号: 014645 , 字段: usages 中已有该数据: 20230331\t2023届高三10班\t1.000\t0.000\t1.000\n", + "题号: 014646 , 字段: usages 中已有该数据: 20230331\t2023届高三10班\t1.000\t1.000\t0.000\n", + "题号: 013235 , 字段: usages 中已有该数据: 20230331\t2023届高三11班\t0.800\n", + "题号: 013218 , 字段: usages 中已有该数据: 20230331\t2023届高三11班\t1.000\n", + "题号: 013237 , 字段: usages 中已有该数据: 20230331\t2023届高三11班\t0.350\n", + "题号: 014640 , 字段: usages 中已有该数据: 20230331\t2023届高三11班\t0.850\n", + "题号: 014642 , 字段: usages 中已有该数据: 20230331\t2023届高三11班\t0.750\n", + "题号: 014643 , 字段: usages 中已有该数据: 20230331\t2023届高三11班\t0.950\t0.900\n", + "题号: 014636 , 字段: usages 中已有该数据: 20230331\t2023届高三11班\t1.000\n", + "题号: 014088 , 字段: usages 中已有该数据: 20230331\t2023届高三11班\t1.000\n", + "题号: 014085 , 字段: usages 中已有该数据: 20230331\t2023届高三11班\t0.950\t0.750\t0.850\n", + "题号: 014644 , 字段: usages 中已有该数据: 20230331\t2023届高三11班\t0.900\t0.650\t0.350\n", + "题号: 014645 , 字段: usages 中已有该数据: 20230331\t2023届高三11班\t0.650\t0.600\t0.600\n", + "题号: 014646 , 字段: usages 中已有该数据: 20230331\t2023届高三11班\t0.900\t0.600\t0.350\n", + "题号: 013235 , 字段: usages 中已有该数据: 20230331\t2023届高三12班\t0.842\n", + "题号: 013218 , 字段: usages 中已有该数据: 20230331\t2023届高三12班\t1.000\n", + "题号: 013237 , 字段: usages 中已有该数据: 20230331\t2023届高三12班\t0.105\n", + "题号: 014640 , 字段: usages 中已有该数据: 20230331\t2023届高三12班\t0.842\n", + "题号: 014642 , 字段: usages 中已有该数据: 20230331\t2023届高三12班\t0.421\n", + "题号: 014643 , 字段: usages 中已有该数据: 20230331\t2023届高三12班\t0.947\t0.895\n", + "题号: 014636 , 字段: usages 中已有该数据: 20230331\t2023届高三12班\t0.947\n", + "题号: 014088 , 字段: usages 中已有该数据: 20230331\t2023届高三12班\t1.000\n", + "题号: 014085 , 字段: usages 中已有该数据: 20230331\t2023届高三12班\t1.000\t0.789\t0.895\n", + "题号: 014644 , 字段: usages 中已有该数据: 20230331\t2023届高三12班\t0.947\t0.947\t0.000\n", + "题号: 014645 , 字段: usages 中已有该数据: 20230331\t2023届高三12班\t0.895\t0.842\t0.895\n", + "题号: 014646 , 字段: usages 中已有该数据: 20230331\t2023届高三12班\t0.947\t0.789\t0.842\n", + "题号: 013235 , 字段: usages 中已有该数据: 20230331\t2023届高三02班\t0.893\n", + "题号: 013218 , 字段: usages 中已有该数据: 20230331\t2023届高三02班\t0.964\n", + "题号: 013237 , 字段: usages 中已有该数据: 20230331\t2023届高三02班\t0.071\n", + "题号: 014640 , 字段: usages 中已有该数据: 20230331\t2023届高三02班\t0.893\n", + "题号: 014642 , 字段: usages 中已有该数据: 20230331\t2023届高三02班\t0.714\n", + "题号: 014643 , 字段: usages 中已有该数据: 20230331\t2023届高三02班\t0.964\t0.786\n", + "题号: 014636 , 字段: usages 中已有该数据: 20230331\t2023届高三02班\t0.929\n", + "题号: 014088 , 字段: usages 中已有该数据: 20230331\t2023届高三02班\t0.964\n", + "题号: 014085 , 字段: usages 中已有该数据: 20230331\t2023届高三02班\t1.000\t0.929\t0.821\n", + "题号: 014644 , 字段: usages 中已有该数据: 20230331\t2023届高三02班\t0.929\t0.929\t0.000\n", + "题号: 014645 , 字段: usages 中已有该数据: 20230331\t2023届高三02班\t0.964\t0.893\t0.821\n", + "题号: 014646 , 字段: usages 中已有该数据: 20230331\t2023届高三02班\t0.929\t0.750\t0.821\n", + "题号: 013235 , 字段: usages 中已有该数据: 20230331\t2023届高三03班\t1.000\n", + "题号: 013218 , 字段: usages 中已有该数据: 20230331\t2023届高三03班\t0.913\n", + "题号: 013237 , 字段: usages 中已有该数据: 20230331\t2023届高三03班\t0.391\n", + "题号: 014640 , 字段: usages 中已有该数据: 20230331\t2023届高三03班\t0.870\n", + "题号: 014642 , 字段: usages 中已有该数据: 20230331\t2023届高三03班\t0.652\n", + "题号: 014643 , 字段: usages 中已有该数据: 20230331\t2023届高三03班\t1.000\t0.870\n", + "题号: 014636 , 字段: usages 中已有该数据: 20230331\t2023届高三03班\t1.000\n", + "题号: 014088 , 字段: usages 中已有该数据: 20230331\t2023届高三03班\t1.000\n", + "题号: 014085 , 字段: usages 中已有该数据: 20230331\t2023届高三03班\t0.913\t1.000\t0.957\n", + "题号: 014644 , 字段: usages 中已有该数据: 20230331\t2023届高三03班\t0.913\t0.913\t0.000\n", + "题号: 014645 , 字段: usages 中已有该数据: 20230331\t2023届高三03班\t0.696\t0.783\t0.739\n", + "题号: 014646 , 字段: usages 中已有该数据: 20230331\t2023届高三03班\t0.913\t0.826\t0.696\n", + "题号: 013235 , 字段: usages 中已有该数据: 20230331\t2023届高三04班\t0.938\n", + "题号: 013218 , 字段: usages 中已有该数据: 20230331\t2023届高三04班\t0.875\n", + "题号: 013237 , 字段: usages 中已有该数据: 20230331\t2023届高三04班\t0.000\n", + "题号: 014640 , 字段: usages 中已有该数据: 20230331\t2023届高三04班\t0.875\n", + "题号: 014642 , 字段: usages 中已有该数据: 20230331\t2023届高三04班\t0.562\n", + "题号: 014643 , 字段: usages 中已有该数据: 20230331\t2023届高三04班\t1.000\t0.750\n", + "题号: 014636 , 字段: usages 中已有该数据: 20230331\t2023届高三04班\t1.000\n", + "题号: 014088 , 字段: usages 中已有该数据: 20230331\t2023届高三04班\t1.000\n", + "题号: 014085 , 字段: usages 中已有该数据: 20230331\t2023届高三04班\t1.000\t0.812\t0.812\n", + "题号: 014644 , 字段: usages 中已有该数据: 20230331\t2023届高三04班\t1.000\t0.938\t0.062\n", + "题号: 014645 , 字段: usages 中已有该数据: 20230331\t2023届高三04班\t0.812\t0.688\t0.750\n", + "题号: 014646 , 字段: usages 中已有该数据: 20230331\t2023届高三04班\t0.938\t0.812\t0.438\n", + "题号: 013235 , 字段: usages 中已有该数据: 20230331\t2023届高三05班\t0.865\n", + "题号: 013218 , 字段: usages 中已有该数据: 20230331\t2023届高三05班\t0.973\n", + "题号: 013237 , 字段: usages 中已有该数据: 20230331\t2023届高三05班\t0.135\n", + "题号: 014640 , 字段: usages 中已有该数据: 20230331\t2023届高三05班\t0.946\n", + "题号: 014642 , 字段: usages 中已有该数据: 20230331\t2023届高三05班\t0.730\n", + "题号: 014643 , 字段: usages 中已有该数据: 20230331\t2023届高三05班\t1.000\t1.000\n", + "题号: 014636 , 字段: usages 中已有该数据: 20230331\t2023届高三05班\t0.973\n", + "题号: 014088 , 字段: usages 中已有该数据: 20230331\t2023届高三05班\t1.000\n", + "题号: 014085 , 字段: usages 中已有该数据: 20230331\t2023届高三05班\t0.946\t0.838\t0.946\n", + "题号: 014644 , 字段: usages 中已有该数据: 20230331\t2023届高三05班\t0.351\t0.919\t0.378\n", + "题号: 014645 , 字段: usages 中已有该数据: 20230331\t2023届高三05班\t0.378\t0.513\t0.622\n", + "题号: 014646 , 字段: usages 中已有该数据: 20230331\t2023届高三05班\t0.892\t0.622\t0.513\n", + "题号: 013235 , 字段: usages 中已有该数据: 20230331\t2023届高三06班\t0.974\n", + "题号: 013218 , 字段: usages 中已有该数据: 20230331\t2023届高三06班\t0.846\n", + "题号: 013237 , 字段: usages 中已有该数据: 20230331\t2023届高三06班\t0.179\n", + "题号: 014640 , 字段: usages 中已有该数据: 20230331\t2023届高三06班\t0.974\n", + "题号: 014642 , 字段: usages 中已有该数据: 20230331\t2023届高三06班\t0.769\n", + "题号: 014643 , 字段: usages 中已有该数据: 20230331\t2023届高三06班\t0.974\t0.974\n", + "题号: 014636 , 字段: usages 中已有该数据: 20230331\t2023届高三06班\t0.974\n", + "题号: 014088 , 字段: usages 中已有该数据: 20230331\t2023届高三06班\t1.000\n", + "题号: 014085 , 字段: usages 中已有该数据: 20230331\t2023届高三06班\t1.000\t0.872\t0.974\n", + "题号: 014644 , 字段: usages 中已有该数据: 20230331\t2023届高三06班\t1.000\t1.000\t0.051\n", + "题号: 014645 , 字段: usages 中已有该数据: 20230331\t2023届高三06班\t0.692\t0.718\t0.795\n", + "题号: 014646 , 字段: usages 中已有该数据: 20230331\t2023届高三06班\t0.667\t0.872\t0.590\n", + "题号: 013235 , 字段: usages 中已有该数据: 20230331\t2023届高三07班\t0.889\n", + "题号: 013218 , 字段: usages 中已有该数据: 20230331\t2023届高三07班\t0.926\n", + "题号: 013237 , 字段: usages 中已有该数据: 20230331\t2023届高三07班\t0.037\n", + "题号: 014640 , 字段: usages 中已有该数据: 20230331\t2023届高三07班\t0.889\n", + "题号: 014642 , 字段: usages 中已有该数据: 20230331\t2023届高三07班\t0.667\n", + "题号: 014643 , 字段: usages 中已有该数据: 20230331\t2023届高三07班\t0.963\t0.926\n", + "题号: 014636 , 字段: usages 中已有该数据: 20230331\t2023届高三07班\t0.926\n", + "题号: 014088 , 字段: usages 中已有该数据: 20230331\t2023届高三07班\t1.000\n", + "题号: 014085 , 字段: usages 中已有该数据: 20230331\t2023届高三07班\t0.926\t0.852\t0.704\n", + "题号: 014644 , 字段: usages 中已有该数据: 20230331\t2023届高三07班\t0.963\t0.963\t0.037\n", + "题号: 014645 , 字段: usages 中已有该数据: 20230331\t2023届高三07班\t0.852\t0.778\t0.778\n", + "题号: 014646 , 字段: usages 中已有该数据: 20230331\t2023届高三07班\t1.000\t0.556\t0.518\n", + "题号: 013235 , 字段: usages 中已有该数据: 20230331\t2023届高三09班\t0.842\n", + "题号: 013218 , 字段: usages 中已有该数据: 20230331\t2023届高三09班\t1.000\n", + "题号: 013237 , 字段: usages 中已有该数据: 20230331\t2023届高三09班\t0.053\n", + "题号: 014640 , 字段: usages 中已有该数据: 20230331\t2023届高三09班\t0.895\n", + "题号: 014642 , 字段: usages 中已有该数据: 20230331\t2023届高三09班\t0.632\n", + "题号: 014643 , 字段: usages 中已有该数据: 20230331\t2023届高三09班\t1.000\t0.895\n", + "题号: 014636 , 字段: usages 中已有该数据: 20230331\t2023届高三09班\t0.947\n", + "题号: 014088 , 字段: usages 中已有该数据: 20230331\t2023届高三09班\t1.000\n", + "题号: 014085 , 字段: usages 中已有该数据: 20230331\t2023届高三09班\t1.000\t0.842\t0.947\n", + "题号: 014644 , 字段: usages 中已有该数据: 20230331\t2023届高三09班\t0.895\t0.895\t0.105\n", + "题号: 014645 , 字段: usages 中已有该数据: 20230331\t2023届高三09班\t0.789\t0.632\t0.526\n", + "题号: 014646 , 字段: usages 中已有该数据: 20230331\t2023届高三09班\t0.842\t0.421\t0.105\n" ] } ], @@ -196,6 +211,8 @@ " else:\n", " pro_dict[id][field].append(cell_data.upper())\n", " print(\"题号:\",id,\", 字段:\",field,\"中已添加数据:\",cell_data.upper())\n", + "else:\n", + " print(\"字段名有误\")\n", "\n", "with open(r\"../题库0.3/Problems.json\",\"w\",encoding = \"utf8\") as f:\n", " f.write(json.dumps(pro_dict,indent=4,ensure_ascii=False))" diff --git a/工具/批量生成题目pdf.py b/工具/批量生成题目pdf.py new file mode 100644 index 00000000..bb6eb85e --- /dev/null +++ b/工具/批量生成题目pdf.py @@ -0,0 +1,197 @@ +import os,re,time,json,sys + +""" +模板文件目录下 题目清单.txt 文件不能缺失 +""" + +"""---设置是否在学生版中提供答案---""" +answered = True + +"""---设置文件保存路径---""" +#目录和文件的分隔务必用/ +directory = "临时文件/" +# filename = "高三二模前易错题" +filename = "测试" +"""---设置文件名结束---""" + +"""---设置题目列表---""" +#字典字段为文件名, 之后为内容的题号 + +problems_dict = { +"函数1":"778,1253,1262,1325,1339,1352,2918,2968,3747,4009,4157,4435,4721,5123,5650,7939,10197,10938,11148,12179,12277,12543,12859,12902,13721,30060,30398,30406,10796,12104,30051,30327,30337,30356,31321", +"函数2":"87,342,655,1277,1329,2831,2851,2859,2905,2959,3648,4153,4320,4359,11066,11079,11144,11999,12063,12064,12178,12192,12842,12856,12903,13747,13840,14191,30410,12549,12717,30377,30381,30411,30416,30420,30424,30426", +"数列":"321,403,1781,1788,1810,3210,3219,3283,3309,3310,3312,4472,4476,6793,10777,10942,12067,12112,12239,12933,12979,13921,13925,30072,30473,30499", +"解析几何":"248,282,363,625,960,2162,2252,2268,2278,2372,2418,3421,3437,3438,4246,8760,8866,8912,9784,10951,10958,12199,12213,12255,12548,13060,13063,13069,13097,13118,13134,13982,14505,31229,31233,31323", +"概率统计":"332,340,401,412,654,2586,2605,2664,3574,3585,3640,4575,4584,7361,7423,7502,7630,10868,11993,14091,30227,30275,30495,30520,30540,31158,31196,31320" + + +# "2024届高二下学期周末卷01":"40001:40017", +# "2025届高一下学期周末卷01":"40018:40036", +# "2024届高二下学期周末卷02":"40037:40056", +# "2025届高一下学期周末卷02":"40057:40082", +# "2025届高一下学期周末卷03":"40083:40104", +# "2025届高一下学期周末卷03小测":"40105:40112", +# "2025届高一下学期周末卷04旧版":"40113:40130", +# "2025届高一下学期周末卷04小测":"40131:40139", +# "2024届高二下学期周末卷03":"40140:40160", +# "2024届高二上学期期末考试":"31267:31287", +# "2025届高一上学期期末考试":"31288:31308", +# "2024届高二下学期周末卷04":"40161:40180", +# "2025届高一下学期周末卷04":"40181:40201", +# "2024届高二下学期周末卷05":"40202:40225", +# "2025届高一下学期周末卷05":"40226:40245", +# "2024届空间向量校本作业":"22048:22083", +# "2024届二项式定理校本作业":"22084:22105", +# "2025届高一下学期周末卷05小测":"40246:40255", +# "2025届高一下学期周末卷06":"40256:40273", +# "2025届高一下学期周末卷06小测":"40274:40282", +# "2025届高一下学期期中复习一(集合逻辑不等式)":"40283:40298", +# "2024届高二下学期周末卷06":"40299:40316", +# "2024届高二下学期周末卷07":"40317:40335", +# "2025届高一下学期测验01":"40336:40349", +# "2025届高一下学期测验02":"40350:40367", +# "2025届高一下学期期中复习二(幂指对函数)":"40368:40386", +# "2025届高一下学期周末卷02小测":"40387:40395", +# "2025届高一下学期周末卷07":"40396:40413", +# "2025届高一下学期周末卷07小测":"40414:40421" + +} + +"""---设置题目列表结束---""" + + +if directory[-1] != "/": + directory += "/" + + +#生成数码列表, 逗号分隔每个区块, 区块内部用:表示整数闭区间 +def generate_number_set(string,dict): + string = re.sub(r"[\n\s]","",string) + string_list = string.split(",") + numbers_list = [] + for s in string_list: + if not ":" in s: + numbers_list.append(s.zfill(6)) + else: + start,end = s.split(":") + for ind in range(int(start),int(end)+1): + numbers_list.append(str(ind).zfill(6)) + return numbers_list + +#将正确率转化为含颜色代码的字符串 +def get_color(value): + value = float(value) + if value>=0.5: + (r,g,b)=(1,2-2*value,0) + else: + (r,g,b)=(2*value,1,0) + return "{" + "%.3f" %(r) + "," + "%.3f" %(g) + ",0}" + + +def color_value(matchobj): + value = matchobj.group(1) + return "\t"+"\\fcolorbox[rgb]{0,0,0}"+ get_color(value) +"{" + value +"}" + + +#读取题库json文件并转化为字典 +with open(r"../题库0.3/Problems.json","r",encoding = "utf8") as f: + database = f.read() +pro_dict = json.loads(database) + +#读取目标数据库json并转化为字典 +with open(r"../题库0.3/LessonObj.json","r",encoding = "utf8") as f: + database = f.read() +obj_dict = json.loads(database) + +try: + os.mkdir(directory) +except: + pass + +#读取系统日期 +current_time = time.localtime() +time_string = "_"+str(current_time.tm_year).zfill(4)+str(current_time.tm_mon).zfill(2)+str(current_time.tm_mday).zfill(2) + + +data_teachers = "" +data_students = "" + +teachers_latex_file = directory + filename + "_教师用" + time_string + ".tex" +students_latex_file = directory + filename + "_学生用" + time_string + ".tex" + +for section_name in problems_dict: + problems = problems_dict[section_name] + + data_teachers += r"\newpage" + "\n\n" + r"\section{" + section_name +"}\n\n" + data_teachers += r"\setcounter{enumi}{0}"+"\n\n" + data_students += r"\newpage" + "\n\n" + r"\section{" + section_name +"}\n\n" + data_students += r"\setcounter{enumi}{0}"+"\n\n" + + #生成题目列表 + problem_list = [id for id in generate_number_set(problems.strip(),pro_dict) if id in pro_dict] + + + + + #生成教师题目字符串与学生题目字符串, 准备替换至latex文件 + for id in problem_list: + problemset = pro_dict[id] + problem = problemset["content"] + solution = (problemset["solution"] if problemset["solution"] != "" else "暂无解答与提示") + answer = "\\textcolor{red}{" + (problemset["ans"] if problemset["ans"] != "" else "暂无答案") + "}" + remarks = (problemset["remark"] if problemset["remark"] != "" else "暂无备注") + usages_list = problemset["usages"] + if len(usages_list) > 0: + usage = re.sub("\\t([\d]\.[\d]{0,10})",color_value,"\n\n".join(usages_list)) + usage = re.sub("[\\t ]([\d]\.[\d]{0,10})",color_value,usage) + else: + usage = "暂无使用记录" + origin = (problemset["origin"] if problemset["origin"] != "" else "出处不详") + objects = problemset["objs"] + if len(objects) == 0: + objects = "暂未关联目标\n\n" + elif "KNONE" in [o.upper() for o in objects]: + objects = "该题的考查目标不在目前的集合中\n\n" + else: + objects_string = "" + for obj in objects: + if not obj in obj_dict: + objects_string = "目标" + obj + "有误\n\n" + break + else: + objects_string += "\\textcolor{blue}{" + obj + "|" + obj_dict[obj]["content"] + "}\n\n" + objects = objects_string + space = ("" if problemset["space"] == "" or answered else r"\vspace*{"+problemset["space"]+"}\n") + tags = ("|".join(problemset["tags"]) if len(problemset["origin"])>0 else "暂无标签") + raw_string = "\\item " + "{\\tiny ("+id+")} "+problem + teachers_string = raw_string.replace("\\tiny","")+"\n\n关联目标:\n\n"+ objects + "\n\n标签: " + tags + "\n\n答案: "+answer + "\n\n" + "解答或提示: " + solution + "\n\n使用记录:\n\n"+ usage + "\n" + "\n\n出处: "+origin + "\n\n" + students_string = raw_string + space + "\n\n" + if answered: + students_string += "答案: \\textcolor{red}{"+answer + "}\n\n" + data_teachers += teachers_string + data_students += students_string + +#去除第一个newpage +data_teachers = data_teachers[10:] +data_students = data_students[10:] + +#替换latex文件的内容并编译 +with open("模板文件/题目清单.txt","r",encoding = "utf8") as f: + latex_raw = f.read() +#识别操作系统 +if sys.platform != "win32": + latex_raw = re.sub(r"fontset[\s]*=[\s]*none","fontset = fandol",latex_raw) + latex_raw = re.sub(r"\\setCJKmainfont",r"% \\setCJKmainfont",latex_raw) +latex_teachers = latex_raw.replace("编译模板",data_teachers) +with open(teachers_latex_file,"w",encoding = "utf8") as f: + f.write(latex_teachers) +print("开始编译教师版本pdf文件: ", teachers_latex_file) +os.system("xelatex -interaction=batchmode -output-directory=" + directory + " "+ teachers_latex_file) +print(os.system("xelatex -interaction=batchmode -output-directory=" + directory + " "+ teachers_latex_file)) + +latex_students = latex_raw.replace("编译模板",data_students) +with open(students_latex_file,"w",encoding = "utf8") as f: + f.write(latex_students) +print("开始编译学生版本pdf文件: ", students_latex_file) +os.system("xelatex -interaction=batchmode -output-directory=" + directory + " "+ students_latex_file) +print(os.system("xelatex -interaction=batchmode -output-directory=" + directory + " "+ students_latex_file)) diff --git a/工具/文本文件/metadata.txt b/工具/文本文件/metadata.txt index d669feef..d572ede5 100644 --- a/工具/文本文件/metadata.txt +++ b/工具/文本文件/metadata.txt @@ -1,18 +1,235 @@ -tags +usages +001050 +20220906 2023届高三2班 0.871 -1 -第一单元 -第二单元 -第三单元 +009446 +20220906 2023届高三2班 0.355 +001072 +20220906 2023届高三2班 0.774 -2 -第三单元 +010060 +20220906 2023届高三2班 0.742 +000033 +20220906 2023届高三2班 0.903 -4 -第三单元 -第五单元 -第六单元 +001073 +20220906 2023届高三2班 0.935 +000023 +20220906 2023届高三2班 0.774 + +002773 +20220906 2023届高三2班 0.742 + +002775 +20220906 2023届高三2班 0.645 + +002784 +20220906 2023届高三2班 0.903 + +007991 +20220906 2023届高三2班 0.581 + +005150 +20220906 2023届高三2班 0.903 + +002790 +20220906 2023届高三2班 0.774 + +002791 +20220906 2023届高三2班 0.774 + +000757 +20220906 2023届高三2班 0.968 + +002793 +20220906 2023届高三2班 0.968 + +000389 +20220906 2023届高三2班 0.871 + +002800 +20220906 2023届高三2班 0.903 + +000778 +20220907 2023届高三2班 0.750 + +001262 +20220907 2023届高三2班 0.656 + +000342 +20220907 2023届高三2班 0.125 + +001238 +20220907 2023届高三2班 0.906 + +001239 +20220907 2023届高三2班 0.875 + +001242 +20220907 2023届高三2班 0.844 + +002831 +20220907 2023届高三2班 0.594 0.406 + +002968 +20220907 2023届高三2班 0.531 0.063 + +009508 +20220907 2023届高三2班 1.000 + +003936 +20220907 2023届高三2班 0.906 + +007984 +20220907 2023届高三2班 1.000 + +009511 +20220907 2023届高三2班 0.844 + +005508 +20220907 2023届高三2班 0.844 + +000734 +20220907 2023届高三2班 0.469 + +002856 +20220907 2023届高三2班 0.781 0.906 + +000474 +20220907 2023届高三2班 0.813 + +002847 +20220907 2023届高三2班 0.844 0.938 + +002851 +20220907 2023届高三2班 0.500 0.281 + +001286 +20220907 2023届高三2班 0.906 + +001292 +20220907 2023届高三2班 0.906 + +010110 +20220907 2023届高三2班 1.000 1.000 0.875 0.906 + +000058 +20220907 2023届高三2班 1.000 + +010114 +20220907 2023届高三2班 0.844 + +001296 +20220907 2023届高三2班 1.000 + +005610 +20220907 2023届高三2班 0.906 + +001353 +20220907 2023届高三2班 0.813 + +001305 +20220907 2023届高三2班 0.813 0.813 0.969 0.969 0.969 + +010125 +20220907 2023届高三2班 0.969 + +001309 +20220907 2023届高三2班 1.000 0.750 + +005123 +20220907 2023届高三2班 0.563 + +005678 +20220907 2023届高三2班 0.469 + +001340 +20220908 2023届高三2班 0.788 0.818 0.879 0.727 0.788 + +002925 +20220908 2023届高三2班 0.939 + +002911 +20220908 2023届高三2班 0.879 + +002918 +20220908 2023届高三2班 0.727 + +003815 +20220908 2023届高三2班 0.939 + +005568 +20220908 2023届高三2班 0.939 + +000954 +20220908 2023届高三2班 1.000 + +001324 +20220908 2023届高三2班 0.879 + +001326 +20220908 2023届高三2班 0.939 0.970 + +002871 +20220908 2023届高三2班 0.818 + +002878 +20220908 2023届高三2班 0.818 0.818 + +002898 +20220908 2023届高三2班 0.727 + +000362 +20220908 2023届高三2班 0.879 + +001351 +20220908 2023届高三2班 0.848 + +003747 +20220908 2023届高三2班 0.727 + +005199 +20220908 2023届高三2班 0.970 + +009490 +20220908 2023届高三2班 0.879 + +009517 +20220909 2023届高三2班 0.656 + +007941 +20220909 2023届高三2班 0.813 + +000092 +20220909 2023届高三2班 0.625 + +001270 +20220909 2023届高三2班 1.000 1.000 0.969 0.781 + +002888 +20220909 2023届高三2班 0.719 + +001331 +20220909 2023届高三2班 0.156 + +002894 +20220909 2023届高三2班 0.844 0.750 + +001211 +20220909 2023届高三2班 0.969 0.906 0.875 0.844 0.750 + +001218 +20220909 2023届高三2班 0.906 0.750 0.625 + +002893 +20220909 2023届高三2班 0.813 + +002895 +20220909 2023届高三2班 0.688 + +009522 +20220909 2023届高三2班 0.563 0.250 diff --git a/工具/文本文件/手动统计结果.txt b/工具/文本文件/手动统计结果.txt new file mode 100644 index 00000000..6438a62e --- /dev/null +++ b/工具/文本文件/手动统计结果.txt @@ -0,0 +1,107 @@ + + + +[BEGIN] +## 20220906 +** 2023届高三2班 +1050 0.871 +9446 0.355 +1072 0.774 +10060 0.742 +33 0.903 +1073 0.935 +23 0.774 +2773 0.742 +2775 0.645 +2784 0.903 +7991 0.581 +5150 0.903 +2790 0.774 +2791 0.774 +757 0.968 +2793 0.968 +389 0.871 +2800 0.903 +[END] + + +[BEGIN] +## 20220907 +** 2023届高三2班 +778 0.750 +1262 0.656 +342 0.125 +1238 0.906 +1239 0.875 +1242 0.844 +2831 0.594 0.406 +2968 0.531 0.063 +9508 1.000 +3936 0.906 +7984 1.000 +9511 0.844 +5508 0.844 +734 0.469 +2856 0.781 0.906 +474 0.813 +2847 0.844 0.938 +2851 0.500 0.281 +[END] + +[BEGIN] +## 20220907 +** 2023届高三2班 +1286 0.906 +1292 0.906 +10110 1.000 1.000 0.875 0.906 +58 1.000 +10114 0.844 +1296 1.000 +5610 0.906 +1353 0.813 +1305 0.813 0.813 0.969 0.969 0.969 +10125 0.969 +1309 1.000 0.750 +5123 0.563 +5678 0.469 +[END] + +[BEGIN] +## 20220908 +** 2023届高三2班 +1340 0.788 0.818 0.879 0.727 0.788 +2925 0.939 +2911 0.879 +2918 0.727 +3815 0.939 +5568 0.939 +954 1.000 +1324 0.879 +1326 0.939 0.970 +2871 0.818 +2878 0.818 0.818 +2898 0.727 +362 0.879 +1351 0.848 +3747 0.727 +5199 0.970 +9490 0.879 +[END] + + +[BEGIN] +## 20220909 +** 2023届高三2班 +9517 0.656 +7941 0.813 +92 0.625 +1270 1.000 1.000 0.969 0.781 +2888 0.719 +1331 0.156 +2894 0.844 0.750 +1211 0.969 0.906 0.875 0.844 0.750 +1218 0.906 0.750 0.625 +2893 0.813 +2895 0.688 +9522 0.563 0.250 +[END] \ No newline at end of file diff --git a/工具/文本文件/题号筛选.txt b/工具/文本文件/题号筛选.txt index d94772b2..cc63d487 100644 --- a/工具/文本文件/题号筛选.txt +++ b/工具/文本文件/题号筛选.txt @@ -1 +1 @@ -004682,004683,004684,004685,004686,004687,004688,004689,004690,004691,004692,004693,004694,004695,004696,004697,004698,004699,004700,004701,004702,012117,012118,012119,012120,012121,012122,012123,012124,012125,012126,012127,012128,012129,012130,012131,012132,012133,012134,012135,012136,012137,012287,012288,012289,012290,012291,012292,012293,012294,012295,012296,012297,012298,012299,012300,012301,012302,012303,012304,012305,012306,012307,012308,012309,012310,012311,012312,012313,012314,012315,012316,012317,012318,012319,012320,012321,012322,012323,012324,012325,012326,012327,012328,012487,012488,012489,012490,012491,012492,012493,012494,012495,012496,012497,012498,012499,012500,012501,012502,012503,012504,012505,012506,012507,012508,012509,012510,012511,012512,012513,012514,012515,012516,012517,012518,012519,012520,012521,012522,012523,012524,012525,012526,012527,012528,012529,012530,012531,012532,012533,012534,012535,012536,012537,012538,012539,012540,012541,012542,012543,012544,012545,012546,012547,012548,012549,012550,012551,012552,012553,012554,012555,012556,012557,012558,012559,012560,012561,012562,012563,012564,012565,012566,012567,012568,012569,012570,012571,012572,012573,012574,012575,012576,012577,012578,012579,012580,012581,012582,012583,012584,012585,012586,012587,012588,012589,012590,012591,012592,012593,012594,012595,012596,012597,012598,012599,012600,012601,012602,012603,012604,012605,012606,012607,012608,012609,012610,012611,012612,012613,012614,012615,012616,012617,012618,012619,012620,012621,012622,012623,012624,012625,012626,012627,012628,012629,012630,012631,012632,012633,012634,012635,012636,012637,012638,012639,012640,012641,012642,012643,012644,012645,012646,012647,012648,012649,012650,012651,012652,012653,012654,012655,012656,012657,012658,012659,012660,012661,012662,012663,012664,012665,012666,012667,012668,012669,012670,012671,012672,012673,012674,012675,012676,012677,012678,012679,012680,012681,012682,012683,012684,012685,012686,012687,012688,012689,012690,012691,012692,012693,012694,012695,012696,012697,012698,012699,012700,012701,012702,012703,012704,012705,012706,012707,012708,012709,012710,012711,012712,012713,012714,012715,012716,012717,012718,012719,012720,012721,012722,012723,012724,012725,012726,012727,012728,012729,012730,012731,012732,012733,012734,012735,012736,012737,012738,012760,012761,012762,012763,012764,012765,012766,012767,012768,012769,012770,012771,012772,012773,012774,012775,012776,012777,012778,012779,012780,014511,014512,014513,014514,014515,014516,014517,014518,014519,014520,014521,014522,014523,014524,014525,014526,014527,014528,014529,014530,014531,030008,030009,030010,030011,030601,030602,030603,030604,030606,030607,030609,030610,030611,030612,030613,030614,030617,030622,030623,030625,030626,030627,030629,030630,030631,030634,030638,030639,030640,030642,030646,030647,030649,030650,030653,030654,030655,030656,030657,030658,030660,030661,030663,030664,030667,030670,030671,030672,030673,030675,030676,030677,030678,030680,030682,030683,030684,030685,030690,030691,030693,030697,030699,030700,030701,030703,030704,030705,030706,030707,030708,030709,030710,030717,030718,030719,030720,030722,030723,030727,030730,030731,030732,030733,030734,030741,030742,030744,030745,030748,030750,030755,030759,030761,030763,030764,030768,030769,030770,030772,030773,030776,030777,030780,030781,030783,030784,030786,030789,030790,030791,030793,030794,030795,030796,030797,030799,030800,030801,030802,030803,030807,030808,030809,030819,030820,030823,030824,030825,030826,030827,030828,030829,030830,030831,030837,030841,030842,030844,030845,030846,030847,030848,030851,030861,030865,030866,030867,030869,030871,030873,030874,030875,030879,030882,030883,030886,030889,030890,030891,030894,030897,030898,030900,030901,030902,030903,030904,030905,030908,030910,030911,030912,030913,030914,030915,030916,030917,030918,030919,030931,030932,030934,030935,030936,030938,030939,030942,030943,030948,030950,030954,030956,030958,030959,030960,030961,030962,030963,030968,030975,030976,030980,030981,030982,030984,030986,030988,030992,030994,030995,030996,030998,031001,031004,031005,031007,031008,031009,031012,031013,031014,031015,031016,031017,031018,031019,031025,031028,031029,031030,031031,031032,031033,031034,031035,031036,031037,031042,031043,031044,031051,031052,031053,031057,031059,031060,031061,031062,031064,031066,031067,031070,031071,031075,031076,031077,031078,031079,031080,031081,031082,031083,031089,031090,031096,031097,031098,031099,031100,031101,031102,031108,031109,031110,031111,031116,031118,031120,031122,031124,031126,031127,031128,031129,031130,031132,031134,031135,031141,031142,031143,031145,031150 \ No newline at end of file +014103,014104,014106,014108,014110,014113,014114,014115,014116,014119,014121,014123,014124,014125,014126,014127,014128,014129,014130,014131,014132,014135,014137,014138,014139,014140,014141,014142,014143,014144,014145,014146,014147,014148,014149,014150,014151,014152,014154,014155,014156,014158,014159,014160,014161,014162,014163,014173,014184,014185,014186,014187,014188,014189,014195,014196,014197,014198,014200,014201,014202,014209,014210,014211,014212,014213,014214,014215,014216,014218,014219,014220,014222,014223,014224,014225,014228,014229,014230,014232,014233,014234,014235,014236,014237,014238,014239,014240,014241,014242,014243,014244,014247,014248,014250,014251,014252,014253,014254,014256,014257,014258,014261,014264,014267,014268,014271,014272,014274,014275,014276,014277,014278,014279,014280,014281,014282,014284,014287,014289,014291,014292,014293,014294,014295,014296,014297,014298,014299,014300,014301,014302,014303,014304,014305,014306,014307,014308,014309,014310,014311,014312,014313,014314,014315,014316,014317,014318,014319,014320,014321,014322,014323,014324,014325,014326,014327,014328,014329,014332,014333,014334,014335,014336,014337,014338,014340,014341,014342,014343,014344,014345,014347,014350,014351,014353,014355,014356,014357,014358,014361,014362,014363,014365,014368,014370,014371,014372,014374,014375,014376,014378,014379,014384,014385,014387,014389,014390,014391,014395,014396,014397,014398,014399,014400,014401,014402,014403,014404,014405,014406,014407,014408,014409,014411,014413,014414,014416,014417,014418,014420,014421,014422,014424,014425,014428,014429,014430,014431,014433,014434,014442,014444,014445,014446,014447,014449,014450,014453,014456,014457,014458,014459,014460,014461,014462,014463,014465,014466,014467,014468,014469,014470,014471,014472,014473,014474,014475,014476,014477,014479,014480,014481,014482,014484,014485,014486,014487,014488,014489,014490,014491,014492,014493,014494,014495,014496,014497,014498,014499,014500,014501,014502,014504,014506,014507,014508,014509,014510,014511,014512,014513,014514,014515,014516,014517,014518,014519,014520,014521,014522,014523,014524,014525,014526,014527,014528,014529,014530,014531,014535,014536,014537,014539,014541,014542,014543,014544,014545,014547,014548,014549,014550,014551,014552,014553,014554,014555,014556,014557,014558,014559,014560,014561,014562,014563,014564,014565,014566,014567,014568,014569,014570,014571,014572,014573,014574,014575,014576,014577,014578,014579,014580,014581,014582,014583,014584,014585,014586,014587,014588,014589,014590,014591,014592,014593,014594,014595,014596,014597,014598,014599,014600,014601,014602,014603,014604,014605,014606,014607,014608,014609,014610,014611,014612,014613,014614,014615,014616,014617,014618,014619,014620,014621,014622,014623,014624,014625,014626,014627,014628,014629,014630,014631,014632,014633,014634,014635,014636,014637,014638,014639,014640,014641,014642,014643,014644,014645,014646,014647,014648,014649,014650,014651,014652,014653,014654,014655,014656,014657,014658,014659,014660,014661,014662,014663,014664,014665,014666,014667,014668,014669,014670,014671,014672,014673,014674,014675,014676,014677,014678,014679,014680,014681,014682,014683,014684,014685,014686,014687,014688,014689,014690,014691,014692,014693,014694,014695,014696,014697,014698,014699,014700,014701,014702,014703,014704,014705,014706,014707,014708,014709,014710,014711,014712,014713,014714,014715,014716,014717,014718,014719,014720,014721,014722,014723,014724,014725,014726,014727,014728,014729,014730,014731,014732,014733,014734,014735,014736,014737,014738,014739,014740,014741,014742,014743,014744,014745,014746,014747,014748,014749,014750,014751,014752,014753,014754,014755,014756,014757,014758,014759,014760,014761,014762,014763,014764,014765,014766,014767,014768,014769,014770,014771,014772,014773,014774,014775,014776,014777,014778,014779,014780,014781,014782,014783,021441,021442,021443,021444,021445,021446,021447,021448,021449,021450,021451,021452,021453,021454,021455,021456,021457,021458,021459,021460,021461,021462,021463,021464,021465,021466,021467,021468,021469,021470,021471,021472,021473,021474,021475,021476,021477,021478,021479,021480,021481,021482,021483,021484,021485,021486,021487,021488,021489,021490,021491,021492,021493,021494,021495,021496,021497,021498,021499,021500,021501,021502,021503,021504,021505,021506,021507,021508,021509,021510,021511,021512,021513,021514,021515,021516,021517,021518,021519,021520,021521,021522,021523,021524,021525,021526,021527,021528,021529,021530,021531,021532,021533,021534,021535,021536,021537,021538,021539,021540,021541,021542,021543,021544,021545,021546,021547,021548,021549,021550,021551,021552,021553,021554,021555,021556,021557,021558,021559,021560,021561,021562,021563,021564,021565,021566,021567,021568,021569,021570,021571,021572,021573,021574,021575,021576,021577,021578,021579,021580,021581,021582,021583,021584,021585,021586,021587,021588,021589,021590,021591,021592,021593,021594,021595,021596,021597,021598,021599,021600,021601,021602,021603,021604,021605,021606,021607,021608,021609,021610,021611,021612,021613,021614,021615,021616,021617,021618,021619,021620,021621,021622,021623,021624,021625,021626,021627,021628,021629,021630,021631,021632,021633,021634,021635,021636,021637,021638,021639,021640,021641,021642,021643,021644,021645,021646,021647,021648,021649,021650,021651,021652,021653,021654,021655,021656,021657,021658,021659,021660,021661,021662,021663,021664,021665,021666,021667,021668,021669,021670,021671,021672,021673,021674,021675,021676,021677,021678,021679,021680,021681,021682,021683,021684,021685,021686,021687,021688,021689,021690,021691,021692,021693,021694,021695,021696,021697,021698,021699,021700,021701,021702,021703,021704,021705,021706,021707,021708,021709,021710,021711,021712,021713,021714,021715,021716,021717,021718,021719,021720,021721,021722,021723,021724,021725,021726,021727,021728,021729,021730,021731,021732,021733,021734,021735,021736,021737,021738,021739,021740,021741,021742,021743,021744,021745,021746,021747,021748,021749,021750,021751,021752,021753,021754,021755,021756,021757,021758,021759,021760,021761,021762,021763,021764,021765,021766,021767,021768,021769,021770,021771,021772,021773,021774,021775,021776,021777,021778,021779,021780,021781,021782,021783,021784,021785,021786,021787,021788,021789,021790,021791,021792,021793,021794,021795,021796,021797,021798,021799,021800,021801,021802,021803,021804,021805,021806,021807,021808,021809,021810,021811,021812,021813,021814,021815,021816,021817,021818,021819,021820,021821,021822,021823,021824,021825,021826,021827,021828,021829,021830,021831,021832,021833,021834,021835,021836,021837,021838,021839,021840,021841,021842,021843,021844,021845,021846,021847,021848,021849,021850,021851,021852,021853,021854,021855,021856,021857,021858,021859,021860,021861,021862,021863,021864,021865,021866,021867,021868,021869,021870,021871,021872,021873,021874,021875,021876,021877,021878,021879,021880,021881,021882,021883,021884,021885,021886,021887,021888,021889,021890,021891,021892,021893,021894,021895,021896,021897,021898,021899,021900,021901,021902,021903,021904,021905,021906,021907,021908,021909,021910,021911,021912,021913,021914,021915,021916,021917,021918,021919,021920,021921,021922,021923,021924,021925,021926,021927,021928,021929,021930,021931,021932,021933,021934,021935,021936,021937,021938,021939,021940,021941,021942,021943,021944,021945,021946,021947,021948,021949,021950,021951,021952,021953,021954,021955,021956,021957,021958,021959,021960,021961,021962,021963,021964,021965,021966,021967,021968,021969,021970,021971,021972,021973,021974,021975,021976,021977,021978,021979,021980,021981,021982,021983,021984,021985,021986,021987,021988,021989,021990,021991,021992,021993,021994,021995,021996,021997,021998,021999,022000,022001,022002,022003,022004,022005,022006,022007,022008,022009,022010,022011,022012,022013,022014,022015,022016,022017,022018,022019,022020,022021,022022,022023,022024,022025,022026,022027,022028,022029,022030,022031,022032,022033,022034,022035,022036,022037,022038,022039,022040,022041,022042,022043,022044,022045,022046,022047,022048,022049,022050,022051,022052,022053,022054,022055,022056,022057,022058,022059,022060,022061,022062,022063,022064,022065,022066,022067,022068,022069,022070,022071,022072,022073,022074,022075,022076,022077,022078,022079,022080,022081,022082,022083,022084,022085,022086,022087,022088,022089,022090,022091,022092,022093,022094,022095,022096,022097,022098,022099,022100,022101,022102,022103,022104,022105,031244,031245,031246,031247,031248,031249,031250,031251,031252,031253,031254,031255,031256,031257,031258,031259,031260,031261,031262,031263,031264,031265,031267,031268,031269,031270,031271,031272,031273,031274,031275,031276,031277,031278,031279,031280,031281,031283,031284,031285,031286,031287,031288,031289,031290,031291,031292,031293,031294,031295,031296,031297,031298,031299,031300,031301,031302,031303,031304,031305,031306,031307,031308,031332,031333,031334,031335,031336,031337,031338,031339,031340,031341,031342,031343,031344,031345,031346,031347,031348,031349,031350,031351,031352,031358,031359,031361,031362,031363,031364,031365,031366,031367,031368,031369,031370,031371,031372,031373,031374,031375,031376,031377,031378,031379,031380,031381,040001,040002,040003,040004,040005,040006,040007,040008,040009,040010,040011,040012,040013,040014,040015,040016,040017,040018,040019,040020,040021,040022,040023,040024,040025,040026,040027,040028,040029,040030,040031,040032,040033,040034,040035,040036,040037,040038,040039,040040,040041,040042,040043,040044,040045,040046,040047,040048,040049,040050,040051,040052,040053,040054,040055,040056,040057,040058,040059,040060,040061,040062,040063,040064,040065,040066,040067,040068,040069,040070,040071,040072,040073,040074,040075,040076,040077,040078,040079,040080,040081,040082,040083,040084,040085,040086,040087,040088,040089,040090,040091,040092,040093,040094,040095,040096,040097,040098,040099,040100,040101,040102,040103,040104,040105,040106,040107,040108,040109,040110,040111,040112,040113,040114,040115,040116,040117,040118,040119,040120,040121,040122,040123,040124,040125,040126,040127,040128,040129,040130,040131,040132,040133,040134,040135,040136,040137,040138,040139,040140,040141,040142,040143,040144,040145,040146,040147,040148,040149,040150,040151,040152,040153,040154,040155,040156,040157,040158,040159,040160,040161,040162,040163,040164,040165,040166,040167,040168,040169,040170,040171,040172,040173,040174,040175,040176,040177,040178,040179,040180,040181,040182,040183,040184,040185,040186,040187,040188,040189,040190,040191,040192,040193,040194,040195,040196,040197,040198,040199,040200,040201,040202,040203,040204,040205,040206,040207,040208,040209,040210,040211,040212,040213,040214,040215,040216,040217,040218,040219,040220,040221,040222,040223,040224,040225,040226,040227,040228,040229,040230,040231,040232,040233,040234,040235,040236,040237,040238,040239,040240,040241,040242,040243,040244,040245,040246,040247,040248,040249,040250,040251,040252,040253,040254,040255,040256,040257,040258,040259,040260,040261,040262,040263,040264,040265,040266,040267,040268,040269,040270,040271,040272,040273,040274,040275,040276,040277,040278,040279,040280,040281,040282,040283,040284,040285,040286,040287,040288,040289,040290,040291,040292,040293,040294,040295,040296,040297,040298,040299,040300,040301,040302,040303,040304,040305,040306,040307,040308,040309,040310,040311,040312,040313,040314,040315,040316,040317,040318,040319,040320,040321,040322,040323,040324,040325,040326,040327,040328,040329,040330,040331,040332,040333,040334,040335,040336,040337,040338,040339,040340,040341,040342,040343,040344,040345,040346,040347,040348,040349,040350,040351,040352,040353,040354,040355,040356,040357,040358,040359,040360,040361,040362,040363,040364,040365,040366,040367,040368,040369,040370,040371,040372,040373,040374,040375,040376,040377,040378,040379,040380,040381,040382,040383,040384,040385,040386,040387,040388,040389,040390,040391,040392,040393,040394,040395,040396,040397,040398,040399,040400,040401,040402,040403,040404,040405,040406,040407,040408,040409,040410,040411,040412,040413,040414,040415,040416,040417,040418,040419,040420,040421,040422,040423,040424,040425,040426,040427,040428,040429,040430,040431,040432,040433,040434,040435,040436,040437,040438,040439,040440,040441,040442,040443,040444,040445,040446,040447,040448,040449,040450,040451,040452,040453,040454,040455,040456,040457,040458,040459,040460,040461,040462,040463,040464,040465,040466,040467,040468,040469,040470,040471,040472,040473,040474,040475,040476,040477,040478,040479,040480,040481,040482,040483,040484,040485,040486,040487,040488,040489,040490,040491,040492,040493,040494,040495,040496,040497,040498,040499,040500,040501,040502,040503,040504,040505,040506,040507,040508,040509,040510,040511,040512,040513,040514,040515,040516,040517,040518,040519,040520,040521,040522,040523,040524,040525,040526 \ No newline at end of file diff --git a/工具/新题比对.ipynb b/工具/新题比对.ipynb index 17b87d92..7076c404 100644 --- a/工具/新题比对.ipynb +++ b/工具/新题比对.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -13,61 +13,11 @@ "0.805\t2\t006207\n", "0.812\t3\t006137\n", "0.798\t4\t012269\n", - "0.831\t5\t040063\n", + "0.817\t5\t010989\n", "0.888\t6\t021503\n", - "0.932\t7\t040057\n", + "0.815\t7\t021484\n", "0.959\t8\t003206\n", - "0.817\t9\t011090\n", - "0.796\t10\t003058\n", - "0.768\t11\t005984\n", - "0.744\t12\t021463\n", - "0.872\t13\t008169\n", - "0.843\t14\t021559\n", - "0.758\t15\t006230\n", - "0.888\t16\t008317\n", - "0.682\t17\t012005\n", - "0.630\t18\t006107\n", - "0.765\t19\t021581\n", - "0.763\t20\t014242\n", - "0.661\t21\t013849\n", - "0.716\t22\t008191\n", - "0.504\t23\t003537\n", - "0.934\t24\t000818\n", - "0.755\t25\t012596\n", - "0.893\t26\t012355\n", - "0.835\t27\t000479\n", - "0.950\t28\t001529\n", - "0.797\t29\t000577\n", - "0.737\t30\t003191\n", - "1.000\t31\t012594\n", - "0.824\t32\t003150\n", - "1.000\t33\t004066\n", - "0.707\t34\t003140\n", - "0.648\t35\t030294\n", - "0.752\t36\t014186\n", - "0.621\t37\t014223\n", - "0.700\t38\t004442\n", - "0.813\t39\t030808\n", - "0.669\t40\t013843\n", - "0.654\t41\t000738\n", - "0.682\t42\t013354\n", - "0.830\t43\t030042\n", - "0.977\t44\t020411\n", - "0.661\t45\t011133\n", - "0.681\t46\t004118\n", - "0.667\t47\t011943\n", - "0.683\t48\t005600\n", - "0.691\t49\t011386\n", - "0.711\t50\t002922\n", - "1.000\t51\t020452\n", - "0.736\t52\t020356\n", - "0.666\t53\t020430\n", - "0.685\t54\t020357\n", - "0.713\t55\t005540\n", - "0.643\t56\t012868\n", - "0.845\t57\t005598\n", - "0.860\t58\t002958\n", - "0.646\t59\t004184\n" + "0.839\t9\t011090\n" ] } ], @@ -75,7 +25,7 @@ "import os,re,difflib,Levenshtein,time,json\n", "\n", "# 重要!!! 范围\n", - "old_problems_range = \"1:999999\"\n", + "old_problems_range = \"1:30000\"\n", "threshold = 0.85\n", "\n", "# 待比对的文件\n", @@ -117,11 +67,11 @@ "def Lev_get_equal_rate(str1,str2):\n", " return Levenshtein.ratio(str1,str2)\n", "\n", - "def GenerateProblemListFromString(data):\n", + "def GenerateProblemListFromString(problem_string):\n", " try:\n", - " data = re.findall(r\"\\\\begin\\{document\\}([\\s\\S]*?)\\\\end\\{document\\}\",problems_string)[0]\n", + " data = re.findall(r\"\\\\begin\\{document\\}([\\s\\S]*?)\\\\end\\{document\\}\",problem_string)[0]\n", " except:\n", - " pass\n", + " data = problem_string\n", " data = re.sub(r\"\\n{2,}\",\"\\n\",data)\n", " data = re.sub(r\"\\\\item\",r\"\\\\enditem\\\\item\",data)\n", " data = re.sub(r\"\\\\end\\{enumerate\\}\",r\"\\\\enditem\",data)\n", @@ -220,7 +170,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.15" + "version": "3.8.15" }, "orig_nbformat": 4, "vscode": { diff --git a/工具/新题相似相同比对.py b/工具/新题相似相同比对.py new file mode 100644 index 00000000..f8416375 --- /dev/null +++ b/工具/新题相似相同比对.py @@ -0,0 +1,108 @@ +import os,re,difflib,Levenshtein,time,json + +# 重要!!! 范围 +old_problems_range = "1:30000" +threshold = 0.85 + +# 待比对的文件 +filename = r"C:\Users\weiye\Documents\wwy sync\临时工作区\自拟题目9.tex" + +#生成数码列表, 逗号分隔每个区块, 区块内部用:表示整数闭区间 +def generate_number_set(string): + string = re.sub(r"[\n\s]","",string) + string_list = string.split(",") + numbers_list = [] + for s in string_list: + if not ":" in s: + numbers_list.append(s.zfill(6)) + else: + start,end = s.split(":") + for ind in range(int(start),int(end)+1): + numbers_list.append(str(ind).zfill(6)) + return numbers_list + +#字符串预处理 +def pre_treating(string): + string = re.sub(r"\\begin\{center\}[\s\S]*?\\end\{center\}","",string) + string = re.sub(r"(bracket\{\d+\})|(blank\{\d+\})|(fourch)|(twoch)|(onech)|(mathrm)|(text)","",string) + string = re.sub(r"[\s\\\{\}\$\(\)\[\]]","",string) + string = re.sub(r"[\n\t]","",string) + string = re.sub(r"(displaystyle)|(overrightarrow)","",string) + string = re.sub(r"[,\.:;?]","",string) + return string + +#difflab字符串比较 +def difflab_get_equal_rate(str1, str2): + return difflib.SequenceMatcher(None, str1, str2).ratio() + +#Levenshtein jaro字符串比较 +def jaro_get_equal_rate(str1,str2): + return Levenshtein.jaro(str1,str2) + +#Levenshtein 字符串比较 +def Lev_get_equal_rate(str1,str2): + return Levenshtein.ratio(str1,str2) + +def GenerateProblemListFromString(problem_string): + try: + data = re.findall(r"\\begin\{document\}([\s\S]*?)\\end\{document\}",problem_string)[0] + except: + data = problem_string + data = re.sub(r"\n{2,}","\n",data) + data = re.sub(r"\\item",r"\\enditem\\item",data) + data = re.sub(r"\\end\{enumerate\}",r"\\enditem",data) + ProblemList_raw = [p.strip() for p in re.findall(r"\\item([\s\S]*?)\\enditem",data)] + ProblemsList = [] + for p in ProblemList_raw: + startpos = data.index(p) + tempdata = data[:startpos] + suflist = re.findall(r"\n\%[\dA-Za-z]+",tempdata) + if len(suflist) > 0: + suffix = suflist[-1].replace("%","").strip() + else: + suffix = "" + ProblemsList.append((p,suffix)) + return ProblemsList + + +#指定对比方法 +sim_test = jaro_get_equal_rate + +#读入题库 +with open(r"../题库0.3/Problems.json","r",encoding = "utf8") as f: + database = f.read() +pro_dict = json.loads(database) + +output = "" + +with open(filename,"r",encoding="u8") as f: + newdatabase = f.read() +new_pro_list = GenerateProblemListFromString(newdatabase) + +pro_dict_treated = {} +idrange_raw = generate_number_set(old_problems_range) +idrange = [id for id in pro_dict if id in idrange_raw] +for p in idrange: + pro_dict_treated[p] = pre_treating(pro_dict[p]["content"]) + +new_dict_treated = {} +for i in range(len(new_pro_list)): + new_dict_treated[i+1] = pre_treating(new_pro_list[i][0]) + +for i in new_dict_treated: + new_p = new_dict_treated[i] + maxsim = 0 + for p in pro_dict_treated: + old_p = pro_dict_treated[p] + sim = sim_test(new_p,old_p) + if sim > maxsim: + maxsim = sim + argmax = p + print("%.3f\t%d\t%s" %(maxsim,i,argmax)) + output += ("%.3f\t%d\t%s" %(maxsim,i,argmax)) + "\n" + # print("\n新题: %s" %new_pro_list[i-1][0]) + # print("\n原题: %s\n\n\n" %pro_dict[]["content"]) + +with open("临时文件/新题相似相同.txt","w",encoding = "u8") as f: + f.write(output) + diff --git a/工具/生成使用记录excel.ipynb b/工具/生成使用记录excel.ipynb index b2612f04..159369f6 100644 --- a/工具/生成使用记录excel.ipynb +++ b/工具/生成使用记录excel.ipynb @@ -2,9 +2,26 @@ "cells": [ { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "ModuleNotFoundError", + "evalue": "No module named 'openpyxl'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[1], line 63\u001b[0m\n\u001b[0;32m 60\u001b[0m \u001b[39mfor\u001b[39;00m t \u001b[39min\u001b[39;00m \u001b[39mrange\u001b[39m(\u001b[39mlen\u001b[39m(results)):\n\u001b[0;32m 61\u001b[0m df[\u001b[39mid\u001b[39m\u001b[39m+\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m_\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m+\u001b[39m\u001b[39mstr\u001b[39m(t\u001b[39m+\u001b[39m\u001b[39m1\u001b[39m)][c] \u001b[39m=\u001b[39m \u001b[39mfloat\u001b[39m(results[t])\n\u001b[1;32m---> 63\u001b[0m df\u001b[39m.\u001b[39;49mto_excel(outputfile,index \u001b[39m=\u001b[39;49m \u001b[39mFalse\u001b[39;49;00m)\n", + "File \u001b[1;32mc:\\Users\\weiye\\.conda\\envs\\pythontest\\lib\\site-packages\\pandas\\util\\_decorators.py:211\u001b[0m, in \u001b[0;36mdeprecate_kwarg.._deprecate_kwarg..wrapper\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 209\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m 210\u001b[0m kwargs[new_arg_name] \u001b[39m=\u001b[39m new_arg_value\n\u001b[1;32m--> 211\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39margs, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs)\n", + "File \u001b[1;32mc:\\Users\\weiye\\.conda\\envs\\pythontest\\lib\\site-packages\\pandas\\util\\_decorators.py:211\u001b[0m, in \u001b[0;36mdeprecate_kwarg.._deprecate_kwarg..wrapper\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 209\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m 210\u001b[0m kwargs[new_arg_name] \u001b[39m=\u001b[39m new_arg_value\n\u001b[1;32m--> 211\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39margs, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs)\n", + "File \u001b[1;32mc:\\Users\\weiye\\.conda\\envs\\pythontest\\lib\\site-packages\\pandas\\core\\generic.py:2374\u001b[0m, in \u001b[0;36mNDFrame.to_excel\u001b[1;34m(self, excel_writer, sheet_name, na_rep, float_format, columns, header, index, index_label, startrow, startcol, engine, merge_cells, encoding, inf_rep, verbose, freeze_panes, storage_options)\u001b[0m\n\u001b[0;32m 2361\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mpandas\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mio\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mformats\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mexcel\u001b[39;00m \u001b[39mimport\u001b[39;00m ExcelFormatter\n\u001b[0;32m 2363\u001b[0m formatter \u001b[39m=\u001b[39m ExcelFormatter(\n\u001b[0;32m 2364\u001b[0m df,\n\u001b[0;32m 2365\u001b[0m na_rep\u001b[39m=\u001b[39mna_rep,\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 2372\u001b[0m inf_rep\u001b[39m=\u001b[39minf_rep,\n\u001b[0;32m 2373\u001b[0m )\n\u001b[1;32m-> 2374\u001b[0m formatter\u001b[39m.\u001b[39;49mwrite(\n\u001b[0;32m 2375\u001b[0m excel_writer,\n\u001b[0;32m 2376\u001b[0m sheet_name\u001b[39m=\u001b[39;49msheet_name,\n\u001b[0;32m 2377\u001b[0m startrow\u001b[39m=\u001b[39;49mstartrow,\n\u001b[0;32m 2378\u001b[0m startcol\u001b[39m=\u001b[39;49mstartcol,\n\u001b[0;32m 2379\u001b[0m freeze_panes\u001b[39m=\u001b[39;49mfreeze_panes,\n\u001b[0;32m 2380\u001b[0m engine\u001b[39m=\u001b[39;49mengine,\n\u001b[0;32m 2381\u001b[0m storage_options\u001b[39m=\u001b[39;49mstorage_options,\n\u001b[0;32m 2382\u001b[0m )\n", + "File \u001b[1;32mc:\\Users\\weiye\\.conda\\envs\\pythontest\\lib\\site-packages\\pandas\\io\\formats\\excel.py:918\u001b[0m, in \u001b[0;36mExcelFormatter.write\u001b[1;34m(self, writer, sheet_name, startrow, startcol, freeze_panes, engine, storage_options)\u001b[0m\n\u001b[0;32m 914\u001b[0m need_save \u001b[39m=\u001b[39m \u001b[39mFalse\u001b[39;00m\n\u001b[0;32m 915\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m 916\u001b[0m \u001b[39m# error: Cannot instantiate abstract class 'ExcelWriter' with abstract\u001b[39;00m\n\u001b[0;32m 917\u001b[0m \u001b[39m# attributes 'engine', 'save', 'supported_extensions' and 'write_cells'\u001b[39;00m\n\u001b[1;32m--> 918\u001b[0m writer \u001b[39m=\u001b[39m ExcelWriter( \u001b[39m# type: ignore[abstract]\u001b[39;49;00m\n\u001b[0;32m 919\u001b[0m writer, engine\u001b[39m=\u001b[39;49mengine, storage_options\u001b[39m=\u001b[39;49mstorage_options\n\u001b[0;32m 920\u001b[0m )\n\u001b[0;32m 921\u001b[0m need_save \u001b[39m=\u001b[39m \u001b[39mTrue\u001b[39;00m\n\u001b[0;32m 923\u001b[0m \u001b[39mtry\u001b[39;00m:\n", + "File \u001b[1;32mc:\\Users\\weiye\\.conda\\envs\\pythontest\\lib\\site-packages\\pandas\\io\\excel\\_openpyxl.py:56\u001b[0m, in \u001b[0;36mOpenpyxlWriter.__init__\u001b[1;34m(self, path, engine, date_format, datetime_format, mode, storage_options, if_sheet_exists, engine_kwargs, **kwargs)\u001b[0m\n\u001b[0;32m 43\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39m__init__\u001b[39m(\n\u001b[0;32m 44\u001b[0m \u001b[39mself\u001b[39m,\n\u001b[0;32m 45\u001b[0m path: FilePath \u001b[39m|\u001b[39m WriteExcelBuffer \u001b[39m|\u001b[39m ExcelWriter,\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 54\u001b[0m ) \u001b[39m-\u001b[39m\u001b[39m>\u001b[39m \u001b[39mNone\u001b[39;00m:\n\u001b[0;32m 55\u001b[0m \u001b[39m# Use the openpyxl module as the Excel writer.\u001b[39;00m\n\u001b[1;32m---> 56\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mopenpyxl\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mworkbook\u001b[39;00m \u001b[39mimport\u001b[39;00m Workbook\n\u001b[0;32m 58\u001b[0m engine_kwargs \u001b[39m=\u001b[39m combine_kwargs(engine_kwargs, kwargs)\n\u001b[0;32m 60\u001b[0m \u001b[39msuper\u001b[39m()\u001b[39m.\u001b[39m\u001b[39m__init__\u001b[39m(\n\u001b[0;32m 61\u001b[0m path,\n\u001b[0;32m 62\u001b[0m mode\u001b[39m=\u001b[39mmode,\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 65\u001b[0m engine_kwargs\u001b[39m=\u001b[39mengine_kwargs,\n\u001b[0;32m 66\u001b[0m )\n", + "\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'openpyxl'" + ] + } + ], "source": [ "import os,re,json\n", "import pandas as pd\n", @@ -71,26 +88,6 @@ "df.to_excel(outputfile,index = False)" ] }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.231" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "float(\"0.231\")" - ] - }, { "cell_type": "code", "execution_count": null, @@ -115,7 +112,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.9.15" }, "orig_nbformat": 4, "vscode": { diff --git a/工具/目标挂钩清点.py b/工具/目标挂钩清点.py new file mode 100644 index 00000000..51a70a0c --- /dev/null +++ b/工具/目标挂钩清点.py @@ -0,0 +1,27 @@ +import json + +filename = r"文本文件/题号筛选.txt" +with open(r"..\题库0.3\problems.json","r",encoding = "u8") as f: + database = f.read() +pro_dict = json.loads(database) +units = ["第一单元","第二单元","第三单元","第四单元","第五单元","第六单元","第七单元","第八单元","第九单元","暂无对应"] +count1 = [0]*10 +count2 = [0]*10 +count3 = 0 +untagged = [] +for id in pro_dict: + for u in range(10): + unit = units[u] + if unit in "".join(pro_dict[id]["tags"]): + count1[u] += 1 + if len(pro_dict[id]["objs"]) > 0: + count2[u] += 1 + if len(pro_dict[id]["tags"]) == 0: + count3 += 1 + untagged.append(id) +for u in range(len(units)): + print(units[u],". 总题数:",count1[u],", 完成对应题数:",count2[u]) +print("题库总题数: %d, 已有单元标签题数: %d, 未赋单元标签题数: %d."%(len(pro_dict),len(pro_dict)-count3,count3)) +with open (filename,"w",encoding = "u8") as f: + f.write(",".join(untagged)) +print("未赋标签的题号列表已保存至: %s" %filename) diff --git a/工具/目标挂钩简要清点.ipynb b/工具/目标挂钩简要清点.ipynb index a65f850b..89a904d7 100644 --- a/工具/目标挂钩简要清点.ipynb +++ b/工具/目标挂钩简要清点.ipynb @@ -2,70 +2,56 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import json,os\n", - "with open(r\"..\\题库0.3\\problems.json\",\"r\",encoding = \"u8\") as f:\n", - " database = f.read()\n", - "pro_dict = json.loads(database)\n", - "units = [\"第一单元\",\"第二单元\",\"第三单元\",\"第四单元\",\"第五单元\",\"第六单元\",\"第七单元\",\"第八单元\",\"第九单元\"]\n", - "count1 = [0]*9\n", - "count2 = [0]*9\n", - "for id in pro_dict:\n", - " for u in range(9):\n", - " unit = units[u]\n", - " if unit in \"\".join(pro_dict[id][\"tags\"]):\n", - " count1[u] += 1\n", - " if len(pro_dict[id][\"objs\"]) > 0:\n", - " count2[u] += 1" - ] - }, - { - "cell_type": "code", - "execution_count": 2, + "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "第一单元 . 总题数: 2014 , 完成对应题数: 1400\n", - "第二单元 . 总题数: 3111 , 完成对应题数: 2127\n", - "第三单元 . 总题数: 2218 , 完成对应题数: 395\n", - "第四单元 . 总题数: 1444 , 完成对应题数: 1036\n", - "第五单元 . 总题数: 1433 , 完成对应题数: 306\n", - "第六单元 . 总题数: 1383 , 完成对应题数: 431\n", - "第七单元 . 总题数: 1712 , 完成对应题数: 957\n", - "第八单元 . 总题数: 1378 , 完成对应题数: 522\n", - "第九单元 . 总题数: 422 , 完成对应题数: 101\n" + "第一单元 . 总题数: 2213 , 完成对应题数: 1401\n", + "第二单元 . 总题数: 3472 , 完成对应题数: 2135\n", + "第三单元 . 总题数: 2426 , 完成对应题数: 395\n", + "第四单元 . 总题数: 1657 , 完成对应题数: 1037\n", + "第五单元 . 总题数: 1590 , 完成对应题数: 307\n", + "第六单元 . 总题数: 1555 , 完成对应题数: 431\n", + "第七单元 . 总题数: 1996 , 完成对应题数: 958\n", + "第八单元 . 总题数: 1526 , 完成对应题数: 525\n", + "第九单元 . 总题数: 473 , 完成对应题数: 101\n", + "暂无对应 . 总题数: 344 , 完成对应题数: 121\n", + "题库总题数: 18795, 已有单元标签题数: 16941, 未赋单元标签题数: 1854.\n", + "未赋标签的题号列表已保存至: 文本文件/题号筛选.txt\n" ] } ], "source": [ + "import json,os\n", + "\n", + "filename = r\"文本文件/题号筛选.txt\"\n", + "with open(r\"..\\题库0.3\\problems.json\",\"r\",encoding = \"u8\") as f:\n", + " database = f.read()\n", + "pro_dict = json.loads(database)\n", + "units = [\"第一单元\",\"第二单元\",\"第三单元\",\"第四单元\",\"第五单元\",\"第六单元\",\"第七单元\",\"第八单元\",\"第九单元\",\"暂无对应\"]\n", + "count1 = [0]*10\n", + "count2 = [0]*10\n", + "count3 = 0\n", + "untagged = []\n", + "for id in pro_dict:\n", + " for u in range(10):\n", + " unit = units[u]\n", + " if unit in \"\".join(pro_dict[id][\"tags\"]):\n", + " count1[u] += 1\n", + " if len(pro_dict[id][\"objs\"]) > 0:\n", + " count2[u] += 1\n", + " if len(pro_dict[id][\"tags\"]) == 0:\n", + " count3 += 1\n", + " untagged.append(id)\n", "for u in range(len(units)):\n", - " print(units[u],\". 总题数:\",count1[u],\", 完成对应题数:\",count2[u])\n" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(12684, 7269)" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(sum(count1),sum(count2))" + " print(units[u],\". 总题数:\",count1[u],\", 完成对应题数:\",count2[u])\n", + "print(\"题库总题数: %d, 已有单元标签题数: %d, 未赋单元标签题数: %d.\"%(len(pro_dict),len(pro_dict)-count3,count3))\n", + "with open (filename,\"w\",encoding = \"u8\") as f:\n", + " f.write(\",\".join(untagged))\n", + "print(\"未赋标签的题号列表已保存至: %s\" %(filename))\n" ] }, { @@ -92,7 +78,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.15 (main, Nov 24 2022, 14:39:17) [MSC v.1916 64 bit (AMD64)]" + "version": "3.9.15" }, "orig_nbformat": 4, "vscode": { diff --git a/工具/相似题目标注.ipynb b/工具/相似题目标注.ipynb index 85337352..cce1773a 100644 --- a/工具/相似题目标注.ipynb +++ b/工具/相似题目标注.ipynb @@ -2,12 +2,22 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "相同题目已标注: 000100 031239\n", + "关联题目已标注: 000466 030610\n" + ] + } + ], "source": [ "import os,re,json\n", "\n", + "filename = \"临时文件/相似题目.txt\"\n", "\n", "# 读取题库数据并转换为字典\n", "with open(r\"../题库0.3/Problems.json\",\"r\",encoding = \"utf8\") as f:\n", @@ -15,7 +25,7 @@ "pro_dict = json.loads(database)\n", "\n", "# 读取已分类的相似文件列表\n", - "with open(\"临时文件/相似题目.txt\",\"r\",encoding = \"utf8\") as f:\n", + "with open(filename,\"r\",encoding = \"utf8\") as f:\n", " similar_text = \"\\n\"+f.read()\n", "\n", "similar_types = re.findall(r\"\\n[\\d]\\.[\\d]{4}[\\s]*([srSRnN ])[\\s]*\\n\",similar_text)\n", @@ -47,6 +57,13 @@ "with open(r\"../题库0.3/Problems.json\",\"w\",encoding = \"utf8\") as f:\n", " f.write(database)" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { @@ -65,7 +82,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.8" + "version": "3.8.15" }, "orig_nbformat": 4, "vscode": { diff --git a/工具/相似题目检测.ipynb b/工具/相似题目检测.ipynb index a3de6d22..5a7aa4c7 100644 --- a/工具/相似题目检测.ipynb +++ b/工具/相似题目检测.ipynb @@ -9,7 +9,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "旧题目数: 0 , 新题目数: 18100\n", + "旧题目数: 1907 , 新题目数: 500\n", "开始新题与旧题的比对\n", "50\n", "100\n", @@ -21,358 +21,6 @@ "400\n", "450\n", "500\n", - "550\n", - "600\n", - "650\n", - "700\n", - "750\n", - "800\n", - "850\n", - "900\n", - "950\n", - "1000\n", - "1050\n", - "1100\n", - "1150\n", - "1200\n", - "1250\n", - "1300\n", - "1350\n", - "1400\n", - "1450\n", - "1500\n", - "1550\n", - "1600\n", - "1650\n", - "1700\n", - "1750\n", - "1800\n", - "1850\n", - "1900\n", - "1950\n", - "2000\n", - "2050\n", - "2100\n", - "2150\n", - "2200\n", - "2250\n", - "2300\n", - "2350\n", - "2400\n", - "2450\n", - "2500\n", - "2550\n", - "2600\n", - "2650\n", - "2700\n", - "2750\n", - "2800\n", - "2850\n", - "2900\n", - "2950\n", - "3000\n", - "3050\n", - "3100\n", - "3150\n", - "3200\n", - "3250\n", - "3300\n", - "3350\n", - "3400\n", - "3450\n", - "3500\n", - "3550\n", - "3600\n", - "3650\n", - "3700\n", - "3750\n", - "3800\n", - "3850\n", - "3900\n", - "3950\n", - "4000\n", - "4050\n", - "4100\n", - "4150\n", - "4200\n", - "4250\n", - "4300\n", - "4350\n", - "4400\n", - "4450\n", - "4500\n", - "4550\n", - "4600\n", - "4650\n", - "4700\n", - "4750\n", - "4800\n", - "4850\n", - "4900\n", - "4950\n", - "5000\n", - "5050\n", - "5100\n", - "5150\n", - "5200\n", - "5250\n", - "5300\n", - "5350\n", - "5400\n", - "5450\n", - "5500\n", - "5550\n", - "5600\n", - "5650\n", - "5700\n", - "5750\n", - "5800\n", - "5850\n", - "5900\n", - "5950\n", - "6000\n", - "6050\n", - "6100\n", - "6150\n", - "6200\n", - "6250\n", - "6300\n", - "6350\n", - "6400\n", - "6450\n", - "6500\n", - "6550\n", - "6600\n", - "6650\n", - "6700\n", - "6750\n", - "6800\n", - "6850\n", - "6900\n", - "6950\n", - "7000\n", - "7050\n", - "7100\n", - "7150\n", - "7200\n", - "7250\n", - "7300\n", - "7350\n", - "7400\n", - "7450\n", - "7500\n", - "7550\n", - "7600\n", - "7650\n", - "7700\n", - "7750\n", - "7800\n", - "7850\n", - "7900\n", - "7950\n", - "8000\n", - "8050\n", - "8100\n", - "8150\n", - "8200\n", - "8250\n", - "8300\n", - "8350\n", - "8400\n", - "8450\n", - "8500\n", - "8550\n", - "8600\n", - "8650\n", - "8700\n", - "8750\n", - "8800\n", - "8850\n", - "8900\n", - "8950\n", - "9000\n", - "9050\n", - "9100\n", - "9150\n", - "9200\n", - "9250\n", - "9300\n", - "9350\n", - "9400\n", - "9450\n", - "9500\n", - "9550\n", - "9600\n", - "9650\n", - "9700\n", - "9750\n", - "9800\n", - "9850\n", - "9900\n", - "9950\n", - "10000\n", - "10050\n", - "10100\n", - "10150\n", - "10200\n", - "10250\n", - "10300\n", - "10350\n", - "10400\n", - "10450\n", - "10500\n", - "10550\n", - "10600\n", - "10650\n", - "10700\n", - "10750\n", - "10800\n", - "10850\n", - "10900\n", - "10950\n", - "11000\n", - "11050\n", - "11100\n", - "11150\n", - "11200\n", - "11250\n", - "11300\n", - "11350\n", - "11400\n", - "11450\n", - "11500\n", - "11550\n", - "11600\n", - "11650\n", - "11700\n", - "11750\n", - "11800\n", - "11850\n", - "11900\n", - "11950\n", - "12000\n", - "12050\n", - "12100\n", - "12150\n", - "12200\n", - "12250\n", - "12300\n", - "12350\n", - "12400\n", - "12450\n", - "12500\n", - "12550\n", - "12600\n", - "12650\n", - "12700\n", - "12750\n", - "12800\n", - "12850\n", - "12900\n", - "12950\n", - "13000\n", - "13050\n", - "13100\n", - "13150\n", - "13200\n", - "13250\n", - "13300\n", - "13350\n", - "13400\n", - "13450\n", - "13500\n", - "13550\n", - "13600\n", - "13650\n", - "13700\n", - "13750\n", - "13800\n", - "13850\n", - "13900\n", - "13950\n", - "14000\n", - "14050\n", - "14100\n", - "14150\n", - "14200\n", - "14250\n", - "14300\n", - "14350\n", - "14400\n", - "14450\n", - "14500\n", - "14550\n", - "14600\n", - "14650\n", - "14700\n", - "14750\n", - "14800\n", - "14850\n", - "14900\n", - "14950\n", - "15000\n", - "15050\n", - "15100\n", - "15150\n", - "15200\n", - "15250\n", - "15300\n", - "15350\n", - "15400\n", - "15450\n", - "15500\n", - "15550\n", - "15600\n", - "15650\n", - "15700\n", - "15750\n", - "15800\n", - "15850\n", - "15900\n", - "15950\n", - "16000\n", - "16050\n", - "16100\n", - "16150\n", - "16200\n", - "16250\n", - "16300\n", - "16350\n", - "16400\n", - "16450\n", - "16500\n", - "16550\n", - "16600\n", - "16650\n", - "16700\n", - "16750\n", - "16800\n", - "16850\n", - "16900\n", - "16950\n", - "17000\n", - "17050\n", - "17100\n", - "17150\n", - "17200\n", - "17250\n", - "17300\n", - "17350\n", - "17400\n", - "17450\n", - "17500\n", - "17550\n", - "17600\n", - "17650\n", - "17700\n", - "17750\n", - "17800\n", - "17850\n", - "17900\n", - "17950\n", - "18000\n", - "18050\n", - "18100\n", "开始新题之间的比对\n", "50\n", "100\n", @@ -383,370 +31,18 @@ "350\n", "400\n", "450\n", - "500\n", - "550\n", - "600\n", - "650\n", - "700\n", - "750\n", - "800\n", - "850\n", - "900\n", - "950\n", - "1000\n", - "1050\n", - "1100\n", - "1150\n", - "1200\n", - "1250\n", - "1300\n", - "1350\n", - "1400\n", - "1450\n", - "1500\n", - "1550\n", - "1600\n", - "1650\n", - "1700\n", - "1750\n", - "1800\n", - "1850\n", - "1900\n", - "1950\n", - "2000\n", - "2050\n", - "2100\n", - "2150\n", - "2200\n", - "2250\n", - "2300\n", - "2350\n", - "2400\n", - "2450\n", - "2500\n", - "2550\n", - "2600\n", - "2650\n", - "2700\n", - "2750\n", - "2800\n", - "2850\n", - "2900\n", - "2950\n", - "3000\n", - "3050\n", - "3100\n", - "3150\n", - "3200\n", - "3250\n", - "3300\n", - "3350\n", - "3400\n", - "3450\n", - "3500\n", - "3550\n", - "3600\n", - "3650\n", - "3700\n", - "3750\n", - "3800\n", - "3850\n", - "3900\n", - "3950\n", - "4000\n", - "4050\n", - "4100\n", - "4150\n", - "4200\n", - "4250\n", - "4300\n", - "4350\n", - "4400\n", - "4450\n", - "4500\n", - "4550\n", - "4600\n", - "4650\n", - "4700\n", - "4750\n", - "4800\n", - "4850\n", - "4900\n", - "4950\n", - "5000\n", - "5050\n", - "5100\n", - "5150\n", - "5200\n", - "5250\n", - "5300\n", - "5350\n", - "5400\n", - "5450\n", - "5500\n", - "5550\n", - "5600\n", - "5650\n", - "5700\n", - "5750\n", - "5800\n", - "5850\n", - "5900\n", - "5950\n", - "6000\n", - "6050\n", - "6100\n", - "6150\n", - "6200\n", - "6250\n", - "6300\n", - "6350\n", - "6400\n", - "6450\n", - "6500\n", - "6550\n", - "6600\n", - "6650\n", - "6700\n", - "6750\n", - "6800\n", - "6850\n", - "6900\n", - "6950\n", - "7000\n", - "7050\n", - "7100\n", - "7150\n", - "7200\n", - "7250\n", - "7300\n", - "7350\n", - "7400\n", - "7450\n", - "7500\n", - "7550\n", - "7600\n", - "7650\n", - "7700\n", - "7750\n", - "7800\n", - "7850\n", - "7900\n", - "7950\n", - "8000\n", - "8050\n", - "8100\n", - "8150\n", - "8200\n", - "8250\n", - "8300\n", - "8350\n", - "8400\n", - "8450\n", - "8500\n", - "8550\n", - "8600\n", - "8650\n", - "8700\n", - "8750\n", - "8800\n", - "8850\n", - "8900\n", - "8950\n", - "9000\n", - "9050\n", - "9100\n", - "9150\n", - "9200\n", - "9250\n", - "9300\n", - "9350\n", - "9400\n", - "9450\n", - "9500\n", - "9550\n", - "9600\n", - "9650\n", - "9700\n", - "9750\n", - "9800\n", - "9850\n", - "9900\n", - "9950\n", - "10000\n", - "10050\n", - "10100\n", - "10150\n", - "10200\n", - "10250\n", - "10300\n", - "10350\n", - "10400\n", - "10450\n", - "10500\n", - "10550\n", - "10600\n", - "10650\n", - "10700\n", - "10750\n", - "10800\n", - "10850\n", - "10900\n", - "10950\n", - "11000\n", - "11050\n", - "11100\n", - "11150\n", - "11200\n", - "11250\n", - "11300\n", - "11350\n", - "11400\n", - "11450\n", - "11500\n", - "11550\n", - "11600\n", - "11650\n", - "11700\n", - "11750\n", - "11800\n", - "11850\n", - "11900\n", - "11950\n", - "12000\n", - "12050\n", - "12100\n", - "12150\n", - "12200\n", - "12250\n", - "12300\n", - "12350\n", - "12400\n", - "12450\n", - "12500\n", - "12550\n", - "12600\n", - "12650\n", - "12700\n", - "12750\n", - "12800\n", - "12850\n", - "12900\n", - "12950\n", - "13000\n", - "13050\n", - "13100\n", - "13150\n", - "13200\n", - "13250\n", - "13300\n", - "13350\n", - "13400\n", - "13450\n", - "13500\n", - "13550\n", - "13600\n", - "13650\n", - "13700\n", - "13750\n", - "13800\n", - "13850\n", - "13900\n", - "13950\n", - "14000\n", - "14050\n", - "14100\n", - "14150\n", - "14200\n", - "14250\n", - "14300\n", - "14350\n", - "14400\n", - "14450\n", - "14500\n", - "14550\n", - "14600\n", - "14650\n", - "14700\n", - "14750\n", - "14800\n", - "14850\n", - "14900\n", - "14950\n", - "15000\n", - "15050\n", - "15100\n", - "15150\n", - "15200\n", - "15250\n", - "15300\n", - "15350\n", - "15400\n", - "15450\n", - "15500\n", - "15550\n", - "15600\n", - "15650\n", - "15700\n", - "15750\n", - "15800\n", - "15850\n", - "15900\n", - "15950\n", - "16000\n", - "16050\n", - "16100\n", - "16150\n", - "16200\n", - "16250\n", - "16300\n", - "16350\n", - "16400\n", - "16450\n", - "16500\n", - "16550\n", - "16600\n", - "16650\n", - "16700\n", - "16750\n", - "16800\n", - "16850\n", - "16900\n", - "16950\n", - "17000\n", - "17050\n", - "17100\n", - "17150\n", - "17200\n", - "17250\n", - "17300\n", - "17350\n", - "17400\n", - "17450\n", - "17500\n", - "17550\n", - "17600\n", - "17650\n", - "17700\n", - "17750\n", - "17800\n", - "17850\n", - "17900\n", - "17950\n", - "18000\n", - "18050\n", - "总耗时: 384.6457269191742 秒.\n", - "发现相似: 2800 , 其中已标注: 2223 .\n" + "总耗时: 3.233793258666992 秒.\n", + "发现相似: 30 , 其中已标注: 28 .\n" ] } ], "source": [ - "# from hashlib import new\n", "import os,re,difflib,Levenshtein,time,json\n", "\n", - "# 重要!!! 新题目的范围\n", - "id_new_problems = \"1:50000\"\n", - "threshold = 0.99\n", + "# 重要!!! 新旧题目的范围(有重复默认为新题)\n", + "id_new_problems = \"1:500\"\n", + "id_old_problems = \"30000:50000\"\n", + "threshold = 0.95\n", "\n", "#生成数码列表, 逗号分隔每个区块, 区块内部用:表示整数闭区间\n", "def generate_number_set(string):\n", @@ -804,17 +100,18 @@ "#生成旧题目数据库字典与新题目数据库字典\n", "new_id_list_raw = generate_number_set(id_new_problems)\n", "new_id_list = [id for id in pro_dict if id in new_id_list_raw]\n", + "old_id_list_raw = generate_number_set(id_old_problems)\n", + "old_id_list = [id for id in pro_dict if (id in old_id_list_raw and not id in new_id_list_raw)]\n", "old_problems_dict = {}\n", "new_problems_dict = {}\n", "old_problems_dict_content = {}\n", "new_problems_dict_content = {}\n", - "for id in pro_dict:\n", - " if id in new_id_list:\n", - " new_problems_dict[id] = pro_dict[id]\n", - " new_problems_dict_content[id] = pre_treating(pro_dict[id][\"content\"])\n", - " else:\n", - " old_problems_dict[id] = pro_dict[id]\n", - " old_problems_dict_content[id] = pre_treating(pro_dict[id][\"content\"])\n", + "for id in new_id_list:\n", + " new_problems_dict[id] = pro_dict[id]\n", + " new_problems_dict_content[id] = pre_treating(pro_dict[id][\"content\"])\n", + "for id in old_id_list:\n", + " old_problems_dict[id] = pro_dict[id]\n", + " old_problems_dict_content[id] = pre_treating(pro_dict[id][\"content\"])\n", "print(\"旧题目数:\",len(old_problems_dict),\", 新题目数:\",len(new_problems_dict))\n", "\n", "#记录起始时间\n", @@ -876,7 +173,60 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "#记录起始时间\n", + "start_time = time.time()\n", + "suspect_count = 0\n", + "remarked = 0\n", + "\n", + "alike_problems = \"\"\n", + "\n", + "\n", + "\n", + "#开始新题与旧题的比对\n", + "count = 0\n", + "print(\"开始新题与旧题的比对\")\n", + "for id_new in new_problems_dict:\n", + " count += 1\n", + " if count % 50 == 0:\n", + " print(count)\n", + " for id_old in old_problems_dict:\n", + " similar_rate = sim_test(new_problems_dict_content[id_new],old_problems_dict_content[id_old])\n", + " if similar_rate > threshold or id_new in old_problems_dict[id_old][\"related\"] or id_new in old_problems_dict[id_old][\"same\"] or id_old in new_problems_dict[id_new][\"related\"] or id_old in new_problems_dict[id_new][\"same\"]:\n", + " suspect_count += 1\n", + " if not (id_new in old_problems_dict[id_old][\"related\"] or id_new in old_problems_dict[id_old][\"same\"] or id_old in new_problems_dict[id_new][\"related\"] or id_old in new_problems_dict[id_new][\"same\"]):\n", + " alike_problems += (\"%.4f\" %similar_rate) + \"\\n\\n\" + id_new + \" \" + new_problems_dict[id_new][\"content\"] + \"\\n\\n\" + id_old + \" \" + old_problems_dict[id_old][\"content\"] + \"\\n\\n\"\n", + " else:\n", + " remarked += 1\n", + "\n", + "#开始新题之间的比对\n", + "count = 0\n", + "print(\"开始新题之间的比对\")\n", + "while len(new_problems_dict) >= 2:\n", + " count += 1\n", + " if count % 50 == 0:\n", + " print(count)\n", + " keys = list(new_problems_dict.keys())\n", + " current_problem = new_problems_dict.pop(keys[0])\n", + " current_problem_content = new_problems_dict_content[current_problem[\"id\"]]\n", + " for id_new in new_problems_dict:\n", + " similar_rate = sim_test(new_problems_dict_content[id_new],current_problem_content)\n", + " if similar_rate > threshold or id_new in current_problem[\"related\"] or id_new in current_problem[\"same\"] or current_problem[\"id\"] in new_problems_dict[id_new][\"related\"] or current_problem[\"id\"] in new_problems_dict[id_new][\"same\"]:\n", + " suspect_count += 1\n", + " if not (id_new in current_problem[\"related\"] or id_new in current_problem[\"same\"] or current_problem[\"id\"] in new_problems_dict[id_new][\"related\"] or current_problem[\"id\"] in new_problems_dict[id_new][\"same\"]):\n", + " alike_problems += (\"%.4f\" %similar_rate) + \"\\n\\n\" + id_new + \" \" + new_problems_dict[id_new][\"content\"] + \"\\n\\n\" + current_problem[\"id\"] + \" \" + current_problem[\"content\"] + \"\\n\\n\"\n", + " else:\n", + " remarked += 1\n", + "\n", + "\n", + "#记录终止时间及显示结果\n", + "end_time = time.time()\n", + "print(\"总耗时:\",end_time-start_time,\"秒.\")\n", + "print(\"发现相似: \",suspect_count,\", 其中已标注: \",remarked,\".\")\n", + "\n", + "with open(\"临时文件/相似题目.txt\",\"w\",encoding=\"utf8\") as f:\n", + " f.write(alike_problems)" + ] } ], "metadata": { @@ -895,7 +245,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.15" + "version": "3.8.15" }, "orig_nbformat": 4, "vscode": { diff --git a/工具/相同相似题目标注.py b/工具/相同相似题目标注.py new file mode 100644 index 00000000..4cb83f10 --- /dev/null +++ b/工具/相同相似题目标注.py @@ -0,0 +1,41 @@ +import os,re,json + +filename = "临时文件/相似题目.txt" + +# 读取题库数据并转换为字典 +with open(r"../题库0.3/Problems.json","r",encoding = "utf8") as f: + database = f.read() +pro_dict = json.loads(database) + +# 读取已分类的相似文件列表 +with open(filename,"r",encoding = "utf8") as f: + similar_text = "\n"+f.read() + +similar_types = re.findall(r"\n[\d]\.[\d]{4}[\s]*([srSRnN ])[\s]*\n",similar_text) +similar_problems = re.findall(r"\n([\d]{6}) ",similar_text) + +if len(similar_types) * 2 == len(similar_problems): + for i in similar_types: + id1 = similar_problems.pop(0) + id2 = similar_problems.pop(0) + if i.upper() == "S": + if not id2 in pro_dict[id1]["same"]: + pro_dict[id1]["same"].append(id2) + if not id1 in pro_dict[id2]["same"]: + pro_dict[id2]["same"].append(id1) + print("相同题目已标注:",id1,id2) + elif i.upper() == "R": + if not id2 in pro_dict[id1]["related"]: + pro_dict[id1]["related"].append(id2) + if not id1 in pro_dict[id2]["related"]: + pro_dict[id2]["related"].append(id1) + print("关联题目已标注:",id1,id2) + +else: + print("相似程度数据:",len(similar_types),"个, 相似题目:",len(similar_problems),"题. 数据有问题, 请检查.") + + +# 将题库字典转换为json文件并保存至原位 +database = json.dumps(pro_dict,indent=4,ensure_ascii=False) +with open(r"../题库0.3/Problems.json","w",encoding = "utf8") as f: + f.write(database) \ No newline at end of file diff --git a/工具/相同题目检测.ipynb b/工具/相同题目检测.ipynb index 6f9292af..a0a3d64c 100644 --- a/工具/相同题目检测.ipynb +++ b/工具/相同题目检测.ipynb @@ -2,4236 +2,51 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "题目数: 18162\n", - "000016\n", - "007761\n", - "\n", - "\n", - "\n", - "000022\n", - "007828\n", - "\n", - "\n", - "\n", - "50\n", - "000076\n", - "007924\n", - "\n", - "\n", - "\n", - "000089\n", - "007939\n", - "\n", - "\n", - "\n", - "000097\n", - "008220\n", - "\n", - "\n", - "\n", - "100\n", - "000100\n", - "008380\n", - "\n", - "\n", - "\n", - "000101\n", - "008198\n", - "\n", - "\n", - "\n", - "000104\n", - "008385\n", - "\n", - "\n", - "\n", - "000109\n", - "008231\n", - "\n", - "\n", - "\n", - "000116\n", - "008210\n", - "\n", - "\n", - "\n", - "150\n", - "200\n", - "250\n", - "000254\n", - "008823\n", - "\n", - "\n", - "\n", - "000266\n", - "022019\n", - "\n", - "\n", - "\n", - "000273\n", - "008847\n", - "\n", - "\n", - "\n", - "000276\n", - "008941\n", - "\n", - "\n", - "\n", - "000281\n", - "008942\n", - "\n", - "\n", - "\n", - "300\n", - "000308\n", - "008516\n", - "\n", - "\n", - "\n", - "000310\n", - "008519\n", - "\n", - "\n", - "\n", - "000314\n", - "008450\n", - "\n", - "\n", - "\n", - "000329\n", - "011073\n", - "\n", - "\n", - "\n", - "000330\n", - "011074\n", - "\n", - "\n", - "\n", - "000338\n", - "012422\n", - "\n", - "\n", - "\n", - "000347\n", - "010926\n", - "\n", - "\n", - "\n", - "000349\n", - "010927\n", - "\n", - "\n", - "\n", - "350\n", - "000351\n", - "010929\n", - "\n", - "\n", - "\n", - "000354\n", - "010932\n", - "\n", - "\n", - "\n", - "000374\n", - "011014\n", - "\n", - "\n", - "\n", - "000398\n", - "012078\n", - "\n", - "\n", - "\n", - "400\n", - "000413\n", - "004432\n", - "\n", - "\n", - "\n", - "000417\n", - "011093\n", - "\n", - "\n", - "\n", - "000421\n", - "011096\n", - "\n", - "\n", - "\n", - "000423\n", - "011098\n", - "\n", - "\n", - "\n", - "000424\n", - "011099\n", - "\n", - "\n", - "\n", - "000425\n", - "011100\n", - "\n", - "\n", - "\n", - "000426\n", - "011536\n", - "\n", - "\n", - "\n", - "000427\n", - "011537\n", - "\n", - "\n", - "\n", - "000428\n", - "011538\n", - "\n", - "\n", - "\n", - "000430\n", - "011540\n", - "\n", - "\n", - "\n", - "000431\n", - "011541\n", - "\n", - "\n", - "\n", - "000432\n", - "011542\n", - "\n", - "\n", - "\n", - "000435\n", - "004475\n", - "\n", - "\n", - "\n", - "000437\n", - "004427\n", - "\n", - "\n", - "\n", - "000443\n", - "004497\n", - "\n", - "\n", - "\n", - "450\n", - "000467\n", - "000878\n", - "\n", - "\n", - "\n", - "000469\n", - "012332\n", - "\n", - "\n", - "\n", - "000496\n", - "010965\n", - "\n", - "\n", - "\n", - "000498\n", - "010966\n", - "\n", - "\n", - "\n", - "000499\n", - "010967\n", - "\n", - "\n", - "\n", + "题目数: 18795\n", "500\n", - "000500\n", - "010968\n", - "\n", - "\n", - "\n", - "000503\n", - "010972\n", - "\n", - "\n", - "\n", - "000512\n", - "011586\n", - "\n", - "\n", - "\n", - "000521\n", - "004430\n", - "\n", - "\n", - "\n", - "550\n", - "000559\n", - "010970\n", - "\n", - "\n", - "\n", - "000561\n", - "012661\n", - "\n", - "\n", - "\n", - "600\n", - "000613\n", - "013591\n", - "\n", - "\n", - "\n", - "000616\n", - "004143\n", - "\n", - "\n", - "\n", - "000617\n", - "004144\n", - "\n", - "\n", - "\n", - "000618\n", - "004145\n", - "\n", - "\n", - "\n", - "000619\n", - "004146\n", - "\n", - "\n", - "\n", - "000620\n", - "004148\n", - "\n", - "\n", - "\n", - "000629\n", - "011603\n", - "\n", - "\n", - "\n", - "000636\n", - "004080\n", - "\n", - "\n", - "\n", - "000637\n", - "004081\n", - "\n", - "\n", - "\n", - "000638\n", - "004082\n", - "\n", - "\n", - "\n", - "650\n", - "000652\n", - "011395\n", - "\n", - "\n", - "\n", - "000667\n", - "004060\n", - "\n", - "\n", - "\n", - "000673\n", - "004066\n", - "\n", - "\n", - "\n", - "000679\n", - "011371\n", - "\n", - "\n", - "\n", - "000680\n", - "011372\n", - "\n", - "\n", - "\n", - "000682\n", - "011374\n", - "\n", - "\n", - "\n", - "000684\n", - "011375\n", - "\n", - "\n", - "\n", - "000691\n", - "004085\n", - "\n", - "\n", - "\n", - "000693\n", - "004086\n", - "\n", - "\n", - "\n", - "000695\n", - "004087\n", - "\n", - "\n", - "\n", - "700\n", - "000707\n", - "011516\n", - "\n", - "\n", - "\n", - "000708\n", - "011517\n", - "\n", - "\n", - "\n", - "000709\n", - "011518\n", - "\n", - "\n", - "\n", - "000710\n", - "011519\n", - "\n", - "\n", - "\n", - "000711\n", - "011520\n", - "\n", - "\n", - "\n", - "000712\n", - "011521\n", - "\n", - "\n", - "\n", - "000717\n", - "011306\n", - "\n", - "\n", - "\n", - "000718\n", - "011307\n", - "\n", - "\n", - "\n", - "000721\n", - "013304\n", - "\n", - "\n", - "\n", - "750\n", - "000754\n", - "004088\n", - "\n", - "\n", - "\n", - "000757\n", - "004312\n", - "011389\n", - "\n", - "\n", - "\n", - "000758\n", - "011390\n", - "\n", - "\n", - "\n", - "000763\n", - "004319\n", - "\n", - "\n", - "\n", - "000764\n", - "004318\n", - "\n", - "\n", - "\n", - "000766\n", - "004290\n", - "\n", - "\n", - "\n", - "000767\n", - "004291\n", - "\n", - "\n", - "\n", - "000768\n", - "004292\n", - "\n", - "\n", - "\n", - "000769\n", - "004293\n", - "\n", - "\n", - "\n", - "000771\n", - "004295\n", - "\n", - "\n", - "\n", - "000773\n", - "004297\n", - "\n", - "\n", - "\n", - "000774\n", - "004298\n", - "\n", - "\n", - "\n", - "000775\n", - "004299\n", - "\n", - "\n", - "\n", - "000790\n", - "011309\n", - "\n", - "\n", - "\n", - "000795\n", - "030043\n", - "\n", - "\n", - "\n", - "800\n", - "000804\n", - "004065\n", - "\n", - "\n", - "\n", - "000818\n", - "011391\n", - "\n", - "\n", - "\n", - "000819\n", - "011392\n", - "\n", - "\n", - "\n", - "000820\n", - "011393\n", - "\n", - "\n", - "\n", - "000821\n", - "011394\n", - "\n", - "\n", - "\n", - "000824\n", - "011398\n", - "\n", - "\n", - "\n", - "000825\n", - "011399\n", - "\n", - "\n", - "\n", - "000836\n", - "011368\n", - "\n", - "\n", - "\n", - "000837\n", - "011369\n", - "\n", - "\n", - "\n", - "000838\n", - "011370\n", - "\n", - "\n", - "\n", - "000841\n", - "011373\n", - "\n", - "\n", - "\n", - "000844\n", - "011376\n", - "\n", - "\n", - "\n", - "000845\n", - "011377\n", - "\n", - "\n", - "\n", - "850\n", - "900\n", - "000911\n", - "011328\n", - "013764\n", - "\n", - "\n", - "\n", - "000922\n", - "011582\n", - "\n", - "\n", - "\n", - "000942\n", - "013377\n", - "\n", - "\n", - "\n", - "950\n", "1000\n", - "1050\n", - "1100\n", - "1150\n", - "1200\n", - "1250\n", - "001294\n", - "007953\n", - "\n", - "\n", - "\n", - "1300\n", - "1350\n", - "001351\n", - "020486\n", - "\n", - "\n", - "\n", - "001353\n", - "008074\n", - "020393\n", - "\n", - "\n", - "\n", - "001375\n", - "001376\n", - "\n", - "\n", - "\n", - "001384\n", - "008206\n", - "\n", - "\n", - "\n", - "1400\n", - "1450\n", "1500\n", - "001506\n", - "006010\n", - "\n", - "\n", - "\n", - "001518\n", - "012081\n", - "\n", - "\n", - "\n", - "1550\n", - "1600\n", - "1650\n", - "1700\n", - "001745\n", - "012942\n", - "\n", - "\n", - "\n", - "1750\n", - "1800\n", - "1850\n", - "001885\n", - "008568\n", - "\n", - "\n", - "\n", - "1900\n", - "1950\n", "2000\n", - "002011\n", - "007013\n", - "\n", - "\n", - "\n", - "2050\n", - "002061\n", - "007156\n", - "\n", - "\n", - "\n", - "2100\n", - "002127\n", - "002130\n", - "\n", - "\n", - "\n", - "2150\n", - "2200\n", - "2250\n", - "002267\n", - "002268\n", - "\n", - "\n", - "\n", - "2300\n", - "2350\n", - "2400\n", - "2450\n", - "002491\n", - "002501\n", - "\n", - "\n", - "\n", "2500\n", - "002533\n", - "012084\n", - "\n", - "\n", - "\n", - "2550\n", - "002568\n", - "007447\n", - "\n", - "\n", - "\n", - "2600\n", - "2650\n", - "2700\n", - "002711\n", - "011200\n", - "\n", - "\n", - "\n", - "002723\n", - "013705\n", - "\n", - "\n", - "\n", - "002751\n", - "031300\n", - "\n", - "\n", - "\n", - "2750\n", - "002767\n", - "011849\n", - "\n", - "\n", - "\n", - "002803\n", - "004356\n", - "\n", - "\n", - "\n", - "2800\n", - "002835\n", - "020510\n", - "\n", - "\n", - "\n", - "002838\n", - "003667\n", - "\n", - "\n", - "\n", - "2850\n", - "002863\n", - "012895\n", - "\n", - "\n", - "\n", - "002864\n", - "012905\n", - "\n", - "\n", - "\n", - "002880\n", - "013479\n", - "\n", - "\n", - "\n", - "002898\n", - "012893\n", - "\n", - "\n", - "\n", - "2900\n", - "002911\n", - "030693\n", - "\n", - "\n", - "\n", - "002948\n", - "012201\n", - "\n", - "\n", - "\n", - "002954\n", - "012904\n", - "\n", - "\n", - "\n", - "2950\n", - "002960\n", - "011620\n", - "012891\n", - "\n", - "\n", - "\n", "3000\n", - "3050\n", - "003065\n", - "005877\n", - "\n", - "\n", - "\n", - "003076\n", - "040136\n", - "\n", - "\n", - "\n", - "3100\n", - "003114\n", - "006229\n", - "\n", - "\n", - "\n", - "3150\n", - "3200\n", - "003207\n", - "003682\n", - "011566\n", - "\n", - "\n", - "\n", - "003217\n", - "011726\n", - "\n", - "\n", - "\n", - "3250\n", - "003292\n", - "003661\n", - "\n", - "\n", - "\n", - "3300\n", - "003305\n", - "011732\n", - "\n", - "\n", - "\n", - "003335\n", - "030154\n", - "\n", - "\n", - "\n", - "003337\n", - "021748\n", - "\n", - "\n", - "\n", - "3350\n", - "003356\n", - "011727\n", - "\n", - "\n", - "\n", - "003379\n", - "003663\n", - "013903\n", - "\n", - "\n", - "\n", - "003380\n", - "003684\n", - "011568\n", - "\n", - "\n", - "\n", - "003400\n", - "013080\n", - "\n", - "\n", - "\n", - "3400\n", - "003441\n", - "021316\n", - "\n", - "\n", - "\n", - "3450\n", "3500\n", - "003535\n", - "007123\n", - "\n", - "\n", - "\n", - "003553\n", - "009041\n", - "\n", - "\n", - "\n", - "3550\n", - "003574\n", - "011612\n", - "\n", - "\n", - "\n", - "3600\n", - "3650\n", - "003658\n", - "031209\n", - "\n", - "\n", - "\n", - "003666\n", - "013569\n", - "\n", - "\n", - "\n", - "003673\n", - "011557\n", - "\n", - "\n", - "\n", - "003674\n", - "011558\n", - "\n", - "\n", - "\n", - "003675\n", - "011559\n", - "\n", - "\n", - "\n", - "003676\n", - "011560\n", - "\n", - "\n", - "\n", - "003677\n", - "011561\n", - "013332\n", - "\n", - "\n", - "\n", - "003678\n", - "011562\n", - "\n", - "\n", - "\n", - "003679\n", - "011563\n", - "014448\n", - "\n", - "\n", - "\n", - "003680\n", - "011564\n", - "\n", - "\n", - "\n", - "003681\n", - "011565\n", - "\n", - "\n", - "\n", - "003683\n", - "003698\n", - "011567\n", - "013880\n", - "\n", - "\n", - "\n", - "003685\n", - "011569\n", - "\n", - "\n", - "\n", - "003686\n", - "011570\n", - "\n", - "\n", - "\n", - "003687\n", - "011571\n", - "\n", - "\n", - "\n", - "003688\n", - "011572\n", - "\n", - "\n", - "\n", - "003689\n", - "011573\n", - "\n", - "\n", - "\n", - "003690\n", - "011574\n", - "\n", - "\n", - "\n", - "003692\n", - "011576\n", - "\n", - "\n", - "\n", - "003693\n", - "011577\n", - "\n", - "\n", - "\n", - "003705\n", - "013934\n", - "\n", - "\n", - "\n", - "3700\n", - "3750\n", - "003761\n", - "011649\n", - "\n", - "\n", - "\n", - "003763\n", - "012929\n", - "\n", - "\n", - "\n", - "003766\n", - "011633\n", - "\n", - "\n", - "\n", - "003767\n", - "013218\n", - "\n", - "\n", - "\n", - "3800\n", - "3850\n", - "3900\n", - "3950\n", - "003967\n", - "012375\n", - "\n", - "\n", - "\n", "4000\n", - "4050\n", - "004091\n", - "030823\n", - "\n", - "\n", - "\n", - "4100\n", - "004129\n", - "004361\n", - "\n", - "\n", - "\n", - "004130\n", - "004362\n", - "\n", - "\n", - "\n", - "004136\n", - "004367\n", - "\n", - "\n", - "\n", - "004138\n", - "004369\n", - "\n", - "\n", - "\n", - "004139\n", - "004370\n", - "\n", - "\n", - "\n", - "004140\n", - "004371\n", - "\n", - "\n", - "\n", - "004153\n", - "030683\n", - "\n", - "\n", - "\n", - "004161\n", - "030710\n", - "\n", - "\n", - "\n", - "004165\n", - "011201\n", - "\n", - "\n", - "\n", - "004173\n", - "004300\n", - "\n", - "\n", - "\n", - "4150\n", - "4200\n", - "004249\n", - "004469\n", - "\n", - "\n", - "\n", - "004273\n", - "011268\n", - "\n", - "\n", - "\n", - "4250\n", - "004280\n", - "011316\n", - "\n", - "\n", - "\n", - "004302\n", - "012152\n", - "\n", - "\n", - "\n", - "004329\n", - "013863\n", - "\n", - "\n", - "\n", - "4300\n", - "004391\n", - "012120\n", - "\n", - "\n", - "\n", - "004392\n", - "012122\n", - "\n", - "\n", - "\n", - "4350\n", - "004395\n", - "012124\n", - "\n", - "\n", - "\n", - "004396\n", - "012125\n", - "\n", - "\n", - "\n", - "004402\n", - "012131\n", - "\n", - "\n", - "\n", - "004403\n", - "012132\n", - "\n", - "\n", - "\n", - "004413\n", - "011502\n", - "\n", - "\n", - "\n", - "004441\n", - "031027\n", - "\n", - "\n", - "\n", - "4400\n", - "4450\n", - "004501\n", - "012364\n", - "\n", - "\n", - "\n", - "004528\n", - "030010\n", - "\n", - "\n", - "\n", "4500\n", - "004552\n", - "012203\n", - "\n", - "\n", - "\n", - "004553\n", - "012204\n", - "\n", - "\n", - "\n", - "004554\n", - "012205\n", - "\n", - "\n", - "\n", - "004556\n", - "012207\n", - "\n", - "\n", - "\n", - "004557\n", - "012208\n", - "\n", - "\n", - "\n", - "004558\n", - "012209\n", - "\n", - "\n", - "\n", - "004559\n", - "012210\n", - "014236\n", - "\n", - "\n", - "\n", - "004562\n", - "012214\n", - "\n", - "\n", - "\n", - "004563\n", - "012215\n", - "\n", - "\n", - "\n", - "004564\n", - "012216\n", - "\n", - "\n", - "\n", - "004566\n", - "012218\n", - "\n", - "\n", - "\n", - "004567\n", - "012219\n", - "\n", - "\n", - "\n", - "004568\n", - "012220\n", - "\n", - "\n", - "\n", - "004569\n", - "012221\n", - "\n", - "\n", - "\n", - "004587\n", - "030547\n", - "\n", - "\n", - "\n", - "4550\n", - "4600\n", - "004656\n", - "030282\n", - "\n", - "\n", - "\n", - "004659\n", - "040056\n", - "\n", - "\n", - "\n", - "004661\n", - "012009\n", - "\n", - "\n", - "\n", - "004662\n", - "012010\n", - "\n", - "\n", - "\n", - "004663\n", - "012011\n", - "\n", - "\n", - "\n", - "004664\n", - "012012\n", - "\n", - "\n", - "\n", - "004665\n", - "012013\n", - "\n", - "\n", - "\n", - "004666\n", - "012014\n", - "\n", - "\n", - "\n", - "004667\n", - "012015\n", - "\n", - "\n", - "\n", - "004668\n", - "012016\n", - "\n", - "\n", - "\n", - "004669\n", - "012017\n", - "\n", - "\n", - "\n", - "004670\n", - "012018\n", - "\n", - "\n", - "\n", - "004671\n", - "012019\n", - "\n", - "\n", - "\n", - "004673\n", - "012021\n", - "\n", - "\n", - "\n", - "004674\n", - "012022\n", - "\n", - "\n", - "\n", - "004675\n", - "012023\n", - "\n", - "\n", - "\n", - "004677\n", - "012025\n", - "\n", - "\n", - "\n", - "004678\n", - "012026\n", - "\n", - "\n", - "\n", - "004679\n", - "012027\n", - "\n", - "\n", - "\n", - "004680\n", - "012028\n", - "\n", - "\n", - "\n", - "004682\n", - "030770\n", - "\n", - "\n", - "\n", - "004683\n", - "030606\n", - "\n", - "\n", - "\n", - "004684\n", - "030742\n", - "\n", - "\n", - "\n", - "004685\n", - "031096\n", - "\n", - "\n", - "\n", - "004687\n", - "031017\n", - "\n", - "\n", - "\n", - "004688\n", - "030968\n", - "\n", - "\n", - "\n", - "004689\n", - "030700\n", - "\n", - "\n", - "\n", - "004691\n", - "030797\n", - "\n", - "\n", - "\n", - "004692\n", - "030939\n", - "\n", - "\n", - "\n", - "004697\n", - "030691\n", - "\n", - "\n", - "\n", - "004698\n", - "031032\n", - "\n", - "\n", - "\n", - "004699\n", - "030793\n", - "\n", - "\n", - "\n", - "004700\n", - "030902\n", - "\n", - "\n", - "\n", - "4650\n", - "004702\n", - "030731\n", - "\n", - "\n", - "\n", - "004724\n", - "030616\n", - "\n", - "\n", - "\n", - "004725\n", - "030967\n", - "\n", - "\n", - "\n", - "004726\n", - "031147\n", - "\n", - "\n", - "\n", - "004728\n", - "031021\n", - "\n", - "\n", - "\n", - "004729\n", - "030753\n", - "\n", - "\n", - "\n", - "004731\n", - "030696\n", - "\n", - "\n", - "\n", - "004732\n", - "030843\n", - "\n", - "\n", - "\n", - "004733\n", - "030951\n", - "\n", - "\n", - "\n", - "004734\n", - "031137\n", - "\n", - "\n", - "\n", - "004735\n", - "030821\n", - "\n", - "\n", - "\n", - "004742\n", - "030814\n", - "\n", - "\n", - "\n", - "4700\n", - "4750\n", - "4800\n", - "004895\n", - "020086\n", - "\n", - "\n", - "\n", - "4850\n", - "004906\n", - "020131\n", - "\n", - "\n", - "\n", - "004911\n", - "020133\n", - "\n", - "\n", - "\n", - "004915\n", - "020152\n", - "020278\n", - "\n", - "\n", - "\n", - "4900\n", - "4950\n", - "005017\n", - "020193\n", - "\n", - "\n", - "\n", - "005024\n", - "020209\n", - "\n", - "\n", - "\n", "5000\n", - "5050\n", - "005144\n", - "005234\n", - "\n", - "\n", - "\n", - "5100\n", - "5150\n", - "005220\n", - "020173\n", - "\n", - "\n", - "\n", - "005224\n", - "020301\n", - "\n", - "\n", - "\n", - "005225\n", - "020174\n", - "020300\n", - "\n", - "\n", - "\n", - "005230\n", - "007812\n", - "\n", - "\n", - "\n", - "5200\n", - "5250\n", - "5300\n", - "5350\n", - "005425\n", - "020363\n", - "\n", - "\n", - "\n", - "005426\n", - "020355\n", - "\n", - "\n", - "\n", - "005427\n", - "020364\n", - "\n", - "\n", - "\n", - "005446\n", - "020407\n", - "\n", - "\n", - "\n", - "005447\n", - "020408\n", - "\n", - "\n", - "\n", - "5400\n", - "5450\n", "5500\n", - "5550\n", - "5600\n", - "5650\n", - "5700\n", - "005798\n", - "008072\n", - "\n", - "\n", - "\n", - "5750\n", - "005802\n", - "005858\n", - "\n", - "\n", - "\n", - "5800\n", - "5850\n", - "5900\n", - "005989\n", - "006078\n", - "\n", - "\n", - "\n", - "5950\n", "6000\n", - "6050\n", - "006107\n", - "006218\n", - "\n", - "\n", - "\n", - "006126\n", - "021577\n", - "\n", - "\n", - "\n", - "006128\n", - "040101\n", - "\n", - "\n", - "\n", - "006145\n", - "021578\n", - "\n", - "\n", - "\n", - "006146\n", - "021576\n", - "\n", - "\n", - "\n", - "006147\n", - "021579\n", - "\n", - "\n", - "\n", - "6100\n", - "6150\n", - "006252\n", - "006334\n", - "\n", - "\n", - "\n", - "6200\n", - "6250\n", - "6300\n", - "6350\n", - "006429\n", - "008397\n", - "\n", - "\n", - "\n", - "006448\n", - "006449\n", - "\n", - "\n", - "\n", - "6400\n", - "6450\n", "6500\n", - "006582\n", - "006625\n", - "\n", - "\n", - "\n", - "6550\n", - "6600\n", - "006676\n", - "020704\n", - "\n", - "\n", - "\n", - "006692\n", - "020728\n", - "\n", - "\n", - "\n", - "6650\n", - "006730\n", - "020716\n", - "\n", - "\n", - "\n", - "006746\n", - "020743\n", - "\n", - "\n", - "\n", - "006747\n", - "020744\n", - "\n", - "\n", - "\n", - "6700\n", - "006770\n", - "020746\n", - "\n", - "\n", - "\n", - "6750\n", - "6800\n", - "6850\n", - "006925\n", - "008534\n", - "\n", - "\n", - "\n", - "6900\n", - "6950\n", "7000\n", - "007101\n", - "007208\n", - "\n", - "\n", - "\n", - "7050\n", - "007144\n", - "007145\n", - "\n", - "\n", - "\n", - "7100\n", - "007171\n", - "007172\n", - "\n", - "\n", - "\n", - "7150\n", - "7200\n", - "7250\n", - "007353\n", - "007430\n", - "\n", - "\n", - "\n", - "7300\n", - "7350\n", - "7400\n", - "7450\n", - "007530\n", - "007595\n", - "\n", - "\n", - "\n", - "007537\n", - "007649\n", - "\n", - "\n", - "\n", "7500\n", - "7550\n", - "7600\n", - "007683\n", - "020010\n", - "\n", - "\n", - "\n", - "007685\n", - "010026\n", - "\n", - "\n", - "\n", - "7650\n", - "007765\n", - "020124\n", - "020252\n", - "\n", - "\n", - "\n", - "007766\n", - "020125\n", - "020253\n", - "\n", - "\n", - "\n", - "007767\n", - "020126\n", - "020254\n", - "\n", - "\n", - "\n", - "7700\n", - "007781\n", - "020122\n", - "020250\n", - "\n", - "\n", - "\n", - "007794\n", - "020153\n", - "020279\n", - "\n", - "\n", - "\n", - "007795\n", - "020148\n", - "020274\n", - "\n", - "\n", - "\n", - "007799\n", - "020156\n", - "020282\n", - "\n", - "\n", - "\n", - "007800\n", - "020149\n", - "020275\n", - "\n", - "\n", - "\n", - "007801\n", - "020154\n", - "020280\n", - "\n", - "\n", - "\n", - "007813\n", - "020165\n", - "020291\n", - "\n", - "\n", - "\n", - "007816\n", - "020172\n", - "\n", - "\n", - "\n", - "007818\n", - "020195\n", - "020322\n", - "\n", - "\n", - "\n", - "7750\n", - "007829\n", - "020220\n", - "\n", - "\n", - "\n", - "007830\n", - "020221\n", - "020347\n", - "\n", - "\n", - "\n", - "007832\n", - "020223\n", - "\n", - "\n", - "\n", - "007860\n", - "020501\n", - "\n", - "\n", - "\n", - "007866\n", - "020500\n", - "\n", - "\n", - "\n", - "007867\n", - "020503\n", - "\n", - "\n", - "\n", - "007871\n", - "020508\n", - "\n", - "\n", - "\n", - "7800\n", - "007874\n", - "020637\n", - "\n", - "\n", - "\n", - "007876\n", - "020639\n", - "\n", - "\n", - "\n", - "007877\n", - "020640\n", - "\n", - "\n", - "\n", - "007892\n", - "020524\n", - "\n", - "\n", - "\n", - "007908\n", - "020576\n", - "\n", - "\n", - "\n", - "007914\n", - "020531\n", - "\n", - "\n", - "\n", - "007917\n", - "020581\n", - "\n", - "\n", - "\n", - "007918\n", - "020582\n", - "\n", - "\n", - "\n", - "7850\n", - "007934\n", - "020661\n", - "\n", - "\n", - "\n", - "007961\n", - "020453\n", - "\n", - "\n", - "\n", - "7900\n", - "008016\n", - "020396\n", - "\n", - "\n", - "\n", - "008019\n", - "020376\n", - "\n", - "\n", - "\n", - "008025\n", - "020401\n", - "\n", - "\n", - "\n", - "008026\n", - "010127\n", - "\n", - "\n", - "\n", - "7950\n", - "008032\n", - "010202\n", - "\n", - "\n", - "\n", "8000\n", - "008102\n", - "021443\n", - "\n", - "\n", - "\n", - "008108\n", - "021452\n", - "\n", - "\n", - "\n", - "008119\n", - "021474\n", - "\n", - "\n", - "\n", - "8050\n", - "008146\n", - "021498\n", - "\n", - "\n", - "\n", - "008151\n", - "021501\n", - "\n", - "\n", - "\n", - "008152\n", - "010216\n", - "\n", - "\n", - "\n", - "008164\n", - "021561\n", - "\n", - "\n", - "\n", - "008171\n", - "010240\n", - "021565\n", - "\n", - "\n", - "\n", - "008172\n", - "010237\n", - "\n", - "\n", - "\n", - "008175\n", - "010245\n", - "\n", - "\n", - "\n", - "8100\n", - "008179\n", - "010242\n", - "021583\n", - "\n", - "\n", - "\n", - "008180\n", - "010243\n", - "021584\n", - "\n", - "\n", - "\n", - "008181\n", - "021593\n", - "\n", - "\n", - "\n", - "008190\n", - "021588\n", - "\n", - "\n", - "\n", - "008204\n", - "021634\n", - "\n", - "\n", - "\n", - "008205\n", - "012093\n", - "021636\n", - "\n", - "\n", - "\n", - "008207\n", - "021632\n", - "\n", - "\n", - "\n", - "008209\n", - "010265\n", - "\n", - "\n", - "\n", - "008211\n", - "021633\n", - "\n", - "\n", - "\n", - "008223\n", - "040108\n", - "\n", - "\n", - "\n", - "008227\n", - "040110\n", - "\n", - "\n", - "\n", - "8150\n", - "008235\n", - "010272\n", - "\n", - "\n", - "\n", - "008259\n", - "021684\n", - "\n", - "\n", - "\n", - "008263\n", - "021670\n", - "\n", - "\n", - "\n", - "008280\n", - "021720\n", - "\n", - "\n", - "\n", - "8200\n", - "8250\n", - "8300\n", - "008411\n", - "020685\n", - "\n", - "\n", - "\n", - "008412\n", - "008436\n", - "\n", - "\n", - "\n", - "008415\n", - "020691\n", - "\n", - "\n", - "\n", - "008418\n", - "020695\n", - "\n", - "\n", - "\n", - "008421\n", - "020696\n", - "\n", - "\n", - "\n", - "008428\n", - "020702\n", - "\n", - "\n", - "\n", - "008433\n", - "009880\n", - "\n", - "\n", - "\n", - "008435\n", - "020730\n", - "\n", - "\n", - "\n", - "8350\n", - "008439\n", - "010760\n", - "\n", - "\n", - "\n", - "008448\n", - "020748\n", - "\n", - "\n", - "\n", - "008449\n", - "020745\n", - "\n", - "\n", - "\n", - "008454\n", - "009885\n", - "\n", - "\n", - "\n", - "008470\n", - "020821\n", - "\n", - "\n", - "\n", - "008474\n", - "020826\n", - "\n", - "\n", - "\n", - "008475\n", - "020833\n", - "\n", - "\n", - "\n", - "8400\n", - "8450\n", - "008548\n", - "021814\n", - "\n", - "\n", - "\n", - "008551\n", - "021818\n", - "\n", - "\n", - "\n", - "008556\n", - "021749\n", - "\n", - "\n", - "\n", - "008558\n", - "021751\n", - "\n", - "\n", - "\n", - "008559\n", - "021752\n", - "\n", - "\n", - "\n", - "008561\n", - "021754\n", - "\n", - "\n", - "\n", - "008563\n", - "021756\n", - "\n", - "\n", - "\n", - "008567\n", - "021801\n", - "\n", - "\n", - "\n", - "008571\n", - "021812\n", - "\n", - "\n", - "\n", "8500\n", - "8550\n", - "8600\n", - "008716\n", - "021728\n", - "\n", - "\n", - "\n", - "008733\n", - "021737\n", - "\n", - "\n", - "\n", - "8650\n", - "008743\n", - "021742\n", - "\n", - "\n", - "\n", - "008756\n", - "021960\n", - "\n", - "\n", - "\n", - "008759\n", - "021961\n", - "\n", - "\n", - "\n", - "008760\n", - "021948\n", - "\n", - "\n", - "\n", - "008765\n", - "021946\n", - "\n", - "\n", - "\n", - "8700\n", - "008795\n", - "010628\n", - "021983\n", - "\n", - "\n", - "\n", - "008803\n", - "022007\n", - "\n", - "\n", - "\n", - "008809\n", - "022006\n", - "\n", - "\n", - "\n", - "008828\n", - "022021\n", - "\n", - "\n", - "\n", - "008836\n", - "021331\n", - "\n", - "\n", - "\n", - "008840\n", - "010693\n", - "\n", - "\n", - "\n", - "008842\n", - "010694\n", - "\n", - "\n", - "\n", - "8750\n", - "008860\n", - "010649\n", - "\n", - "\n", - "\n", - "008862\n", - "010662\n", - "\n", - "\n", - "\n", - "008866\n", - "009816\n", - "\n", - "\n", - "\n", - "008869\n", - "010659\n", - "\n", - "\n", - "\n", - "008870\n", - "010700\n", - "\n", - "\n", - "\n", - "008890\n", - "021190\n", - "\n", - "\n", - "\n", - "008894\n", - "021186\n", - "\n", - "\n", - "\n", - "8800\n", - "008899\n", - "021200\n", - "\n", - "\n", - "\n", - "008900\n", - "021222\n", - "\n", - "\n", - "\n", - "008901\n", - "021229\n", - "\n", - "\n", - "\n", - "008902\n", - "021223\n", - "\n", - "\n", - "\n", - "008903\n", - "021230\n", - "\n", - "\n", - "\n", - "008905\n", - "021231\n", - "\n", - "\n", - "\n", - "008907\n", - "021235\n", - "\n", - "\n", - "\n", - "008908\n", - "021236\n", - "\n", - "\n", - "\n", - "008909\n", - "009830\n", - "021237\n", - "\n", - "\n", - "\n", - "008910\n", - "021238\n", - "031108\n", - "\n", - "\n", - "\n", - "008911\n", - "021263\n", - "\n", - "\n", - "\n", - "008912\n", - "021241\n", - "\n", - "\n", - "\n", - "008913\n", - "021242\n", - "\n", - "\n", - "\n", - "008914\n", - "021243\n", - "\n", - "\n", - "\n", - "008915\n", - "021244\n", - "\n", - "\n", - "\n", - "008916\n", - "021240\n", - "\n", - "\n", - "\n", - "008917\n", - "021264\n", - "\n", - "\n", - "\n", - "008918\n", - "021265\n", - "\n", - "\n", - "\n", - "008919\n", - "021261\n", - "\n", - "\n", - "\n", - "008926\n", - "021270\n", - "\n", - "\n", - "\n", - "008929\n", - "021288\n", - "\n", - "\n", - "\n", - "008930\n", - "010685\n", - "\n", - "\n", - "\n", - "008931\n", - "021289\n", - "\n", - "\n", - "\n", - "008933\n", - "021290\n", - "\n", - "\n", - "\n", - "008934\n", - "021296\n", - "\n", - "\n", - "\n", - "008935\n", - "021339\n", - "\n", - "\n", - "\n", - "008936\n", - "021310\n", - "\n", - "\n", - "\n", - "008944\n", - "008963\n", - "\n", - "\n", - "\n", - "8850\n", - "008955\n", - "021299\n", - "\n", - "\n", - "\n", - "008957\n", - "021328\n", - "\n", - "\n", - "\n", - "008968\n", - "014014\n", - "\n", - "\n", - "\n", - "008976\n", - "021843\n", - "\n", - "\n", - "\n", - "008978\n", - "021846\n", - "\n", - "\n", - "\n", - "008980\n", - "021844\n", - "\n", - "\n", - "\n", - "8900\n", - "009000\n", - "021880\n", - "\n", - "\n", - "\n", - "009011\n", - "021832\n", - "\n", - "\n", - "\n", - "009014\n", - "021833\n", - "\n", - "\n", - "\n", - "009019\n", - "021834\n", - "\n", - "\n", - "\n", - "009021\n", - "010406\n", - "\n", - "\n", - "\n", - "009039\n", - "021895\n", - "\n", - "\n", - "\n", - "8950\n", "9000\n", - "009114\n", - "020867\n", - "\n", - "\n", - "\n", - "009119\n", - "020883\n", - "\n", - "\n", - "\n", - "009121\n", - "020885\n", - "\n", - "\n", - "\n", - "009126\n", - "020896\n", - "\n", - "\n", - "\n", - "009128\n", - "020898\n", - "\n", - "\n", - "\n", - "009135\n", - "020964\n", - "\n", - "\n", - "\n", - "009136\n", - "020920\n", - "\n", - "\n", - "\n", - "009138\n", - "020930\n", - "\n", - "\n", - "\n", - "009146\n", - "020969\n", - "\n", - "\n", - "\n", - "009148\n", - "020937\n", - "\n", - "\n", - "\n", - "9050\n", - "009152\n", - "020956\n", - "\n", - "\n", - "\n", - "009153\n", - "020959\n", - "\n", - "\n", - "\n", - "009154\n", - "020957\n", - "\n", - "\n", - "\n", - "9100\n", - "009202\n", - "021028\n", - "\n", - "\n", - "\n", - "009204\n", - "021029\n", - "\n", - "\n", - "\n", - "009208\n", - "020990\n", - "\n", - "\n", - "\n", - "009209\n", - "020991\n", - "\n", - "\n", - "\n", - "009211\n", - "020982\n", - "\n", - "\n", - "\n", - "009212\n", - "020983\n", - "\n", - "\n", - "\n", - "009213\n", - "021007\n", - "\n", - "\n", - "\n", - "009217\n", - "020985\n", - "\n", - "\n", - "\n", - "009218\n", - "021008\n", - "\n", - "\n", - "\n", - "009219\n", - "021030\n", - "\n", - "\n", - "\n", - "009226\n", - "020974\n", - "\n", - "\n", - "\n", - "009228\n", - "020999\n", - "\n", - "\n", - "\n", - "009229\n", - "021000\n", - "\n", - "\n", - "\n", - "009231\n", - "020992\n", - "\n", - "\n", - "\n", - "009233\n", - "020994\n", - "\n", - "\n", - "\n", - "009238\n", - "021009\n", - "\n", - "\n", - "\n", - "009241\n", - "020993\n", - "\n", - "\n", - "\n", - "009246\n", - "021031\n", - "\n", - "\n", - "\n", - "009247\n", - "021032\n", - "\n", - "\n", - "\n", - "9150\n", - "009249\n", - "021033\n", - "\n", - "\n", - "\n", - "009251\n", - "021035\n", - "\n", - "\n", - "\n", - "009252\n", - "021036\n", - "\n", - "\n", - "\n", - "009253\n", - "021037\n", - "\n", - "\n", - "\n", - "009257\n", - "021051\n", - "\n", - "\n", - "\n", - "009258\n", - "021052\n", - "\n", - "\n", - "\n", - "009259\n", - "021053\n", - "\n", - "\n", - "\n", - "009260\n", - "021054\n", - "\n", - "\n", - "\n", - "009261\n", - "021055\n", - "\n", - "\n", - "\n", - "009263\n", - "021057\n", - "\n", - "\n", - "\n", - "009265\n", - "021058\n", - "\n", - "\n", - "\n", - "009266\n", - "021059\n", - "\n", - "\n", - "\n", - "009267\n", - "021062\n", - "\n", - "\n", - "\n", - "009268\n", - "021063\n", - "\n", - "\n", - "\n", - "009270\n", - "021065\n", - "\n", - "\n", - "\n", - "009274\n", - "021061\n", - "\n", - "\n", - "\n", - "009275\n", - "021067\n", - "\n", - "\n", - "\n", - "009276\n", - "021042\n", - "\n", - "\n", - "\n", - "009277\n", - "021043\n", - "\n", - "\n", - "\n", - "009278\n", - "021044\n", - "\n", - "\n", - "\n", - "009279\n", - "021045\n", - "\n", - "\n", - "\n", - "009281\n", - "021047\n", - "\n", - "\n", - "\n", - "009282\n", - "021048\n", - "\n", - "\n", - "\n", - "009284\n", - "021049\n", - "\n", - "\n", - "\n", - "009285\n", - "021072\n", - "\n", - "\n", - "\n", - "009286\n", - "021073\n", - "\n", - "\n", - "\n", - "009287\n", - "021074\n", - "\n", - "\n", - "\n", - "009288\n", - "021075\n", - "\n", - "\n", - "\n", - "009289\n", - "021076\n", - "\n", - "\n", - "\n", - "009293\n", - "021080\n", - "\n", - "\n", - "\n", - "009294\n", - "021081\n", - "\n", - "\n", - "\n", - "009295\n", - "021082\n", - "\n", - "\n", - "\n", - "009297\n", - "021083\n", - "\n", - "\n", - "\n", - "9200\n", - "009299\n", - "021085\n", - "\n", - "\n", - "\n", - "009300\n", - "021086\n", - "\n", - "\n", - "\n", - "009301\n", - "021087\n", - "\n", - "\n", - "\n", - "009302\n", - "021088\n", - "\n", - "\n", - "\n", - "009346\n", - "021093\n", - "\n", - "\n", - "\n", - "009347\n", - "021094\n", - "\n", - "\n", - "\n", - "009348\n", - "021095\n", - "\n", - "\n", - "\n", - "9250\n", - "009349\n", - "021096\n", - "\n", - "\n", - "\n", - "009350\n", - "021097\n", - "\n", - "\n", - "\n", - "009351\n", - "021101\n", - "\n", - "\n", - "\n", - "009353\n", - "021099\n", - "\n", - "\n", - "\n", - "009354\n", - "021100\n", - "\n", - "\n", - "\n", - "009355\n", - "021102\n", - "\n", - "\n", - "\n", - "009356\n", - "021126\n", - "\n", - "\n", - "\n", - "009357\n", - "021127\n", - "\n", - "\n", - "\n", - "009359\n", - "021103\n", - "\n", - "\n", - "\n", - "009360\n", - "021104\n", - "\n", - "\n", - "\n", - "009361\n", - "021105\n", - "\n", - "\n", - "\n", - "009362\n", - "021106\n", - "\n", - "\n", - "\n", - "009363\n", - "021107\n", - "\n", - "\n", - "\n", - "009365\n", - "021128\n", - "\n", - "\n", - "\n", - "009375\n", - "021162\n", - "\n", - "\n", - "\n", - "009376\n", - "021163\n", - "\n", - "\n", - "\n", - "9300\n", - "9350\n", - "009477\n", - "020374\n", - "\n", - "\n", - "\n", - "009484\n", - "020397\n", - "\n", - "\n", - "\n", - "009498\n", - "020454\n", - "\n", - "\n", - "\n", - "9400\n", - "009502\n", - "010158\n", - "\n", - "\n", - "\n", - "009529\n", - "020659\n", - "\n", - "\n", - "\n", - "009531\n", - "020682\n", - "\n", - "\n", - "\n", - "009532\n", - "020677\n", - "\n", - "\n", - "\n", - "009539\n", - "021441\n", - "\n", - "\n", - "\n", - "9450\n", - "009550\n", - "021487\n", - "\n", - "\n", - "\n", - "009552\n", - "021486\n", - "\n", - "\n", - "\n", - "009560\n", - "030104\n", - "\n", - "\n", - "\n", "9500\n", - "9550\n", - "9600\n", - "9650\n", - "9700\n", - "009835\n", - "021268\n", - "\n", - "\n", - "\n", - "9750\n", - "9800\n", - "009906\n", - "021373\n", - "\n", - "\n", - "\n", - "9850\n", - "9900\n", - "9950\n", "10000\n", - "10050\n", - "010168\n", - "020509\n", - "\n", - "\n", - "\n", - "010203\n", - "021442\n", - "\n", - "\n", - "\n", - "10100\n", - "010253\n", - "021590\n", - "\n", - "\n", - "\n", - "10150\n", - "010267\n", - "021623\n", - "\n", - "\n", - "\n", - "010268\n", - "021631\n", - "\n", - "\n", - "\n", - "010303\n", - "030102\n", - "\n", - "\n", - "\n", - "10200\n", - "10250\n", - "10300\n", - "10350\n", - "10400\n", - "010543\n", - "021108\n", - "\n", - "\n", - "\n", - "010544\n", - "021109\n", - "\n", - "\n", - "\n", - "010546\n", - "021119\n", - "\n", - "\n", - "\n", - "010550\n", - "021120\n", - "\n", - "\n", - "\n", - "010557\n", - "021134\n", - "\n", - "\n", - "\n", - "10450\n", "10500\n", - "010638\n", - "021997\n", - "\n", - "\n", - "\n", - "10550\n", - "10600\n", - "10650\n", - "010783\n", - "020813\n", - "\n", - "\n", - "\n", - "010785\n", - "020828\n", - "\n", - "\n", - "\n", - "010795\n", - "021378\n", - "\n", - "\n", - "\n", - "010797\n", - "021380\n", - "\n", - "\n", - "\n", - "10700\n", - "10750\n", - "10800\n", - "10850\n", - "010993\n", - "011417\n", - "\n", - "\n", - "\n", - "011008\n", - "011454\n", - "\n", - "\n", - "\n", - "011013\n", - "011460\n", - "\n", - "\n", - "\n", - "011020\n", - "011465\n", - "\n", - "\n", - "\n", - "10900\n", - "011051\n", - "011496\n", - "\n", - "\n", - "\n", - "011054\n", - "011498\n", - "\n", - "\n", - "\n", - "011056\n", - "011500\n", - "\n", - "\n", - "\n", - "011058\n", - "011544\n", - "\n", - "\n", - "\n", - "011059\n", - "011545\n", - "\n", - "\n", - "\n", - "011061\n", - "011506\n", - "\n", - "\n", - "\n", - "011063\n", - "011550\n", - "\n", - "\n", - "\n", - "011064\n", - "011509\n", - "\n", - "\n", - "\n", - "011065\n", - "011552\n", - "\n", - "\n", - "\n", - "10950\n", - "011112\n", - "030428\n", - "\n", - "\n", - "\n", - "011113\n", - "030429\n", - "\n", - "\n", - "\n", - "011114\n", - "030430\n", - "\n", - "\n", - "\n", - "011115\n", - "030431\n", - "\n", - "\n", - "\n", - "011116\n", - "030432\n", - "\n", - "\n", - "\n", - "011117\n", - "030433\n", - "\n", - "\n", - "\n", - "011118\n", - "030434\n", - "\n", - "\n", - "\n", - "011119\n", - "030435\n", - "\n", - "\n", - "\n", - "011120\n", - "030436\n", - "\n", - "\n", - "\n", - "011121\n", - "030437\n", - "\n", - "\n", - "\n", - "011122\n", - "030438\n", - "\n", - "\n", - "\n", - "011123\n", - "030439\n", - "\n", - "\n", - "\n", - "011124\n", - "030440\n", - "\n", - "\n", - "\n", - "011125\n", - "030441\n", - "031217\n", - "\n", - "\n", - "\n", - "011127\n", - "030443\n", - "\n", - "\n", - "\n", - "011128\n", - "030444\n", - "\n", - "\n", - "\n", - "011129\n", - "030445\n", - "\n", - "\n", - "\n", "11000\n", - "11050\n", - "11100\n", - "11150\n", - "11200\n", - "011384\n", - "014048\n", - "\n", - "\n", - "\n", - "11250\n", - "011440\n", - "031101\n", - "\n", - "\n", - "\n", - "11300\n", - "11350\n", - "011580\n", - "014008\n", - "\n", - "\n", - "\n", - "011607\n", - "014033\n", - "\n", - "\n", - "\n", - "11400\n", - "011655\n", - "013128\n", - "\n", - "\n", - "\n", - "011657\n", - "013365\n", - "\n", - "\n", - "\n", - "11450\n", - "011678\n", - "012815\n", - "\n", - "\n", - "\n", - "011690\n", - "013851\n", - "\n", - "\n", - "\n", - "011697\n", - "031119\n", - "\n", - "\n", - "\n", "11500\n", - "011750\n", - "020013\n", - "\n", - "\n", - "\n", - "011751\n", - "020014\n", - "\n", - "\n", - "\n", - "011757\n", - "020041\n", - "\n", - "\n", - "\n", - "011762\n", - "020043\n", - "\n", - "\n", - "\n", - "011771\n", - "020075\n", - "\n", - "\n", - "\n", - "11550\n", - "11600\n", - "11650\n", - "011895\n", - "020433\n", - "\n", - "\n", - "\n", - "011896\n", - "020434\n", - "\n", - "\n", - "\n", - "011910\n", - "020464\n", - "\n", - "\n", - "\n", - "011911\n", - "020465\n", - "\n", - "\n", - "\n", - "011912\n", - "020466\n", - "\n", - "\n", - "\n", - "11700\n", - "11750\n", - "012034\n", - "014511\n", - "\n", - "\n", - "\n", - "012037\n", - "012680\n", - "\n", - "\n", - "\n", - "11800\n", - "012086\n", - "031215\n", - "\n", - "\n", - "\n", - "012088\n", - "030214\n", - "\n", - "\n", - "\n", - "11850\n", - "012105\n", - "014585\n", - "\n", - "\n", - "\n", - "11900\n", - "012176\n", - "013908\n", - "\n", - "\n", - "\n", - "012193\n", - "013974\n", - "\n", - "\n", - "\n", - "11950\n", - "012226\n", - "014259\n", - "\n", - "\n", - "\n", - "012237\n", - "014213\n", - "\n", - "\n", - "\n", - "012255\n", - "014490\n", - "\n", - "\n", - "\n", "12000\n", - "012279\n", - "014145\n", - "\n", - "\n", - "\n", - "012294\n", - "014156\n", - "\n", - "\n", - "\n", - "012295\n", - "014199\n", - "\n", - "\n", - "\n", - "012299\n", - "014154\n", - "\n", - "\n", - "\n", - "012320\n", - "014197\n", - "\n", - "\n", - "\n", - "12050\n", - "012340\n", - "013832\n", - "\n", - "\n", - "\n", - "012363\n", - "013311\n", - "\n", - "\n", - "\n", - "12100\n", - "12150\n", - "012429\n", - "030640\n", - "\n", - "\n", - "\n", - "12200\n", - "012519\n", - "014509\n", - "\n", - "\n", - "\n", - "012522\n", - "014484\n", - "\n", - "\n", - "\n", - "12250\n", - "012526\n", - "014358\n", - "014455\n", - "\n", - "\n", - "\n", - "012542\n", - "014406\n", - "\n", - "\n", - "\n", - "012556\n", - "014407\n", - "\n", - "\n", - "\n", - "12300\n", - "012581\n", - "014452\n", - "\n", - "\n", - "\n", - "012595\n", - "014260\n", - "\n", - "\n", - "\n", - "012617\n", - "014409\n", - "\n", - "\n", - "\n", - "12350\n", - "012637\n", - "014188\n", - "\n", - "\n", - "\n", - "012641\n", - "014539\n", - "\n", - "\n", - "\n", - "012647\n", - "014370\n", - "\n", - "\n", - "\n", - "12400\n", - "012677\n", - "014175\n", - "\n", - "\n", - "\n", - "012690\n", - "014411\n", - "\n", - "\n", - "\n", - "012694\n", - "014243\n", - "\n", - "\n", - "\n", - "012719\n", - "030604\n", - "\n", - "\n", - "\n", - "12450\n", - "012742\n", - "014371\n", - "\n", - "\n", - "\n", "12500\n", - "12550\n", - "12600\n", - "12650\n", - "12700\n", - "013016\n", - "040094\n", - "\n", - "\n", - "\n", - "12750\n", - "12800\n", - "013114\n", - "013138\n", - "\n", - "\n", - "\n", - "12850\n", - "013184\n", - "014023\n", - "\n", - "\n", - "\n", - "12900\n", - "12950\n", - "013268\n", - "021347\n", - "040003\n", - "\n", - "\n", - "\n", - "013270\n", - "040150\n", - "\n", - "\n", - "\n", - "013279\n", - "021350\n", - "040005\n", - "\n", - "\n", - "\n", - "013280\n", - "040006\n", - "\n", - "\n", - "\n", "13000\n", - "013319\n", - "013457\n", - "\n", - "\n", - "\n", - "13050\n", - "13100\n", - "13150\n", - "013463\n", - "013567\n", - "\n", - "\n", - "\n", - "013466\n", - "021440\n", - "\n", - "\n", - "\n", - "013474\n", - "013909\n", - "\n", - "\n", - "\n", - "13200\n", - "13250\n", - "13300\n", - "013647\n", - "014597\n", - "\n", - "\n", - "\n", - "13350\n", - "13400\n", - "13450\n", "13500\n", - "13550\n", - "13600\n", - "13650\n", - "013992\n", - "014485\n", - "\n", - "\n", - "\n", - "014001\n", - "014493\n", - "\n", - "\n", - "\n", - "13700\n", - "13750\n", - "014099\n", - "030981\n", - "\n", - "\n", - "\n", - "13800\n", - "13850\n", - "13900\n", - "13950\n", - "014308\n", - "014309\n", - "\n", - "\n", - "\n", "14000\n", - "014377\n", - "030941\n", - "\n", - "\n", - "\n", - "14050\n", - "14100\n", - "014475\n", - "031103\n", - "\n", - "\n", - "\n", - "14150\n", - "014510\n", - "031129\n", - "\n", - "\n", - "\n", - "014538\n", - "030904\n", - "\n", - "\n", - "\n", - "14200\n", - "014548\n", - "030901\n", - "\n", - "\n", - "\n", - "14250\n", - "14300\n", - "14350\n", - "020098\n", - "020228\n", - "\n", - "\n", - "\n", - "020099\n", - "020229\n", - "\n", - "\n", - "\n", - "020100\n", - "020230\n", - "\n", - "\n", - "\n", - "020101\n", - "020231\n", - "\n", - "\n", - "\n", - "020102\n", - "020232\n", - "\n", - "\n", - "\n", - "020103\n", - "020233\n", - "\n", - "\n", - "\n", - "020104\n", - "020234\n", - "\n", - "\n", - "\n", - "020105\n", - "020235\n", - "\n", - "\n", - "\n", - "020106\n", - "020236\n", - "\n", - "\n", - "\n", - "020107\n", - "020237\n", - "\n", - "\n", - "\n", - "020108\n", - "020238\n", - "\n", - "\n", - "\n", - "020110\n", - "020240\n", - "\n", - "\n", - "\n", - "020112\n", - "020242\n", - "\n", - "\n", - "\n", - "020113\n", - "020243\n", - "\n", - "\n", - "\n", - "020114\n", - "020244\n", - "\n", - "\n", - "\n", - "020115\n", - "020245\n", - "\n", - "\n", - "\n", - "020116\n", - "020246\n", - "\n", - "\n", - "\n", - "020117\n", - "020247\n", - "\n", - "\n", - "\n", - "020123\n", - "020251\n", - "\n", - "\n", - "\n", - "020127\n", - "020255\n", - "\n", - "\n", - "\n", - "020129\n", - "020257\n", - "\n", - "\n", - "\n", - "020130\n", - "020258\n", - "\n", - "\n", - "\n", - "14400\n", - "020136\n", - "020262\n", - "\n", - "\n", - "\n", - "020137\n", - "020263\n", - "\n", - "\n", - "\n", - "020138\n", - "020264\n", - "\n", - "\n", - "\n", - "020139\n", - "020265\n", - "\n", - "\n", - "\n", - "020140\n", - "020266\n", - "\n", - "\n", - "\n", - "020141\n", - "020267\n", - "\n", - "\n", - "\n", - "020142\n", - "020268\n", - "\n", - "\n", - "\n", - "020143\n", - "020269\n", - "\n", - "\n", - "\n", - "020144\n", - "020270\n", - "\n", - "\n", - "\n", - "020145\n", - "020271\n", - "\n", - "\n", - "\n", - "020147\n", - "020273\n", - "\n", - "\n", - "\n", - "020150\n", - "020276\n", - "\n", - "\n", - "\n", - "020151\n", - "020277\n", - "\n", - "\n", - "\n", - "020157\n", - "020283\n", - "\n", - "\n", - "\n", - "020159\n", - "020285\n", - "\n", - "\n", - "\n", - "020160\n", - "020286\n", - "\n", - "\n", - "\n", - "020161\n", - "020287\n", - "\n", - "\n", - "\n", - "020163\n", - "020289\n", - "\n", - "\n", - "\n", - "020166\n", - "020292\n", - "\n", - "\n", - "\n", - "020167\n", - "020293\n", - "\n", - "\n", - "\n", - "020168\n", - "020294\n", - "\n", - "\n", - "\n", - "020170\n", - "020296\n", - "\n", - "\n", - "\n", - "020171\n", - "020297\n", - "\n", - "\n", - "\n", - "020176\n", - "020302\n", - "\n", - "\n", - "\n", - "020177\n", - "020303\n", - "\n", - "\n", - "\n", - "020181\n", - "020307\n", - "\n", - "\n", - "\n", - "020182\n", - "020308\n", - "\n", - "\n", - "\n", - "020183\n", - "020309\n", - "\n", - "\n", - "\n", - "020185\n", - "020311\n", - "\n", - "\n", - "\n", - "020190\n", - "020317\n", - "\n", - "\n", - "\n", - "020191\n", - "020318\n", - "\n", - "\n", - "\n", - "020192\n", - "020319\n", - "\n", - "\n", - "\n", - "14450\n", - "020197\n", - "020324\n", - "\n", - "\n", - "\n", - "020199\n", - "020326\n", - "\n", - "\n", - "\n", - "020200\n", - "020327\n", - "\n", - "\n", - "\n", - "020202\n", - "020329\n", - "\n", - "\n", - "\n", - "020203\n", - "020330\n", - "\n", - "\n", - "\n", - "020207\n", - "020333\n", - "\n", - "\n", - "\n", - "020208\n", - "020334\n", - "\n", - "\n", - "\n", - "020210\n", - "020336\n", - "\n", - "\n", - "\n", - "020211\n", - "020337\n", - "\n", - "\n", - "\n", - "020212\n", - "020338\n", - "\n", - "\n", - "\n", - "020213\n", - "020339\n", - "\n", - "\n", - "\n", - "020214\n", - "020340\n", - "\n", - "\n", - "\n", - "020215\n", - "020341\n", - "\n", - "\n", - "\n", - "020218\n", - "020344\n", - "\n", - "\n", - "\n", - "020226\n", - "020351\n", - "\n", - "\n", - "\n", "14500\n", - "14550\n", - "020430\n", - "020435\n", - "\n", - "\n", - "\n", - "14600\n", - "020459\n", - "020467\n", - "\n", - "\n", - "\n", - "020460\n", - "020468\n", - "\n", - "\n", - "\n", - "14650\n", - "020549\n", - "020589\n", - "\n", - "\n", - "\n", - "020550\n", - "020595\n", - "\n", - "\n", - "\n", - "14700\n", - "020577\n", - "020600\n", - "\n", - "\n", - "\n", - "14750\n", - "14800\n", - "14850\n", - "14900\n", - "14950\n", "15000\n", - "15050\n", - "15100\n", - "15150\n", - "15200\n", - "15250\n", - "15300\n", - "15350\n", - "021388\n", - "022026\n", - "\n", - "\n", - "\n", - "021390\n", - "022025\n", - "\n", - "\n", - "\n", - "15400\n", - "15450\n", "15500\n", - "15550\n", - "021624\n", - "021625\n", - "\n", - "\n", - "\n", - "15600\n", - "15650\n", - "15700\n", - "15750\n", - "15800\n", - "15850\n", - "15900\n", - "15950\n", - "030007\n", - "030711\n", - "\n", - "\n", - "\n", "16000\n", - "16050\n", - "16100\n", - "16150\n", - "16200\n", - "16250\n", - "16300\n", - "16350\n", - "16400\n", - "030514\n", - "040016\n", - "\n", - "\n", - "\n", - "16450\n", - "030530\n", - "031187\n", - "\n", - "\n", - "\n", "16500\n", - "16550\n", - "16600\n", - "16650\n", - "16700\n", - "16750\n", - "16800\n", - "16850\n", - "16900\n", - "16950\n", "17000\n", - "031130\n", - "040017\n", - "\n", - "\n", - "\n", - "17050\n", - "17100\n", - "17150\n", - "040009\n", - "040146\n", - "\n", - "\n", - "\n", - "17200\n", - "17250\n", - "17300\n", - "17350\n", - "耗时: 302.149秒\n" - ] - }, - { - "ename": "FileNotFoundError", - "evalue": "[Errno 2] No such file or directory: '../临时文件/相同题目列表.txt'", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mFileNotFoundError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32md:\\mathdeptv2\\工具\\相同题目检测.ipynb 单元格 1\u001b[0m in \u001b[0;36m1\n\u001b[0;32m 98\u001b[0m endtime \u001b[39m=\u001b[39m time\u001b[39m.\u001b[39mtime()\n\u001b[0;32m 99\u001b[0m \u001b[39mprint\u001b[39m(\u001b[39m\"\u001b[39m\u001b[39m耗时: \u001b[39m\u001b[39m%.3f\u001b[39;00m\u001b[39m秒\u001b[39m\u001b[39m\"\u001b[39m \u001b[39m%\u001b[39m(endtime\u001b[39m-\u001b[39mstarttime))\n\u001b[1;32m--> 101\u001b[0m \u001b[39mwith\u001b[39;00m \u001b[39mopen\u001b[39;49m(outputfile,\u001b[39m\"\u001b[39;49m\u001b[39mw\u001b[39;49m\u001b[39m\"\u001b[39;49m,encoding \u001b[39m=\u001b[39;49m \u001b[39m\"\u001b[39;49m\u001b[39mu8\u001b[39;49m\u001b[39m\"\u001b[39;49m) \u001b[39mas\u001b[39;00m f:\n\u001b[0;32m 102\u001b[0m f\u001b[39m.\u001b[39mwrite(alike_problems)\n", - "File \u001b[1;32mc:\\ProgramData\\Anaconda3\\envs\\mathdept\\lib\\site-packages\\IPython\\core\\interactiveshell.py:282\u001b[0m, in \u001b[0;36m_modified_open\u001b[1;34m(file, *args, **kwargs)\u001b[0m\n\u001b[0;32m 275\u001b[0m \u001b[39mif\u001b[39;00m file \u001b[39min\u001b[39;00m {\u001b[39m0\u001b[39m, \u001b[39m1\u001b[39m, \u001b[39m2\u001b[39m}:\n\u001b[0;32m 276\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mValueError\u001b[39;00m(\n\u001b[0;32m 277\u001b[0m \u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mIPython won\u001b[39m\u001b[39m'\u001b[39m\u001b[39mt let you open fd=\u001b[39m\u001b[39m{\u001b[39;00mfile\u001b[39m}\u001b[39;00m\u001b[39m by default \u001b[39m\u001b[39m\"\u001b[39m\n\u001b[0;32m 278\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mas it is likely to crash IPython. If you know what you are doing, \u001b[39m\u001b[39m\"\u001b[39m\n\u001b[0;32m 279\u001b[0m \u001b[39m\"\u001b[39m\u001b[39myou can use builtins\u001b[39m\u001b[39m'\u001b[39m\u001b[39m open.\u001b[39m\u001b[39m\"\u001b[39m\n\u001b[0;32m 280\u001b[0m )\n\u001b[1;32m--> 282\u001b[0m \u001b[39mreturn\u001b[39;00m io_open(file, \u001b[39m*\u001b[39margs, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs)\n", - "\u001b[1;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '../临时文件/相同题目列表.txt'" + "17500\n", + "18000\n", + "耗时: 448.506秒\n" ] } ], @@ -4241,7 +56,7 @@ "# 相同题目的阈值\n", "threshold = 0.99\n", "\n", - "outputfile = r\"../临时文件/相同题目列表.txt\"\n", + "outputfile = r\"临时文件/相同题目列表.txt\"\n", "\n", "#生成数码列表, 逗号分隔每个区块, 区块内部用:表示整数闭区间\n", "def generate_number_set(string):\n", @@ -4313,25 +128,25 @@ "keys = list(pro_dict_treated.keys())\n", "while len(keys) >= 2:\n", " count += 1\n", - " if count % 50 == 0:\n", + " if count % 500 == 0:\n", " print(count)\n", " \n", " currentid = keys.pop(0)\n", " content1 = pro_dict_treated[currentid][\"content\"]\n", " same = []\n", " for id in keys:\n", - " content2 = pro_dict_treated[id][\"content\"]\n", - " if sim_test(content1,content2)>threshold:\n", - " same.append(id)\n", + " if not id in pro_dict[currentid][\"same\"] and not id in pro_dict[currentid][\"related\"]:\n", + " content2 = pro_dict_treated[id][\"content\"]\n", + " if sim_test(content1,content2)>threshold:\n", + " same.append(id)\n", " if len(same) >= 1:\n", - " print(currentid)\n", + " # print(currentid)\n", " alike_problems += currentid + \",\"\n", " for i in same:\n", - " print(i)\n", + " # print(i)\n", " keys.pop(keys.index(i))\n", " alike_problems += \",\".join(same)\n", - " alike_problems += \"\\n\"\n", - " print(\"\\n\\n\")\n", + " alike_problems += \"\\n\\n\"\n", "\n", "endtime = time.time()\n", "print(\"耗时: %.3f秒\" %(endtime-starttime))\n", @@ -4364,7 +179,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.15" + "version": "3.8.15" }, "orig_nbformat": 4 }, diff --git a/工具/识别题库中尚未标注的题目类型.ipynb b/工具/识别题库中尚未标注的题目类型.ipynb index 72671524..dc08b38c 100644 --- a/工具/识别题库中尚未标注的题目类型.ipynb +++ b/工具/识别题库中尚未标注的题目类型.ipynb @@ -2,22 +2,14 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "040387 填空题\n", - "040388 填空题\n", - "040389 填空题\n", - "040390 填空题\n", - "040391 填空题\n", - "040392 填空题\n", - "040393 填空题\n", - "040394 填空题\n", - "040395 解答题\n" + "均已确定题目类型\n" ] } ], @@ -29,9 +21,11 @@ " database = f.read()\n", "pro_dict = json.loads(database)\n", "\n", + "count = 0\n", "#根据特征字符识别题目类型\n", "for p in pro_dict:\n", " if pro_dict[p][\"genre\"] == \"\":\n", + " count += 1\n", " if \"bracket\" in pro_dict[p][\"content\"]:\n", " pro_dict[p][\"genre\"] = \"选择题\"\n", " print(p,\"选择题\")\n", @@ -46,7 +40,11 @@ "#将修改结果写入json数据库\n", "database = json.dumps(pro_dict,indent = 4, ensure_ascii= False)\n", "with open(r\"../题库0.3/Problems.json\",\"w\",encoding = \"utf8\") as f:\n", - " f.write(database)" + " f.write(database)\n", + "if count > 0:\n", + " print(\"为 %d 道题目确定类型\" %count)\n", + "else:\n", + " print(\"均已确定题目类型\")" ] }, { diff --git a/工具/识别题目类型.py b/工具/识别题目类型.py new file mode 100644 index 00000000..ecdb7b67 --- /dev/null +++ b/工具/识别题目类型.py @@ -0,0 +1,31 @@ +import os,re,json + +# 读取数据库并转成题目字典 +with open(r"../题库0.3/Problems.json","r",encoding = "utf8") as f: + database = f.read() +pro_dict = json.loads(database) + +count = 0 +#根据特征字符识别题目类型 +for p in pro_dict: + if pro_dict[p]["genre"] == "": + count += 1 + if "bracket" in pro_dict[p]["content"]: + pro_dict[p]["genre"] = "选择题" + print(p,"选择题") + elif "blank" in pro_dict[p]["content"]: + pro_dict[p]["genre"] = "填空题" + print(p,"填空题") + else: + pro_dict[p]["genre"] = "解答题" + pro_dict[p]["space"] = "12ex" + print(p,"解答题") + +#将修改结果写入json数据库 +database = json.dumps(pro_dict,indent = 4, ensure_ascii= False) +with open(r"../题库0.3/Problems.json","w",encoding = "utf8") as f: + f.write(database) +if count > 0: + print("为 %d 道题目确定类型" %count) +else: + print("均已确定题目类型") \ No newline at end of file diff --git a/工具/课时目标pdf生成.py b/工具/课时目标pdf生成.py new file mode 100644 index 00000000..8c7a3d98 --- /dev/null +++ b/工具/课时目标pdf生成.py @@ -0,0 +1,66 @@ +import os,re,json,sys + +#范围定义在使用前需要替换 +"""使用前替换范围定义""" +obj_range = "K0810:K0817999" +"""范围定义到此结束""" +#定义文件名 +"""规定文件名""" +index = "38" +title = "计数原理与排列组合" +"""文件名到此结束""" + +filename = index+"_"+title +outputfile = r"临时文件/"+filename+".tex" + +template_file = r"模板文件/复习课目标模板.tex" + + +# 检查某一字符串是否在由,:的表达式给出的范围内 +def within_range(string,list): + flag = False + for item in list: + if string == item.strip(): + flag = True + break + elif ":" in item: + start, end = item.split(":") + if start <= string <= end: + flag = True + break + return flag + +# 读取课时目标数据库 +with open(r"../题库0.3/LessonObj.json","r",encoding = "utf8") as f: + database = f.read() +obj_dict = json.loads(database) + +# 根据范围生成若干用于检查的闭区间范围 +obj_range_list = obj_range.split(",") +output_string = "" + +# 逐一选择目标, 并整合成表格的内容部分 +for obj_id in obj_dict: + if within_range(obj_id,obj_range_list): + output_string += obj_id + " & " + obj_dict[obj_id]["content"] + " & " + r"\\ \hline" + "\n" + +# 打开模板文件 +with open(template_file,"r",encoding="utf8") as f: + latex_raw = f.read() + +#识别操作系统 +if sys.platform != "win32": + latex_raw = re.sub(r"fontset[\s]*=[\s]*none","fontset = fandol",latex_raw) + latex_raw = re.sub(r"\\setCJKmainfont",r"% \\setCJKmainfont",latex_raw) + +#预处理 +exec_list = [("编号待替换",index),("标题待替换",title),("内容待替换",output_string)] +for command in exec_list: + latex_raw = latex_raw.replace(command[0],command[1]) + +#输出到临时文件夹 +with open(outputfile,"w",encoding = "utf8") as f: + f.write(latex_raw) +print("开始编译目标pdf文件: ", outputfile) +os.system("xelatex -interaction=batchmode -output-directory=" + "临时文件" + " "+ outputfile) +print(os.system("xelatex -interaction=batchmode -output-directory=" + "临时文件" + " "+ outputfile)) \ No newline at end of file diff --git a/文本处理工具/剪贴板表格整理.ipynb b/文本处理工具/剪贴板表格整理.ipynb new file mode 100644 index 00000000..a286b9bd --- /dev/null +++ b/文本处理工具/剪贴板表格整理.ipynb @@ -0,0 +1,116 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os,re\n", + "import win32clipboard as wc\n", + "import win32con\n", + "\n", + "# 获取剪切板内容\n", + "def getCopy():\n", + " wc.OpenClipboard()\n", + " t = wc.GetClipboardData(win32con.CF_UNICODETEXT)\n", + " wc.CloseClipboard()\n", + " return t\n", + "\n", + "# 写入剪切板内容\n", + "def setCopy(str):\n", + " wc.OpenClipboard()\n", + " wc.EmptyClipboard()\n", + " wc.SetClipboardData(win32con.CF_UNICODETEXT, str)\n", + " wc.CloseClipboard()\n", + "\n", + "def dollared(string):\n", + " flag = True\n", + " for c in string:\n", + " if not c in \"1234567890.+-:[]()\":\n", + " flag = False\n", + " break\n", + " if flag:\n", + " string = \"$\" + string + \"$\"\n", + " return string\n", + "\n", + "\n", + "\n", + "data = getCopy()\n", + "\n", + "data1 = \"\"\n", + "for c in data:\n", + " if 65296 <= ord(c) < 65306:\n", + " data1 += str(ord(c)-65296)\n", + " else:\n", + " data1 += c\n", + "data = data1\n", + "data = data.replace(\".\",\".\").replace(\":\",\":\")\n", + "elements = data.split(\"\\n\")\n", + "elements_per_line = int(elements.pop(-1)) #这里需要修改\n", + "contents = \"\\\\begin{center}\\n\\\\begin{tabular}{|\"\n", + "for i in range(elements_per_line):\n", + " contents += \"c|\"\n", + "contents += \"}\\n\"\n", + "contents += r\"\\hline\"+\"\\n\"\n", + "col = 1\n", + "for element in elements:\n", + " if col != 1:\n", + " contents += \" & \"\n", + " contents += dollared(element)\n", + " if col == elements_per_line:\n", + " contents += r\" \\\\ \\hline\"+\"\\n\"\n", + " col += 1\n", + " if col > elements_per_line:\n", + " col = 1\n", + "contents += \"\\\\end{tabular}\" + \"\\n\" + \"\\\\end{center}\"\n", + "\n", + "with open(\"临时文件/tablefile.txt\",\"w\",encoding = \"utf8\") as f:\n", + " f.write(contents)\n", + "\n", + "setCopy(contents)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "pythontest", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.15" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "91219a98e0e9be72efb992f647fe78b593124968b75db0b865552d6787c8db93" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/题库0.3/Problems.json b/题库0.3/Problems.json index 9be26df2..b97b83a3 100644 --- a/题库0.3/Problems.json +++ b/题库0.3/Problems.json @@ -2500,7 +2500,8 @@ "20220624\t王伟叶, 余利成" ], "same": [ - "008380" + "008380", + "031239" ], "related": [], "remark": "", @@ -13841,7 +13842,9 @@ "20220624\t朱敏慧, 王伟叶" ], "same": [], - "related": [], + "related": [ + "030610" + ], "remark": "", "space": "" }, @@ -14948,7 +14951,19 @@ "solution": "", "duration": -1, "usages": [ - "20220228\t2022届高三01班\t0.929" + "20220228\t2022届高三01班\t0.929", + "20230331\t2023届高三10班\t0.865", + "20230331\t2023届高三11班\t0.826", + "20230331\t2023届高三12班\t0.913", + "20230331\t2023届高三01班\t0.893", + "20230331\t2023届高三02班\t0.862", + "20230331\t2023届高三03班\t0.871", + "20230331\t2023届高三04班\t0.857", + "20230331\t2023届高三05班\t0.974", + "20230331\t2023届高三06班\t0.756", + "20230331\t2023届高三07班\t0.939", + "20230331\t2023届高三08班\t0.871", + "20230331\t2023届高三09班\t0.935" ], "origin": "赋能练习", "edit": [ @@ -14974,7 +14989,19 @@ "solution": "", "duration": -1, "usages": [ - "20220228\t2022届高三01班\t0.952" + "20220228\t2022届高三01班\t0.952", + "20230331\t2023届高三10班\t0.946", + "20230331\t2023届高三11班\t0.913", + "20230331\t2023届高三12班\t0.957", + "20230331\t2023届高三01班\t0.964", + "20230331\t2023届高三02班\t0.862", + "20230331\t2023届高三03班\t0.774", + "20230331\t2023届高三04班\t0.929", + "20230331\t2023届高三05班\t0.868", + "20230331\t2023届高三06班\t0.927", + "20230331\t2023届高三07班\t1.000", + "20230331\t2023届高三08班\t0.839", + "20230331\t2023届高三09班\t0.806" ], "origin": "赋能练习", "edit": [ @@ -14999,7 +15026,19 @@ "solution": "", "duration": -1, "usages": [ - "20220228\t2022届高三01班\t0.905" + "20220228\t2022届高三01班\t0.905", + "20230331\t2023届高三10班\t0.865", + "20230331\t2023届高三11班\t0.783", + "20230331\t2023届高三12班\t0.957", + "20230331\t2023届高三01班\t1.000", + "20230331\t2023届高三02班\t0.931", + "20230331\t2023届高三03班\t0.903", + "20230331\t2023届高三04班\t0.893", + "20230331\t2023届高三05班\t0.842", + "20230331\t2023届高三06班\t0.976", + "20230331\t2023届高三07班\t0.909", + "20230331\t2023届高三08班\t0.871", + "20230331\t2023届高三09班\t0.968" ], "origin": "赋能练习", "edit": [ @@ -15051,7 +15090,19 @@ "solution": "", "duration": -1, "usages": [ - "20220228\t2022届高三01班\t0.929" + "20220228\t2022届高三01班\t0.929", + "20230331\t2023届高三10班\t0.973", + "20230331\t2023届高三11班\t0.652", + "20230331\t2023届高三12班\t0.957", + "20230331\t2023届高三01班\t0.929", + "20230331\t2023届高三02班\t0.897", + "20230331\t2023届高三03班\t0.742", + "20230331\t2023届高三04班\t0.750", + "20230331\t2023届高三05班\t0.868", + "20230331\t2023届高三06班\t0.976", + "20230331\t2023届高三07班\t0.939", + "20230331\t2023届高三08班\t0.774", + "20230331\t2023届高三09班\t0.742" ], "origin": "赋能练习", "edit": [ @@ -15092,7 +15143,19 @@ "20221202\t2023届高三06班\t0.944", "20221202\t2023届高三07班\t0.800", "20221202\t2023届高三08班\t0.857", - "20221202\t2023届高三09班\t0.731" + "20221202\t2023届高三09班\t0.731", + "20230331\t2023届高三10班\t0.568", + "20230331\t2023届高三11班\t0.696", + "20230331\t2023届高三12班\t0.826", + "20230331\t2023届高三01班\t0.714", + "20230331\t2023届高三02班\t0.724", + "20230331\t2023届高三03班\t0.613", + "20230331\t2023届高三04班\t0.571", + "20230331\t2023届高三05班\t0.737", + "20230331\t2023届高三06班\t0.878", + "20230331\t2023届高三07班\t0.667", + "20230331\t2023届高三08班\t0.452", + "20230331\t2023届高三09班\t0.548" ], "origin": "赋能练习", "edit": [ @@ -15122,7 +15185,19 @@ "solution": "", "duration": -1, "usages": [ - "20220228\t2022届高三01班\t0.952" + "20220228\t2022届高三01班\t0.952", + "20230331\t2023届高三10班\t0.865", + "20230331\t2023届高三11班\t0.913", + "20230331\t2023届高三12班\t1.000", + "20230331\t2023届高三01班\t0.821", + "20230331\t2023届高三02班\t0.862", + "20230331\t2023届高三03班\t0.871", + "20230331\t2023届高三04班\t1.000", + "20230331\t2023届高三05班\t0.921", + "20230331\t2023届高三06班\t0.854", + "20230331\t2023届高三07班\t0.970", + "20230331\t2023届高三08班\t0.871", + "20230331\t2023届高三09班\t0.935" ], "origin": "赋能练习", "edit": [ @@ -15146,7 +15221,19 @@ "solution": "", "duration": -1, "usages": [ - "20220228\t2022届高三01班\t0.929" + "20220228\t2022届高三01班\t0.929", + "20230331\t2023届高三10班\t0.838", + "20230331\t2023届高三11班\t0.826", + "20230331\t2023届高三12班\t0.870", + "20230331\t2023届高三01班\t0.964", + "20230331\t2023届高三02班\t0.897", + "20230331\t2023届高三03班\t0.903", + "20230331\t2023届高三04班\t0.893", + "20230331\t2023届高三05班\t0.868", + "20230331\t2023届高三06班\t0.902", + "20230331\t2023届高三07班\t0.879", + "20230331\t2023届高三08班\t0.903", + "20230331\t2023届高三09班\t0.806" ], "origin": "赋能练习", "edit": [ @@ -15172,7 +15259,19 @@ "duration": -1, "usages": [ "20220228\t2022届高三01班\t0.619", - "20220622\t2022届高三01班\t0.954" + "20220622\t2022届高三01班\t0.954", + "20230331\t2023届高三10班\t0.513", + "20230331\t2023届高三11班\t0.217", + "20230331\t2023届高三12班\t0.826", + "20230331\t2023届高三01班\t0.714", + "20230331\t2023届高三02班\t0.828", + "20230331\t2023届高三03班\t0.387", + "20230331\t2023届高三04班\t0.607", + "20230331\t2023届高三05班\t0.658", + "20230331\t2023届高三06班\t0.561", + "20230331\t2023届高三07班\t0.636", + "20230331\t2023届高三08班\t0.419", + "20230331\t2023届高三09班\t0.387" ], "origin": "赋能练习", "edit": [ @@ -15198,7 +15297,19 @@ "duration": -1, "usages": [ "20220228\t2022届高三01班\t0.381", - "20220622\t2022届高三01班\t0.744" + "20220622\t2022届高三01班\t0.744", + "20230331\t2023届高三10班\t0.027", + "20230331\t2023届高三11班\t0.043", + "20230331\t2023届高三12班\t0.174", + "20230331\t2023届高三01班\t0.321", + "20230331\t2023届高三02班\t0.414", + "20230331\t2023届高三03班\t0.323", + "20230331\t2023届高三04班\t0.214", + "20230331\t2023届高三05班\t0.789", + "20230331\t2023届高三06班\t0.171", + "20230331\t2023届高三07班\t0.273", + "20230331\t2023届高三08班\t0.097", + "20230331\t2023届高三09班\t0.065" ], "origin": "赋能练习", "edit": [ @@ -19762,7 +19873,8 @@ "20220624\t朱敏慧, 王伟叶" ], "same": [ - "004066" + "004066", + "040359" ], "related": [], "remark": "", @@ -24825,7 +24937,9 @@ "edit": [ "20220624\t朱敏慧, 王伟叶" ], - "same": [], + "same": [ + "040465" + ], "related": [], "remark": "", "space": "" @@ -24922,7 +25036,9 @@ "edit": [ "20220624\t朱敏慧, 王伟叶" ], - "same": [], + "same": [ + "040467" + ], "related": [], "remark": "", "space": "" @@ -24948,7 +25064,9 @@ "edit": [ "20220624\t朱敏慧, 王伟叶" ], - "same": [], + "same": [ + "040468" + ], "related": [], "remark": "", "space": "" @@ -24974,7 +25092,9 @@ "edit": [ "20220624\t朱敏慧, 王伟叶" ], - "same": [], + "same": [ + "040469" + ], "related": [], "remark": "", "space": "" @@ -40287,7 +40407,9 @@ "edit": [ "20220625\t王伟叶" ], - "same": [], + "same": [ + "040188" + ], "related": [], "remark": "", "space": "12ex" @@ -84045,7 +84167,9 @@ "edit": [ "20220701\t王伟叶" ], - "same": [], + "same": [ + "040136" + ], "related": [], "remark": "", "space": "" @@ -109183,7 +109307,8 @@ "20220705\t王伟叶" ], "same": [ - "000673" + "000673", + "040359" ], "related": [], "remark": "", @@ -113088,7 +113213,9 @@ "edit": [ "20220705\t王伟叶" ], - "same": [], + "same": [ + "040478" + ], "related": [], "remark": "", "space": "" @@ -125998,7 +126125,9 @@ "edit": [ "20220710\t王伟叶" ], - "same": [], + "same": [ + "040056" + ], "related": [], "remark": "", "space": "12ex" @@ -161168,7 +161297,9 @@ "edit": [ "20220720\t王伟叶" ], - "same": [], + "same": [ + "040101" + ], "related": [], "remark": "", "space": "12ex" @@ -209711,7 +209842,9 @@ "edit": [ "20220726\t王伟叶" ], - "same": [], + "same": [ + "040108" + ], "related": [ "000099" ], @@ -209817,7 +209950,9 @@ "edit": [ "20220726\t王伟叶" ], - "same": [], + "same": [ + "040110" + ], "related": [ "000103" ], @@ -212255,7 +212390,9 @@ "edit": [ "20220726\t王伟叶" ], - "same": [], + "same": [ + "040416" + ], "related": [ "004682", "008250", @@ -313003,7 +313140,9 @@ "edit": [ "20221215\t王伟叶" ], - "same": [], + "same": [ + "040449" + ], "related": [], "remark": "", "space": "" @@ -313277,7 +313416,9 @@ "edit": [ "20221215\t王伟叶" ], - "same": [], + "same": [ + "040357" + ], "related": [], "remark": "", "space": "" @@ -323729,7 +323870,9 @@ "edit": [ "20230118\t王伟叶" ], - "same": [], + "same": [ + "040094" + ], "related": [], "remark": "", "space": "" @@ -329052,7 +329195,18 @@ "ans": "$50$", "solution": "", "duration": -1, - "usages": [], + "usages": [ + "20230331\t2023届高三10班\t1.000", + "20230331\t2023届高三11班\t1.000", + "20230331\t2023届高三12班\t1.000", + "20230331\t2023届高三02班\t0.964", + "20230331\t2023届高三03班\t0.913", + "20230331\t2023届高三04班\t0.875", + "20230331\t2023届高三05班\t0.973", + "20230331\t2023届高三06班\t0.846", + "20230331\t2023届高三07班\t0.926", + "20230331\t2023届高三09班\t1.000" + ], "origin": "2022届高三第二轮复习讲义", "edit": [ "20230118\t王伟叶" @@ -329514,7 +329668,18 @@ "ans": "\\textcircled{3}", "solution": "", "duration": -1, - "usages": [], + "usages": [ + "20230331\t2023届高三10班\t1.000", + "20230331\t2023届高三11班\t0.800", + "20230331\t2023届高三12班\t0.842", + "20230331\t2023届高三02班\t0.893", + "20230331\t2023届高三03班\t1.000", + "20230331\t2023届高三04班\t0.938", + "20230331\t2023届高三05班\t0.865", + "20230331\t2023届高三06班\t0.974", + "20230331\t2023届高三07班\t0.889", + "20230331\t2023届高三09班\t0.842" + ], "origin": "2022届高三第二轮复习讲义", "edit": [ "20230118\t王伟叶" @@ -329567,7 +329732,18 @@ "ans": "$8$或$10$或$11$", "solution": "", "duration": -1, - "usages": [], + "usages": [ + "20230331\t2023届高三10班\t0.000", + "20230331\t2023届高三11班\t0.350", + "20230331\t2023届高三12班\t0.105", + "20230331\t2023届高三02班\t0.071", + "20230331\t2023届高三03班\t0.391", + "20230331\t2023届高三04班\t0.000", + "20230331\t2023届高三05班\t0.135", + "20230331\t2023届高三06班\t0.179", + "20230331\t2023届高三07班\t0.037", + "20230331\t2023届高三09班\t0.053" + ], "origin": "2022届高三第二轮复习讲义", "edit": [ "20230118\t王伟叶" @@ -330225,7 +330401,9 @@ "edit": [ "20230118\t王伟叶" ], - "same": [], + "same": [ + "040003" + ], "related": [], "remark": "", "space": "" @@ -330267,7 +330445,9 @@ "edit": [ "20230118\t王伟叶" ], - "same": [], + "same": [ + "040150" + ], "related": [], "remark": "", "space": "" @@ -330456,7 +330636,9 @@ "edit": [ "20230118\t王伟叶" ], - "same": [], + "same": [ + "040005" + ], "related": [], "remark": "", "space": "" @@ -330477,7 +330659,9 @@ "edit": [ "20230118\t王伟叶" ], - "same": [], + "same": [ + "040006" + ], "related": [], "remark": "", "space": "" @@ -339787,7 +339971,9 @@ "edit": [ "20230128\t王伟叶" ], - "same": [], + "same": [ + "040290" + ], "related": [], "remark": "", "space": "12ex" @@ -348598,7 +348784,18 @@ "ans": "(1) $400$; (2) $4$; (3) $0.7$", "solution": "", "duration": -1, - "usages": [], + "usages": [ + "20230331\t2023届高三10班\t1.000\t1.000\t1.000", + "20230331\t2023届高三11班\t0.950\t0.750\t0.850", + "20230331\t2023届高三12班\t1.000\t0.789\t0.895", + "20230331\t2023届高三02班\t1.000\t0.929\t0.821", + "20230331\t2023届高三03班\t0.913\t1.000\t0.957", + "20230331\t2023届高三04班\t1.000\t0.812\t0.812", + "20230331\t2023届高三05班\t0.946\t0.838\t0.946", + "20230331\t2023届高三06班\t1.000\t0.872\t0.974", + "20230331\t2023届高三07班\t0.926\t0.852\t0.704", + "20230331\t2023届高三09班\t1.000\t0.842\t0.947" + ], "origin": "2020年空中课堂高三复习课30", "edit": [ "20230128\t王伟叶" @@ -348693,7 +348890,18 @@ "ans": "B", "solution": "", "duration": -1, - "usages": [], + "usages": [ + "20230331\t2023届高三10班\t1.000", + "20230331\t2023届高三11班\t1.000", + "20230331\t2023届高三12班\t1.000", + "20230331\t2023届高三02班\t0.964", + "20230331\t2023届高三03班\t1.000", + "20230331\t2023届高三04班\t1.000", + "20230331\t2023届高三05班\t1.000", + "20230331\t2023届高三06班\t1.000", + "20230331\t2023届高三07班\t1.000", + "20230331\t2023届高三09班\t1.000" + ], "origin": "2020年空中课堂高三复习课30", "edit": [ "20230128\t王伟叶" @@ -357387,7 +357595,9 @@ "edit": [ "20230209\t王伟叶" ], - "same": [], + "same": [ + "040449" + ], "related": [], "remark": "", "space": "" @@ -361615,7 +361825,18 @@ "ans": "C", "solution": "", "duration": -1, - "usages": [], + "usages": [ + "20230331\t2023届高三10班\t1.000", + "20230331\t2023届高三11班\t1.000", + "20230331\t2023届高三12班\t0.947", + "20230331\t2023届高三02班\t0.929", + "20230331\t2023届高三03班\t1.000", + "20230331\t2023届高三04班\t1.000", + "20230331\t2023届高三05班\t0.973", + "20230331\t2023届高三06班\t0.974", + "20230331\t2023届高三07班\t0.926", + "20230331\t2023届高三09班\t0.947" + ], "origin": "2023年空中课堂高三复习课27", "edit": [ "20230312\t王伟叶" @@ -361713,7 +361934,18 @@ "ans": "\\textcircled{1}\\textcircled{4}", "solution": "", "duration": -1, - "usages": [], + "usages": [ + "20230331\t2023届高三10班\t1.000", + "20230331\t2023届高三11班\t0.850", + "20230331\t2023届高三12班\t0.842", + "20230331\t2023届高三02班\t0.893", + "20230331\t2023届高三03班\t0.870", + "20230331\t2023届高三04班\t0.875", + "20230331\t2023届高三05班\t0.946", + "20230331\t2023届高三06班\t0.974", + "20230331\t2023届高三07班\t0.889", + "20230331\t2023届高三09班\t0.895" + ], "origin": "2023年空中课堂高三复习课27", "edit": [ "20230312\t王伟叶" @@ -361762,7 +361994,18 @@ "ans": "$27.6\\times 10^3$", "solution": "", "duration": -1, - "usages": [], + "usages": [ + "20230331\t2023届高三10班\t1.000", + "20230331\t2023届高三11班\t0.750", + "20230331\t2023届高三12班\t0.421", + "20230331\t2023届高三02班\t0.714", + "20230331\t2023届高三03班\t0.652", + "20230331\t2023届高三04班\t0.562", + "20230331\t2023届高三05班\t0.730", + "20230331\t2023届高三06班\t0.769", + "20230331\t2023届高三07班\t0.667", + "20230331\t2023届高三09班\t0.632" + ], "origin": "2023年空中课堂高三复习课27", "edit": [ "20230312\t王伟叶" @@ -361781,7 +362024,18 @@ "ans": "$3$; $30$", "solution": "", "duration": -1, - "usages": [], + "usages": [ + "20230331\t2023届高三10班\t1.000\t1.000", + "20230331\t2023届高三11班\t0.950\t0.900", + "20230331\t2023届高三12班\t0.947\t0.895", + "20230331\t2023届高三02班\t0.964\t0.786", + "20230331\t2023届高三03班\t1.000\t0.870", + "20230331\t2023届高三04班\t1.000\t0.750", + "20230331\t2023届高三05班\t1.000\t1.000", + "20230331\t2023届高三06班\t0.974\t0.974", + "20230331\t2023届高三07班\t0.963\t0.926", + "20230331\t2023届高三09班\t1.000\t0.895" + ], "origin": "2023年空中课堂高三复习课27", "edit": [ "20230312\t王伟叶" @@ -361800,7 +362054,18 @@ "ans": "(1) 横截面积的平均值约为$0.06\\text{m}^2$; 材积量的平均值约为$0.39\\text{m}^3$; (2) $r\\approx 0.97$; (3) 比例系数的估计值$\\hat{k}=\\dfrac{\\displaystyle\\sum_{i=1}^{10}x_iy_i}{\\displaystyle\\sum_{i=1}^{10}x_i^2}$, 约为$1210.9\\text{m}^3$", "solution": "", "duration": -1, - "usages": [], + "usages": [ + "20230331\t2023届高三10班\t1.000\t1.000\t0.000", + "20230331\t2023届高三11班\t0.900\t0.650\t0.350", + "20230331\t2023届高三12班\t0.947\t0.947\t0.000", + "20230331\t2023届高三02班\t0.929\t0.929\t0.000", + "20230331\t2023届高三03班\t0.913\t0.913\t0.000", + "20230331\t2023届高三04班\t1.000\t0.938\t0.062", + "20230331\t2023届高三05班\t0.351\t0.919\t0.378", + "20230331\t2023届高三06班\t1.000\t1.000\t0.051", + "20230331\t2023届高三07班\t0.963\t0.963\t0.037", + "20230331\t2023届高三09班\t0.895\t0.895\t0.105" + ], "origin": "2023年空中课堂高三复习课27", "edit": [ "20230312\t王伟叶" @@ -361819,7 +362084,18 @@ "ans": "(1) $\\chi^2=24$, 认为有关; (2) 证明略; (3) $R$的估计值为$6$", "solution": "", "duration": -1, - "usages": [], + "usages": [ + "20230331\t2023届高三10班\t1.000\t0.000\t1.000", + "20230331\t2023届高三11班\t0.650\t0.600\t0.600", + "20230331\t2023届高三12班\t0.895\t0.842\t0.895", + "20230331\t2023届高三02班\t0.964\t0.893\t0.821", + "20230331\t2023届高三03班\t0.696\t0.783\t0.739", + "20230331\t2023届高三04班\t0.812\t0.688\t0.750", + "20230331\t2023届高三05班\t0.378\t0.513\t0.622", + "20230331\t2023届高三06班\t0.692\t0.718\t0.795", + "20230331\t2023届高三07班\t0.852\t0.778\t0.778", + "20230331\t2023届高三09班\t0.789\t0.632\t0.526" + ], "origin": "2023年空中课堂高三复习课27", "edit": [ "20230312\t王伟叶" @@ -361838,7 +362114,18 @@ "ans": "(1) $X\\sim \\begin{pmatrix} 155 & 165 & 175 & 185 & 195 & 205 \\\\ 0.22 & 0.27 & 0.25 & 0.15 & 0.1 & 0.01\\end{pmatrix}$, $E[X]=171.7$($\\text{cm}$); (2) $0.0312$; (3) $27.25$", "solution": "", "duration": -1, - "usages": [], + "usages": [ + "20230331\t2023届高三10班\t1.000\t1.000\t0.000", + "20230331\t2023届高三11班\t0.900\t0.600\t0.350", + "20230331\t2023届高三12班\t0.947\t0.789\t0.842", + "20230331\t2023届高三02班\t0.929\t0.750\t0.821", + "20230331\t2023届高三03班\t0.913\t0.826\t0.696", + "20230331\t2023届高三04班\t0.938\t0.812\t0.438", + "20230331\t2023届高三05班\t0.892\t0.622\t0.513", + "20230331\t2023届高三06班\t0.667\t0.872\t0.590", + "20230331\t2023届高三07班\t1.000\t0.556\t0.518", + "20230331\t2023届高三09班\t0.842\t0.421\t0.105" + ], "origin": "2023年空中课堂高三复习课27", "edit": [ "20230312\t王伟叶" @@ -375060,7 +375347,9 @@ "edit": [ "20221230\t王伟叶" ], - "same": [], + "same": [ + "040378" + ], "related": [], "remark": "", "space": "" @@ -396680,7 +396969,9 @@ "edit": [ "20230101\t王伟叶" ], - "same": [], + "same": [ + "040003" + ], "related": [], "remark": "", "space": "" @@ -396773,7 +397064,9 @@ "edit": [ "20230101\t王伟叶" ], - "same": [], + "same": [ + "040005" + ], "related": [], "remark": "", "space": "" @@ -402554,7 +402847,9 @@ "edit": [ "20230209\t王伟叶" ], - "same": [], + "same": [ + "040182" + ], "related": [], "remark": "", "space": "" @@ -402582,7 +402877,9 @@ "edit": [ "20230209\t王伟叶" ], - "same": [], + "same": [ + "040195" + ], "related": [], "remark": "", "space": "" @@ -430344,7 +430641,9 @@ "20230106\t王伟叶" ], "same": [], - "related": [], + "related": [ + "000466" + ], "remark": "", "space": "" }, @@ -442990,7 +443289,20 @@ "ans": "$\\dfrac{430}{3}$", "solution": "", "duration": -1, - "usages": [], + "usages": [ + "20230331\t2023届高三10班\t0.946", + "20230331\t2023届高三11班\t0.783", + "20230331\t2023届高三12班\t0.870", + "20230331\t2023届高三01班\t0.964", + "20230331\t2023届高三02班\t1.000", + "20230331\t2023届高三03班\t0.935", + "20230331\t2023届高三04班\t0.786", + "20230331\t2023届高三05班\t0.947", + "20230331\t2023届高三06班\t0.902", + "20230331\t2023届高三07班\t0.939", + "20230331\t2023届高三08班\t0.839", + "20230331\t2023届高三09班\t0.839" + ], "origin": "自拟题目", "edit": [ "20230128\t王伟叶" @@ -444274,7 +444586,9 @@ "20220726\t王伟叶", "20230220\t王伟叶" ], - "same": [], + "same": [ + "000100" + ], "related": [ "009553", "008380" @@ -448125,7 +448439,10 @@ "edit": [ "20230218\t王伟叶" ], - "same": [], + "same": [ + "013268", + "021347" + ], "related": [], "remark": "", "space": "" @@ -448179,7 +448496,10 @@ "edit": [ "20230218\t王伟叶" ], - "same": [], + "same": [ + "013279", + "021350" + ], "related": [], "remark": "", "space": "" @@ -448206,7 +448526,9 @@ "edit": [ "20230218\t王伟叶" ], - "same": [], + "same": [ + "013280" + ], "related": [], "remark": "", "space": "" @@ -448287,7 +448609,9 @@ "edit": [ "20230218\t王伟叶" ], - "same": [], + "same": [ + "040146" + ], "related": [], "remark": "", "space": "" @@ -449236,7 +449560,9 @@ "edit": [ "20230223\t王伟叶" ], - "same": [], + "same": [ + "004659" + ], "related": [], "remark": "", "space": "12ex" @@ -449958,7 +450284,9 @@ "edit": [ "20230302\t王伟叶" ], - "same": [], + "same": [ + "013016" + ], "related": [], "remark": "", "space": "" @@ -450091,7 +450419,9 @@ "edit": [ "20230302\t王伟叶" ], - "same": [], + "same": [ + "006128" + ], "related": [], "remark": "", "space": "12ex" @@ -450224,7 +450554,9 @@ "edit": [ "20230302\t王伟叶" ], - "same": [], + "same": [ + "008223" + ], "related": [], "remark": "", "space": "" @@ -450262,7 +450594,9 @@ "edit": [ "20230302\t王伟叶" ], - "same": [], + "same": [ + "008227" + ], "related": [], "remark": "", "space": "12ex" @@ -450319,7 +450653,9 @@ "edit": [ "20230302\t王伟叶" ], - "same": [], + "same": [ + "040181" + ], "related": [], "remark": "", "space": "" @@ -450357,7 +450693,9 @@ "edit": [ "20230302\t王伟叶" ], - "same": [], + "same": [ + "040183" + ], "related": [], "remark": "", "space": "" @@ -450376,7 +450714,9 @@ "edit": [ "20230302\t王伟叶" ], - "same": [], + "same": [ + "040186" + ], "related": [], "remark": "", "space": "" @@ -450395,7 +450735,9 @@ "edit": [ "20230302\t王伟叶" ], - "same": [], + "same": [ + "040227" + ], "related": [], "remark": "", "space": "" @@ -450471,7 +450813,10 @@ "edit": [ "20230302\t王伟叶" ], - "same": [], + "same": [ + "040190", + "040230" + ], "related": [], "remark": "", "space": "" @@ -450490,7 +450835,9 @@ "edit": [ "20230302\t王伟叶" ], - "same": [], + "same": [ + "040232" + ], "related": [], "remark": "", "space": "" @@ -450509,7 +450856,9 @@ "edit": [ "20230302\t王伟叶" ], - "same": [], + "same": [ + "040233" + ], "related": [], "remark": "", "space": "" @@ -450585,7 +450934,9 @@ "edit": [ "20230302\t王伟叶" ], - "same": [], + "same": [ + "040197" + ], "related": [], "remark": "", "space": "12ex" @@ -450604,7 +450955,9 @@ "edit": [ "20230302\t王伟叶" ], - "same": [], + "same": [ + "040244" + ], "related": [], "remark": "", "space": "12ex" @@ -450623,7 +450976,9 @@ "edit": [ "20230302\t王伟叶" ], - "same": [], + "same": [ + "040200" + ], "related": [], "remark": "", "space": "12ex" @@ -450642,7 +450997,9 @@ "edit": [ "20230302\t王伟叶" ], - "same": [], + "same": [ + "040201" + ], "related": [], "remark": "", "space": "12ex" @@ -450756,7 +451113,9 @@ "edit": [ "20230302\t王伟叶" ], - "same": [], + "same": [ + "003076" + ], "related": [], "remark": "", "space": "" @@ -450946,7 +451305,9 @@ "edit": [ "20230302\t王伟叶" ], - "same": [], + "same": [ + "040009" + ], "related": [], "remark": "", "space": "" @@ -451022,7 +451383,9 @@ "edit": [ "20230302\t王伟叶" ], - "same": [], + "same": [ + "013270" + ], "related": [], "remark": "", "space": "" @@ -451611,7 +451974,9 @@ "edit": [ "20230308\t王伟叶" ], - "same": [], + "same": [ + "040113" + ], "related": [], "remark": "", "space": "" @@ -451630,7 +451995,9 @@ "edit": [ "20230308\t王伟叶" ], - "same": [], + "same": [ + "021572" + ], "related": [], "remark": "", "space": "" @@ -451649,7 +452016,9 @@ "edit": [ "20230308\t王伟叶" ], - "same": [], + "same": [ + "040115" + ], "related": [], "remark": "", "space": "" @@ -451706,7 +452075,9 @@ "edit": [ "20230308\t王伟叶" ], - "same": [], + "same": [ + "040116" + ], "related": [], "remark": "", "space": "" @@ -451725,7 +452096,9 @@ "edit": [ "20230308\t王伟叶" ], - "same": [], + "same": [ + "040229" + ], "related": [], "remark": "", "space": "" @@ -451744,7 +452117,9 @@ "edit": [ "20230308\t王伟叶" ], - "same": [], + "same": [ + "001438" + ], "related": [], "remark": "", "space": "" @@ -451782,7 +452157,10 @@ "edit": [ "20230308\t王伟叶" ], - "same": [], + "same": [ + "040121", + "040230" + ], "related": [], "remark": "", "space": "" @@ -451877,7 +452255,9 @@ "edit": [ "20230308\t王伟叶" ], - "same": [], + "same": [ + "021573" + ], "related": [], "remark": "", "space": "" @@ -451915,7 +452295,9 @@ "edit": [ "20230308\t王伟叶" ], - "same": [], + "same": [ + "040127" + ], "related": [], "remark": "", "space": "12ex" @@ -451972,7 +452354,9 @@ "edit": [ "20230308\t王伟叶" ], - "same": [], + "same": [ + "040129" + ], "related": [], "remark": "", "space": "12ex" @@ -451991,7 +452375,9 @@ "edit": [ "20230308\t王伟叶" ], - "same": [], + "same": [ + "040130" + ], "related": [], "remark": "", "space": "12ex" @@ -452522,7 +452908,9 @@ "edit": [ "20230318\t王伟叶" ], - "same": [], + "same": [ + "040117" + ], "related": [], "remark": "", "space": "" @@ -452560,7 +452948,9 @@ "edit": [ "20230318\t王伟叶" ], - "same": [], + "same": [ + "040187" + ], "related": [], "remark": "", "space": "" @@ -452579,7 +452969,10 @@ "edit": [ "20230318\t王伟叶" ], - "same": [], + "same": [ + "040121", + "040190" + ], "related": [], "remark": "", "space": "" @@ -452617,7 +453010,9 @@ "edit": [ "20230318\t王伟叶" ], - "same": [], + "same": [ + "040122" + ], "related": [], "remark": "", "space": "" @@ -452636,7 +453031,9 @@ "edit": [ "20230318\t王伟叶" ], - "same": [], + "same": [ + "040123" + ], "related": [], "remark": "", "space": "" @@ -452693,7 +453090,9 @@ "edit": [ "20230318\t王伟叶" ], - "same": [], + "same": [ + "040237" + ], "related": [], "remark": "", "space": "" @@ -452712,7 +453111,9 @@ "edit": [ "20230318\t王伟叶" ], - "same": [], + "same": [ + "040236" + ], "related": [], "remark": "", "space": "" @@ -452845,7 +453246,9 @@ "edit": [ "20230318\t王伟叶" ], - "same": [], + "same": [ + "040128" + ], "related": [], "remark": "", "space": "12ex" @@ -453130,7 +453533,9 @@ "edit": [ "20230324\t王伟叶" ], - "same": [], + "same": [ + "040260" + ], "related": [], "remark": "", "space": "" @@ -453149,7 +453554,9 @@ "edit": [ "20230324\t王伟叶" ], - "same": [], + "same": [ + "040259" + ], "related": [], "remark": "", "space": "" @@ -453434,7 +453841,9 @@ "edit": [ "20230324\t王伟叶" ], - "same": [], + "same": [ + "040397" + ], "related": [], "remark": "", "space": "" @@ -453719,7 +454128,9 @@ "edit": [ "20230324\t王伟叶" ], - "same": [], + "same": [ + "013718" + ], "related": [], "remark": "", "space": "12ex" @@ -454992,7 +455403,9 @@ "edit": [ "20230326\t王伟叶" ], - "same": [], + "same": [ + "012594" + ], "related": [], "remark": "", "space": "" @@ -455030,7 +455443,10 @@ "edit": [ "20230326\t王伟叶" ], - "same": [], + "same": [ + "000673", + "004066" + ], "related": [], "remark": "", "space": "" @@ -455391,7 +455807,9 @@ "edit": [ "20230326\t王伟叶" ], - "same": [], + "same": [ + "020452" + ], "related": [], "remark": "", "space": "" @@ -455752,7 +456170,9 @@ "edit": [ "20230330\t王伟叶" ], - "same": [], + "same": [ + "040275" + ], "related": [], "remark": "", "space": "" @@ -456113,7 +456533,9 @@ "edit": [ "20230330\t王伟叶" ], - "same": [], + "same": [ + "008334" + ], "related": [], "remark": "", "space": "" @@ -456740,7 +457162,10 @@ "edit": [ "20230401\t王伟叶" ], - "same": [], + "same": [ + "012581", + "014452" + ], "related": [], "remark": "", "space": "" @@ -457044,7 +457469,9 @@ "edit": [ "20230401\t王伟叶" ], - "same": [], + "same": [ + "000858" + ], "related": [], "remark": "", "space": "" @@ -457082,7 +457509,9 @@ "edit": [ "20230401\t王伟叶" ], - "same": [], + "same": [ + "000862" + ], "related": [], "remark": "", "space": "" @@ -457101,7 +457530,9 @@ "edit": [ "20230401\t王伟叶" ], - "same": [], + "same": [ + "000863" + ], "related": [], "remark": "", "space": "" @@ -457120,7 +457551,9 @@ "edit": [ "20230401\t王伟叶" ], - "same": [], + "same": [ + "000864" + ], "related": [], "remark": "", "space": "" @@ -457291,7 +457724,9 @@ "edit": [ "20230401\t王伟叶" ], - "same": [], + "same": [ + "004199" + ], "related": [], "remark": "", "space": ""