• Python实现PDF、WORD文档中文本抽取


    目录

    一、本期文章学习目的

    二、开发环境

    三、数据分类

    四、知识架构了解

    1、数据格式化架构​

    2、使用工具的差异性

    3、数据抽取的ISO架构内容

    五、实操代码部分

    1、word抽取文字保存为TXT文档

    2、pdf抽取文字保存为TXT文档

    3、封装文档抽取工具

    4、遍历读取文件信息

    5、遍历读取文件夹信息,抽取文件夹文档内容保存为TXT文档


    一、本期文章学习目的

    使用python抽取PDF、WORD文档中文字进行为TXT文件。

    二、开发环境

    Python3.5.3,系统环境:win10,办公软件office16,编程环境:pycharm+Anaconda3

    插件:win32com、os、fnmatch(都可以从Anaconda中安装,这里不演示插件安装了)

    三、数据分类

     四、知识架构了解

     1、数据格式化架构

    2、使用工具的差异性

    选用免费工具和自己写代码工具的不同点:

     

    3、数据抽取的ISO架构内容

    五、实操代码部分

    1、word抽取文字保存为TXT文档

    2、pdf抽取文字保存为TXT文档

    3、封装文档抽取工具

    4、遍历读取文件信息

    5、遍历读取文件夹信息,抽取文件夹文档内容保存为TXT文档

    word-txt

     

    1. # coding=utf-8
    2. '''
    3. author;Rocky
    4. Description:Word文档信息提取转存TXT
    5. prompt: code in python3 env
    6. function:word文档转存TXT,默认保存在运行环境下面,支持重定义。
    7. 参数描述:1、filePath 文件路径。2、savePath:保存路径
    8. '''
    9. import os,fnmatch
    10. from win32com import client as wc
    11. from win32com.client import Dispatch
    12. def word2Txt(filePath,savaPath=''):
    13. #1、切分文件路径为文件目录和文件名
    14. dirs,filename = os.path.split(filePath)
    15. print('输入文档的当前路径和文件名字:',dirs,'\n',filename)
    16. #2、修改切分后的文件后缀
    17. new_name=''
    18. if fnmatch.fnmatch(filename,'*.doc'):
    19. new_name = filename[:-4]+'.txt'
    20. elif fnmatch.fnmatch(filename,'*.docx'):
    21. new_name = filename[:-5]+'.txt'
    22. else:
    23. print('格式不正确,仅支持doc和docx格式')
    24. return
    25. #3、设置新的文件保存路径
    26. if savaPath=='':
    27. savaPath = dirs
    28. else:
    29. savaPath = savaPath
    30. word2TxtPath = os.path.join(savaPath,new_name)
    31. print('转化以后的文件名路径-->',word2TxtPath)
    32. #4、加载文本提取的处理程序,Word - txt
    33. wordapp = wc.Dispatch('Word.Application')
    34. mytxt = wordapp.Documents.Open(filePath)
    35. #5、保存文档文本
    36. mytxt.SaveAs(word2TxtPath,4)
    37. mytxt.Close()
    38. print('转化成功,文件保存为txt文件')
    39. if __name__=='__main__':
    40. filePath = os.path.abspath(r'./1234.docx')#读取项目路径的文档。
    41. word2Txt(filePath)

     pdf-txt

     

    1. # coding=utf-8
    2. '''
    3. author;Rocky
    4. Description:pdf,PDF文档信息提取转存TXT
    5. prompt: code in python3 env
    6. function:文档信息转存TXT,默认保存在运行环境下面,支持重定义。
    7. 参数描述:1、filePath 文件路径。2、savePath:保存路径、
    8. '''
    9. import os,fnmatch
    10. from win32com import client as wc
    11. from win32com.client import Dispatch
    12. def pdf2Txt(filePath,savaPath=''):
    13. #1、切分文件路径为文件目录和文件名
    14. dirs,filename = os.path.split(filePath)
    15. print('输入文档的当前路径和文件名字:',dirs,'\n',filename)
    16. #2、修改切分后的文件后缀
    17. new_name=''
    18. if fnmatch.fnmatch(filename,'*.pdf'):
    19. new_name = filename[:-4]+'.txt'
    20. elif fnmatch.fnmatch(filename,'*.PDF'):
    21. new_name = filename[:-4]+'.txt'
    22. else:
    23. print('格式不正确,仅支持pdf和PDF格式')
    24. return
    25. #3、设置新的文件保存路径
    26. if savaPath=='':
    27. savaPath = dirs
    28. else:
    29. savaPath = savaPath
    30. pdf2TxtPath = os.path.join(savaPath,new_name)
    31. print('转化以后的文件名路径-->',pdf2TxtPath)
    32. #4、加载文本提取的处理程序,Word - txt
    33. wordapp = wc.Dispatch('Word.Application')
    34. mytxt = wordapp.Documents.Open(filePath)
    35. #5、保存文档文本
    36. mytxt.SaveAs(pdf2TxtPath,4)
    37. mytxt.Close()
    38. print('转化成功,文件保存为txt文件')
    39. if __name__=='__main__':
    40. filePath = os.path.abspath(r'./erp.pdf')#当前项目文档下的路径
    41. pdf2Txt(filePath)

     封装Word\pdf-txt的工具

     

    1. # coding=utf-8
    2. '''
    3. author;Rocky
    4. Description:文档信息提取转存TXT(PDF、word文档)
    5. prompt: code in python3 env
    6. function:PDF、pdf、doc、docx文档转存TXT,默认保存在运行环境下面,支持重定义。
    7. 参数描述:1、filePath 文件路径。2、savePath:保存路径 3、filename 文件名字 4、typename文件后缀
    8. '''
    9. import os,fnmatch
    10. from win32com import client as wc
    11. from win32com.client import Dispatch
    12. def file2Txt(filePath,savaPath=''):
    13. try:
    14. #1、切分文件路径为文件目录和文件名
    15. dirs,filename = os.path.split(filePath)
    16. print('输入文档的当前路径和文件名字:',dirs,'\n',filename)
    17. #2、修改切分后的文件后缀
    18. typename = os.path.splitext(filename)[-1].lower()#获得文件后缀
    19. new_name = trantype(filename,typename)
    20. #3、设置新的文件保存路径
    21. if savaPath=='':
    22. savaPath = dirs
    23. else:
    24. savaPath = savaPath
    25. file2TxtPath = os.path.join(savaPath,new_name)
    26. print('转化以后的文件名路径-->',file2TxtPath)
    27. #4、加载文本提取的处理程序,Word、PDF - txt
    28. wordapp = wc.Dispatch('Word.Application')
    29. mytxt = wordapp.Documents.Open(filePath)
    30. #5、保存文档文本
    31. mytxt.SaveAs(file2TxtPath ,4)
    32. mytxt.Close()
    33. print('转化成功,文件保存为txt文件')
    34. except Exception as e :
    35. pass
    36. #6、定义函数,重命名文件名字
    37. def trantype(filename,typename):
    38. new_name=''
    39. if typename == '.pdf':
    40. if fnmatch.fnmatch(filename,'*.pdf'):
    41. new_name = filename[:-4] + '.txt'
    42. else: return
    43. elif typename == '.doc' or typename == '.docx':
    44. if fnmatch.fnmatch(filename,'*.doc') :
    45. new_name = filename[:-4] + '.txt'
    46. elif fnmatch.fnmatch(filename, '*docx'):
    47. new_name = filename[:-5] + '.txt'
    48. else:return
    49. else:
    50. print('警告:\n 您输入的文件不合法,本程序抽取doc,docx,pdf,PDF程序文件,请输入正确格式')
    51. return
    52. return new_name
    53. if __name__=='__main__':
    54. filePath = os.path.abspath(r'./1234.docx')
    55. file2Txt(filePath)

     遍历文档,读取文件件中文档信息

     

    1. # coding=utf-8
    2. '''
    3. author;Rocky
    4. Description:遍历文档,打印文档的名字
    5. prompt: code in python3 env
    6. function:将文档里面的文档名字打印出来,并计算所有需要时间。默认保存在运行环境下面,支持重定义。
    7. 参数描述:1、time_start 开始时间。2、time_end 结束时间 3、 rootDir目录文件
    8. '''
    9. import os,fnmatch
    10. from win32com import client as wc
    11. from win32com.client import Dispatch
    12. import time
    13. class TraversalFun():
    14. #1、初始化,rootdir目录文件路径
    15. def __init__(self,rootDir):
    16. self.rootDir = rootDir
    17. #2、遍历目录文件
    18. def TraversalDir(self):
    19. TraversalFun.AllFiles(self, self.rootDir)
    20. #3、递归算法遍历所有文件,并打印文件名
    21. def AllFiles(self,rootDir):
    22. for lists in os.listdir(rootDir):
    23. path = os.path.join(rootDir,lists)
    24. if os.path.isfile(path):
    25. print(os.path.abspath(path))
    26. elif os.path.isdir(path):
    27. TraversalFun.AllFiles(self,path)
    28. if __name__ == '__main__':
    29. time_start = time.time()
    30. rootDir = r"../2010"
    31. tra = TraversalFun(rootDir)
    32. tra.TraversalDir()
    33. time_end = time.time()
    34. print('totally cost:',(time_end - time_start),'s')

     

    遍历整个文档,将pdf,word-txt保存

     

    1. # coding=utf-8
    2. '''
    3. author;Rocky
    4. Description:抽取文档中的word,pdf文档中的文字,转化为TXT保存。
    5. prompt: code in python3 env
    6. function:将文档里面的文档名字打印出来,并计算所有需要时间。默认保存在运行环境下面,支持重定义。
    7. 参数描述: 1、filePath 文件路径。2、savePath:保存路径 3、filename 文件名字 4、typename文件后缀 ,5、time_start 开始时间。6、time_end 结束时间 7、 rootDir目录文件
    8. '''
    9. import os,fnmatch
    10. from win32com import client as wc
    11. from win32com.client import Dispatch
    12. import time
    13. import ExtractTxt as ET #提取PDF、word文档的功能模块
    14. class TraversalFun():
    15. #1、初始化,rootdir目录文件路径
    16. def __init__(self,rootDir,func=None,saveDir=''):
    17. self.rootDir = rootDir#目标文件路径
    18. self.func = func#参数方法,实现文本抽取
    19. self.saveDir = saveDir#文件夹保存路径
    20. #2、遍历目录文件
    21. def TraversalDir(self):
    22. #切分文件目录和文件名
    23. dirs,filename=os.path.split(self.rootDir)
    24. #保存目录
    25. saveDir=""
    26. if self.saveDir=="":
    27. save_dir = os.path.abspath(os.path.join(dirs,'new_',filename))
    28. else: save_dir = self.saveDir
    29. #创建保存路径
    30. if not os.path.exists(save_dir):
    31. os.makedirs(save_dir)
    32. print("保存目录:\n",save_dir)
    33. #遍历文件抽取Txt文本内容
    34. TraversalFun.AllFiles(self, self.rootDir,save_dir)
    35. #3、递归算法遍历所有文件,并打印文件名(并非目录文件)
    36. def AllFiles(self,rootDir,save_dir=''):
    37. #获取根目录下面所有文件
    38. for lists in os.listdir(rootDir):
    39. path = os.path.join(rootDir,lists)
    40. #核心算法,对文件的类型文本进行信息抽取并保存
    41. if os.path.isfile(path):
    42. self.func(os.path.abspath(path),os.path.abspath(save_dir))
    43. #递归遍历整个目录
    44. if os.path.isdir(path):
    45. newsave_dir = os.path.join(save_dir,lists)
    46. if not os.path.exists(newsave_dir):
    47. os.mkdir(newsave_dir)
    48. TraversalFun.AllFiles(self,path,newsave_dir)
    49. if __name__ == '__main__':
    50. time_start = time.time()
    51. rootDir = os.path.abspath(r'../2010')
    52. tra = TraversalFun(rootDir,ET.file2Txt)#调用ET的file2Txt的方法
    53. tra.TraversalDir()
    54. time_end = time.time()
    55. print('totally cost:',(time_end - time_start),'s')

     注意:调用项目中的ExtractTxt模块时,需要重新加载标记目录为源根文件夹。才可以使用封装的python写的模块(图片是标记后的截图) 其次转化过程中,word文档会提醒是否将文档转化,需要点击确定。

    总结:win32插件实际使用python的office模块进行调用,将文档转化为txt文件。使用os模块读取文件路径进行写入。注意模块之间封装使用,可以调用加入新的代码段中。

    特别感谢网友文章参考:

    可以学习到什么东西,Python数据预处理(一)一抽取多源数据文本信息教程-慕课网

    win32com操作大全(含常见错误解决办法) - 知乎

  • 相关阅读:
    242 h155 最小栈
    前端知识总结
    《持续交付:发布可靠软件的系统方法》- 读书笔记(二)
    同步锁的分类
    面试不到10分钟就被赶出来了,问的实在是太变态了...
    安卓玩机搞机之. 更换内核 .内核比rom重要.了解内核相关
    ESP8266-Arduino编程实例-MAX6675冷端补偿K热电偶数字转换器驱动
    【泛微ecology】ecology的补丁包升级
    Linux内核之内存管理分段机制原理与实现(从无到有的过程)
    应遵循哪些 GitLab 备份最佳实践
  • 原文地址:https://blog.csdn.net/yi247630676/article/details/125979888