单元挂钩 迁移到工具v3 完成
This commit is contained in:
parent
dd753c09c5
commit
918d1108f9
|
|
@ -100,11 +100,13 @@ def pre_treating(string): #删除字符串中对比较无用的字符, 以供比
|
||||||
string = re.sub(r"[,\.:;?]","",string)
|
string = re.sub(r"[,\.:;?]","",string)
|
||||||
return string #返回处理后的字符串
|
return string #返回处理后的字符串
|
||||||
|
|
||||||
def findsame(id,same_list): #在same_list中寻找与id相同的题号
|
def findsru(id,alist): #在same_list中寻找与id相同的题号
|
||||||
set1 = set([pair[1] for pair in same_list if pair[0] == id])
|
set1 = set([pair[1] for pair in alist if pair[0] == id])
|
||||||
set2 = set([pair[0] for pair in same_list if pair[1] == id])
|
set2 = set([pair[0] for pair in alist if pair[1] == id])
|
||||||
return sorted(list(set1 | set2))
|
return sorted(list(set1 | set2))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def findsameinDB(id): #在数据库中寻找与id相同的题号
|
def findsameinDB(id): #在数据库中寻找与id相同的题号
|
||||||
mydb = connect(hostname = "wwylss.synology.me", port = "13306", username="tikuuser", pwd="Kjmathds_2024", db = "tikutest")
|
mydb = connect(hostname = "wwylss.synology.me", port = "13306", username="tikuuser", pwd="Kjmathds_2024", db = "tikutest")
|
||||||
mycursor = mydb.cursor()
|
mycursor = mydb.cursor()
|
||||||
|
|
@ -129,18 +131,54 @@ def findrelatedinDB(id): #在数据库中寻找与id关联的题号
|
||||||
set2 = set([ret[0] for ret in mycursor.fetchall()])
|
set2 = set([ret[0] for ret in mycursor.fetchall()])
|
||||||
return sorted(list(set1 | set2))
|
return sorted(list(set1 | set2))
|
||||||
|
|
||||||
|
def get_unit_tags(id):
|
||||||
|
mydb = connect(hostname = "wwylss.synology.me", port = "13306", username="tikuuser", pwd="Kjmathds_2024", db = "tikutest")
|
||||||
|
mycursor = mydb.cursor()
|
||||||
|
sql = "SELECT tagname FROM tagcorresp WHERE ID = (%s);"
|
||||||
|
val = (id,)
|
||||||
|
mycursor.execute(sql,val)
|
||||||
|
unittags = [ret[0] for ret in mycursor.fetchall() if "单元" in ret[0]]
|
||||||
|
mydb.close()
|
||||||
|
return unittags
|
||||||
|
|
||||||
|
def get_problem_content(id):
|
||||||
|
mydb = connect(hostname = "wwylss.synology.me", port = "13306", username="tikuuser", pwd="Kjmathds_2024", db = "tikutest")
|
||||||
|
mycursor = mydb.cursor()
|
||||||
|
sql = "SELECT content FROM problems WHERE ID = (%s);"
|
||||||
|
val = (id,)
|
||||||
|
mycursor.execute(sql,val)
|
||||||
|
content = mycursor.fetchall()[0][0]
|
||||||
|
mydb.close()
|
||||||
|
return content
|
||||||
|
|
||||||
|
|
||||||
|
def generate_same_list():
|
||||||
|
mydb = connect(hostname = "wwylss.synology.me", port = "13306", username="tikuuser", pwd="Kjmathds_2024", db = "tikutest")
|
||||||
|
mycursor = mydb.cursor()
|
||||||
|
mycursor.execute("SELECT ID,SAME_ID FROM same;")
|
||||||
|
same_list = [(ret[0],ret[1]) for ret in mycursor.fetchall()]
|
||||||
|
mydb.close()
|
||||||
|
return same_list.copy()
|
||||||
|
|
||||||
|
def generate_related_list():
|
||||||
|
mydb = connect(hostname = "wwylss.synology.me", port = "13306", username="tikuuser", pwd="Kjmathds_2024", db = "tikutest")
|
||||||
|
mycursor = mydb.cursor()
|
||||||
|
mycursor.execute("SELECT ID,RELATED_ID FROM related;")
|
||||||
|
related_list = [(ret[0],ret[1]) for ret in mycursor.fetchall()]
|
||||||
|
mydb.close()
|
||||||
|
return related_list.copy()
|
||||||
|
|
||||||
def treat_dict(): #对整个题库字典中的内容部分进行预处理,删除无用字符
|
def treat_dict(): #对整个题库字典中的内容部分进行预处理,删除无用字符
|
||||||
treated_dict = {}
|
treated_dict = {}
|
||||||
mydb = connect(hostname = "wwylss.synology.me", port = "13306", username="tikuuser", pwd="Kjmathds_2024", db = "tikutest")
|
mydb = connect(hostname = "wwylss.synology.me", port = "13306", username="tikuuser", pwd="Kjmathds_2024", db = "tikutest")
|
||||||
mycursor = mydb.cursor()
|
mycursor = mydb.cursor()
|
||||||
mycursor.execute("SELECT ID,content FROM problems;")
|
mycursor.execute("SELECT ID,content FROM problems;")
|
||||||
p_dict = {id:content for id,content in mycursor.fetchall()}
|
p_dict = {id:content for id,content in mycursor.fetchall()}
|
||||||
mycursor.execute("SELECT ID,SAME_ID FROM same;")
|
# mycursor.execute("SELECT ID,SAME_ID FROM same;")
|
||||||
same_list = [(ret[0],ret[1]) for ret in mycursor.fetchall()]
|
# same_list = [(ret[0],ret[1]) for ret in mycursor.fetchall()]
|
||||||
for id in p_dict:
|
for id in p_dict:
|
||||||
treated_dict[id] = {}
|
treated_dict[id] = {}
|
||||||
treated_dict[id]["content"] = pre_treating(p_dict[id])
|
treated_dict[id] = pre_treating(p_dict[id])
|
||||||
treated_dict[id]["same"] = findsame(id,same_list).copy()
|
|
||||||
mydb.close()
|
mydb.close()
|
||||||
return treated_dict #返回处理后的字典, 含内容字段及相同题目字段
|
return treated_dict #返回处理后的字典, 含内容字段及相同题目字段
|
||||||
|
|
||||||
|
|
@ -2195,26 +2233,26 @@ def unUnitted(idexp): #返回adict中未赋单元的id列表
|
||||||
return ununittedids
|
return ununittedids
|
||||||
|
|
||||||
|
|
||||||
def AutoAssignTagNotoLaTeX(newlist): #根据题库中已有的单元挂钩和字符串相似比对, 给newlist中的每一个ID在可能的情况下自动适配单元号码, 可能有误, 需人工审核, 返回(LaTeX代码的body(从\begin{enumerate}到\end{enumerate}的部分),题号和单元号码的对应)组成的二元tuple
|
def AutoAssignTagNotoLaTeX(newlist,allsamelist,allrelatedlist):
|
||||||
output = "\\begin{enumerate}\n\n"
|
output = "\\begin{enumerate}\n\n"
|
||||||
tagrecord = ""
|
tagrecord = ""
|
||||||
print("正在生成简化题目的字典...")
|
print("正在生成简化题目的字典...")
|
||||||
treateddict = treat_dict()
|
treateddict = treat_dict()
|
||||||
print("简化题目字典生成完毕.")
|
print("简化题目字典生成完毕.")
|
||||||
for id in newlist:
|
for id in newlist:
|
||||||
samelist = findsameinDB(id)
|
samelist = findsru(id,allsamelist)
|
||||||
relatedlist = findrelatedinDB(id)
|
relatedlist = findsru(id,allrelatedlist)
|
||||||
if not samelist == []:
|
if not samelist == []:
|
||||||
unittags = [i for i in adict[samelist[0]]["tags"] if "单元" in i]
|
unittags = get_unit_tags(samelist[0])
|
||||||
elif not relatedlist == []:
|
elif not relatedlist == []:
|
||||||
unittags = [i for i in adict[relatedlist[0]]["tags"] if "单元" in i]
|
unittags = get_unit_tags(relatedlist[0])
|
||||||
else:
|
else:
|
||||||
simgroup = stringmaxsim(treateddict[id]["content"],treateddict,10)
|
simgroup = stringmaxsim(treateddict[id],treateddict,10)
|
||||||
unittags_raw = {}
|
unittags_raw = {}
|
||||||
for g in simgroup:
|
for g in simgroup:
|
||||||
rid,sim = g
|
rid,sim = g
|
||||||
if not rid == id and sim > 0.75:
|
if not rid == id and sim > 0.75:
|
||||||
for t in [i for i in adict[rid]["tags"] if "单元" in i]:
|
for t in get_unit_tags(rid):
|
||||||
if t in unittags_raw:
|
if t in unittags_raw:
|
||||||
unittags_raw[t] += 1
|
unittags_raw[t] += 1
|
||||||
else:
|
else:
|
||||||
|
|
@ -2226,7 +2264,7 @@ def AutoAssignTagNotoLaTeX(newlist): #根据题库中已有的单元挂钩和字
|
||||||
tagnumbers = ""
|
tagnumbers = ""
|
||||||
for u in unittags:
|
for u in unittags:
|
||||||
tagnumbers += str(getUnitNumber(u))
|
tagnumbers += str(getUnitNumber(u))
|
||||||
output += f"\\item ({id})[{tagnumbers}] {adict[id]['content']}\n\n"
|
output += f"\\item ({id})[{tagnumbers}] {get_problem_content(id)}\n\n"
|
||||||
tagrecord += f"{id}\t{tagnumbers}\n"
|
tagrecord += f"{id}\t{tagnumbers}\n"
|
||||||
output += "\\end{enumerate}\n\n"
|
output += "\\end{enumerate}\n\n"
|
||||||
return (output,tagrecord)
|
return (output,tagrecord)
|
||||||
|
|
|
||||||
|
|
@ -14,13 +14,15 @@ class MyWindow(QWidget,Ui_Form):
|
||||||
def exec(self):
|
def exec(self):
|
||||||
# pro_dict = load_dict("../题库0.3/Problems.json")
|
# pro_dict = load_dict("../题库0.3/Problems.json")
|
||||||
allids = getAllIDsExp()
|
allids = getAllIDsExp()
|
||||||
|
all_same_list = generate_same_list()
|
||||||
|
all_related_list = generate_related_list()
|
||||||
if self.radioButton_phase1.isChecked():
|
if self.radioButton_phase1.isChecked():
|
||||||
idexp = self.lineEdit_ids.text()
|
idexp = self.lineEdit_ids.text()
|
||||||
if idexp.strip() == "":
|
if idexp.strip() == "":
|
||||||
idlist = unUnitted(allids)
|
idlist = unUnitted(allids)
|
||||||
else:
|
else:
|
||||||
idlist = generate_number_set(idexp)
|
idlist = generate_number_set(idexp)
|
||||||
latex_body,tagrec = AutoAssignTagNotoLaTeX(idlist,pro_dict)
|
latex_body,tagrec = AutoAssignTagNotoLaTeX(idlist,all_same_list,all_related_list)
|
||||||
latex_raw = ReadTextFile("模板文件/讲义模板.txt")
|
latex_raw = ReadTextFile("模板文件/讲义模板.txt")
|
||||||
latex_data = StringSubstitute(r"<<[\s\S]*?待替换[\s\S]*?>>",latex_raw,("待检查单元",latex_body))
|
latex_data = StringSubstitute(r"<<[\s\S]*?待替换[\s\S]*?>>",latex_raw,("待检查单元",latex_body))
|
||||||
SaveTextFile(tagrec,"临时文件/单元对应.txt")
|
SaveTextFile(tagrec,"临时文件/单元对应.txt")
|
||||||
|
|
|
||||||
Reference in New Issue