使用Python生成LaTeX闪卡时按关键词拆分内容异常问题
开发目标
- 从LaTeX格式的数学类文档中,自动提取定义(Definition)、定理(Theorem)、命题(Proposition)、引理(Lemma)、推论(Corollary)、注记(Remark)、示例(Example/Examples)类结构化条目
- 为每个提取到的条目生成对应闪卡
- 将所有闪卡分别导出为独立的文本文件
当前实现情况
- 已搭建基础流程:首先读取目标LaTeX文件的全量内容,再按照预设的条目关键词拆分内容
- 现存问题:代码实际运行后拆分结果不符合预期,暂未定位到错误根源
测试所用LaTeX文件本地读取路径:
C:/Users/MueidSamad/Automators/Desktop/AMD.txt
现有完整代码
from openpyxl import Workbook, load_workbook import io def read_file(filepath): with io.open(filepath, 'r') as tmp: inhalt = tmp.read() return inhalt # 入参说明:content为待拆分的文档全文字符串,k为指定提取的条目类型对应的关键词索引 def seperated_by_Keyword(content,k): Keyword = ['Definition.','Theorem.','Proposition.', 'Lemma.', 'Corollary.','Remark.','Examples.', 'Example.'] flashcards=[Keyword[k]+Karten for Karten in content.split(Keyword[k]) ] seperated_by_keyword=[] for i in range(len(Keyword)): if i==k: continue for x in flashcards: d=x.split(Keyword[i]) flashcards.extend(d) flashcards.remove(x) # 拆分证明部分:将证明内容和所属定理/命题等条目拆分,后续单独存为文件 for x in flashcards: # 匹配「条目内容 + Proof. + 证明内容」格式的拼接内容,跳过本身就是证明开头的片段 if 'Proof.' in x and x.startswith('Proof.')==False: tmp=x.split('Proof.') flashcards.append(tmp[0]) tmp[1]='Proof.'+tmp[1] flashcards.append(tmp[1]) flashcards.remove(x) # 为所有闪卡内容前后添加LaTeX识别标记 for j in range(len(flashcards)): flashcards[j] = '[latex]' + flashcards[j] + '[latex]' # 仅保留当前指定提取类型的闪卡 for x in flashcards: if x.startswith('[latex]'+Keyword[k]): seperated_by_keyword.append(x) return seperated_by_keyword def createNewFiles(Karteikarten): iterations_Array=[] for i in range(len(Karteikarten)): iterations_Array.append(i) for i in iterations_Array: if Karteikarten[i].startswith('[latex]Proof.'): # 证明文件命名规则:所属条目序号 + Beweis.txt with open('{}Beweis.txt'.format(i-1), 'w') as f: f.write(Karteikarten[i]) else: # 普通条目文件命名规则:条目序号.txt with open('{}.txt'.format(i), 'w') as f: f.write(Karteikarten[i]) if __name__ == '__main__': inhalt=read_file('C:/Users/MueidSamad/Automators/Desktop/AMD.txt') # 传入k=0时对应提取Definition类型的条目 flashcards=seperated_by_Keyword(inhalt,0) createNewFiles(flashcards)
内容的提问来源于stack exchange,提问作者Mojed Samad
相关产品推荐
相关产品推荐

