嗨,我是大虾,一名品牌从业者,一只野生程序员。
最近接了个小单,使用PyQt为客户开发一个论文格式调整器,界面长这样:


需求是:创建各个学校的格式要求,批量处理论文。
众所周知,不同学校的论文格式要求虽然有所不同,但模块基本上大同小异,如:封面、主标题、摘要、关键词、正文(一二三级标题和内容)、致谢和参考文献。
有些论文没有致谢模块,而且位置可能在文章的开始,也可能在文章的结束,大部分情况下,参考文献也会在文章的结束。
格式方面,可以使用win32com来调整,只需要熟悉微软的文档就可以使用了,再不济还可以参考word的宏。
整个需求中,难点其实是模块的识别,具体是,不清楚某些模块是否一定会有,各个模块的前后顺序不确定。经过几天的研究,找到了一套识别的逻辑,大大优化了模块识别的准确性。处理的逻辑如下:
1、程序获取到论文后,先识别一二三级标题所出现的段落,分别记录标题所在段落的索引,保存在列表中:
一级标题 [4, 9, 43, 81, 122]
二级标题 [10, 13, 19, 44, 46, 82, 89, 114]
三级标题 [20, 22, 28, 32, 47, 49, 54]
# 使用正则匹配标题,遍历每个段落,取每个段落前5-8个字符进行匹配,这样能大大提升标题识别的准确率
2、摘要、关键词、致谢及参考文献的识别
遍历每个段落,取每个段落前5-8个字符,使用正则匹配,分别记录到列表中
摘要匹配 [2]
关键词匹配 [3]
参考文献匹配 [137]
致谢匹配 []
每个段落取5-8个字符进行匹配,是符合实际情况的,比如论文的”摘要“二字一定会出现在段落的开头,出现在段落的其他位置,一定不是模块,只是普通的内容。
假如摘要匹配中,记录两个段落的索引那怎么办,如 [2, 4],那就取列表的首个元素为真实的模块,其他模块一样。
3、将所有模块及对应的列表重组成字典元组列表并排序
[('thanks', []), ('sumary', [2]), ('keywords', [3]), ('title1', [4, 9, 43, 81, 122]), ('title2', [10, 13, 19, 44, 46, 82, 89, 114]), ('title3', [20, 22, 28, 32, 47,
49, 54]), ('reference', [137])]
根据使用元组的最后一个元素即段落索引进行排序,按照论文的段落顺序排列,如此一来,就能确定各个模块的顺序了,此时还需要删除空列表的模块,上面的致谢模块(thanks)列表为空,意味着论文中并不存在这个模块,那可以删除了。在列表元素未知的情况下,需要使用遍历进行判断,空的就删除,不过需要注意的是,不能一边遍历一遍删除,会导致列表的索引出错,从而出现有些元素删除失败,正确的做法是,第一次遍历列表,记录空元素到A列表中,遍历A列表后再从原来的列表中删除。
# 保存空模块的索引
null_items = []
for i in new_sort:
if not i[-1]:
# new_sort.remove(i) 不能边遍历边删除列表 会导致索引出错
null_items.append(i)
# 遍历保存下来的模块 然后从new_sort中删除 此时new_sort列表才是干净的 空模块将会从列表中删除
for item in null_items:
new_sort.remove(item)
4、计算相邻模块的范围
删除了空的模块后,使用上面的列表计算模块的段落范围,除了标题外,摘要、关键词、致谢和参考文献都需要计算。
上面的示例中,删除了致谢模块后的列表应该是这样的
[('sumary', [2]), ('keywords', [3]), ('title1', [4, 9, 43, 81, 122]), ('title2', [10, 13, 19, 44, 46, 82, 89, 114]), ('title3', [20, 22, 28, 32, 47, 49, 54]),
('reference', [137])]
到这里,已经很容易处理了,摘要(sumary)的段落范围为[2, 3],关键词(keywords)的段落范围为[3, 4],参考文献(reference)的段落范围为[137, 最后一段]。
这些模块的段落索引记录好之后,就可以进行格式的调整了,可以使用Range、Paragraphs、Selection等方法进行调整了。
关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具

三、精品Python学习书籍
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

四、Python视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。


五、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

六、Python练习题
检查学习结果。

七、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


这份完整版的Python全套学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

Python资料、技术、课程、解答、咨询也可以直接点击下面名片,
添加官方客服斯琪↓

介绍了一款使用PyQt开发的论文格式调整器,该工具能够自动识别论文中的关键模块如摘要、关键词等,并对其进行批量格式调整。
2万+

被折叠的 条评论
为什么被折叠?



