美文网首页officePython
如何边睡边学?——Python实现PDF论文转音频文件MP3

如何边睡边学?——Python实现PDF论文转音频文件MP3

作者: 走错说爱你 | 来源:发表于2021-04-15 12:42 被阅读0次

最近看到一个文章,表明边睡边学真的可行,只要睡觉的时候听一些学过的东西,就能躺着刷技能熟练度,于是我寻思着把论文转成音频,晚上睡觉的时候听,既能催眠又能啥都不干躺着刷熟练度。这里记录下如何实现。

本文主要使用Python3来实现,简单易上手,代码全部开源,让大家也可以跟我一起007(bushi)

如果不想了解技术细节,只想直接拿来用,可以直接跳过代码编写部分,直达最后代码使用部分。如果你觉得好用,希望能够给我一个赞(能打赏更好),也欢迎去github发表意见建议。

开发环境

  • Windows 10
  • Sublime Text 3
  • 谷歌gTTS模块
  • pdfminer

准备

在网上搜了下,没有现成的pdf转mp3的方法,于是大致思路为:

  1. pdf文字提取
  2. 文字转音频

以此实现pdf转MP3

这里使用pdfminer实现文字提取,首先安装依赖:

pip install pdfminer4k

此外,还需要安装谷歌gTTS模块:

pip install gTTS

代码编写

pdf文字提取

编写代码(注意要对提取的文字做处理,不然结果会比较杂乱):

def pdfread(pdfPath):
    with open(pdfPath, 'rb') as fp:
        try:

            print(pdfPath)
            #用文件对象创建一个PDF文档分析器
            parser = PDFParser(fp)
            #创建一个PDF文档
            doc = PDFDocument()
            #分析器和文档相互连接
            parser.set_document(doc)
            doc.set_parser(parser)
            #提供初始化密码,没有默认为空
            doc.initialize()
            #检查文档是否可以转成TXT,如果不可以就忽略
            if not doc.is_extractable:
                raise PDFTextExtractionNotAllowed
            else:
                #创建PDF资源管理器,来管理共享资源
                rsrcmagr = PDFResourceManager()
                #创建一个PDF设备对象
                laparams = LAParams()
                #将资源管理器和设备对象聚合
                device = PDFPageAggregator(rsrcmagr, laparams=laparams)
                #创建一个PDF解释器对象
                interpreter = PDFPageInterpreter(rsrcmagr, device)
                allContent = ''
                last_para = ''
                result = ''
                for page in doc.get_pages():
                    interpreter.process_page(page)
                    #接收该页面的LTPage对象
                    layout = device.get_result()
                    #这里的layout是一个LTPage对象 里面存放着page解析出来的各种对象
                    #一般包括LTTextBox,LTFigure,LTImage,LTTextBoxHorizontal等等一些对像
                    #想要获取文本就得获取对象的text属性
                    
                    for x in layout:
                        try:
                            if(isinstance(x, LTTextBoxHorizontal)):
                                result = x.get_text()
                                # 去掉pdf文件读取的各种换行符
                                result = result.replace('\n', '')
                                # 去掉参考文献引用
                                result = re.sub('\[(\d+\,* ?-?)+\]', '', result)
                                # 无序列表换行
                                result = result.replace('∙', '\n∙')
                                # 去掉参考文献
                                if re.findall('^references?', last_para.lower().replace(' ', '')) != [] or re.findall('^references?', result.lower().replace(' ', '')) != []:
                                    return allContent
                                # 去掉页脚页码页眉以及内容过少的表格
                                if len(result) > 5 and re.findall('(^[0-9])|(^(research )?article)|(unclassified)|(www.)|(accepted (from|manuscript))|(proceedings of)|(vol.)|(volume \d)|(https?://)|(^ieee)|(sciencedirect)|(\d{4}\)$)|(\d{1,4} – \d{1,4}$)|(cid:)|(^authorized licensed use limited to:)|©|(publication date)|((et al.)$)',re.split('\s+$',result.lower())[0])==[]:
                                    allContent = allContent + '\n' + result
                                # print(result)
                        except Exception as e:
                            print(e)
                        last_para = result
                return allContent
        except Exception as e:
            print('文档读取失败:' + str(e))

文字转音频

编写代码,这里的参数lang表示文字语言,text即为要转化的文字:

tts = gTTS(text=result, lang='en')
tts.save("test.mp3")

主函数

主函数最终为:

if __name__ == '__main__':

    pdfPath = 'a37-islam.pdf' # 需要转换的同一目录下的文件名
    result = pdfread(pdfPath)
    print(result)

    tts = gTTS(text=result, lang='en')
    tts.save("test.mp3")

使用

首先先下载代码

然后修改代码中的主函数内的 pdfPath参数为自己想要转换的pdf文档的路径,然后直接在控制台内使用命令运行程序:

python pdf2audio.py

然后静静等候,等程序运行完毕,就能看到和代码同级目录下出现了一个test.mp3,即为生成的音频:

代码运行 生成的音频

注意:

  1. 程序运行过程中不能断网
  2. 程序运行时间较长(出bug会直接报错,程序没有写死循环,请放心食用),请耐心等候
  3. 论文越长,程序运行时间越久,生成的音频也越大

相关文章

  • 如何边睡边学?——Python实现PDF论文转音频文件MP3

    最近看到一个文章[https://mp.weixin.qq.com/s/BZ3iEaTyYaHdt62zdyPfl...

  • Android实时录制mp3音频

    android本身不支持录制mp3音频,但可以通过lame库进行转码,如何实现边录边转就算了,我这里就讲一下如何使...

  • 第七节 流程图、边解码边播放实现

    初始化解码器 解码音频文件(mp3)为pcm数据并存入文件 边解码(mp3)边播放 利用OpenSL ES播放 H...

  • 边学边用,边用边学

    我一直想学很多东西,却一直没学好,甚至还没开始真正学习。 大学的时候,我就想学很多东西。想学习谈判,学习演讲,写一...

  • 使用 iTunes转换音频文件格式

    wav转mp3 1. 选择需要转换的wav格式的音频文件,使用iTunes打开 2. 音频文件会默认导入资料库...

  • python进阶—边练边学,学到极致

    Python入门之后怎么学? 用实际项目学! 一,实际项目: 1.值班小工具2.自动爬取种子图片和链接,自定义洗好...

  • 边学边观察边动脑。。

    好4月12晚上十点四十,安庆石化硫磺回收装置,正在进行着尾气焚烧炉的点火工作。。。 自2017年三月份以来,安庆石...

  • 边学边记边分享

    《你如何听懂我说话?》 你如何听懂我说的话,不在你,而在我的表达,且看黄执中老师的分享。 一.简单:表达目标或观点...

  • 边画边学边想

    新的一周开始,很累,以为坐车看亲人累的,后仔细一想,打球,熬夜画画,累的,原来不是生病,霍然了,人所以要学会积极暗...

  • 边游边学边赚钱

    我们的新西兰之旅打造出完美的生活方式 边游边学边赚钱

网友评论

    本文标题:如何边睡边学?——Python实现PDF论文转音频文件MP3

    本文链接:https://www.haomeiwen.com/subject/jvsdlltx.html