40岁自学Python,研究了一个论文的模块识别办法

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

嗨,我是大虾,一名品牌从业者,一只野生程序员。

最近接了个小单,使用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资料、技术、课程、解答、咨询也可以直接点击下面名片,添加官方客服斯琪

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值