分享

python读取pdf中的文本

 老三的休闲书屋 2021-04-10

python处理pdf也是常用的技术了,对于python3来说,pdfminer3k是一个非常好的工具。

pip install pdfminer3k

首先,为了满足大部分人的需求,我先给一个通用一点的脚本来读取pdf中的文本:

  1. from io import StringIO
  2. from io import open
  3. from pdfminer.converter import TextConverter
  4. from pdfminer.layout import LAParams
  5. from pdfminer.pdfinterp import PDFResourceManager, process_pdf
  6. def read_pdf(pdf):
  7. # resource manager
  8. rsrcmgr = PDFResourceManager()
  9. retstr = StringIO()
  10. laparams = LAParams()
  11. # device
  12. device = TextConverter(rsrcmgr, retstr, laparams=laparams)
  13. process_pdf(rsrcmgr, device, pdf)
  14. device.close()
  15. content = retstr.getvalue()
  16. retstr.close()
  17. # 获取所有行
  18. lines = str(content).split('\n')
  19. return lines
  20. if __name__ == '__main__':
  21. with open('t1.pdf', 'rb') as my_pdf:
  22. print(read_pdf(my_pdf))

我主要是想在pdf中抽出自己想要的一些关键信息,所以需要找到这些信息的共同点。幸运的是,这些关键信息的行都含有'//',所以我只需找到含有'//'的行就行了,于是写了以下脚本。

这样就可以直接使用了,我们先看脚本:

  1. from io import StringIO
  2. from io import open
  3. from pdfminer.converter import TextConverter
  4. from pdfminer.layout import LAParams
  5. from pdfminer.pdfinterp import PDFResourceManager, process_pdf
  6. def read_pdf(pdf):
  7. # resource manager
  8. rsrcmgr = PDFResourceManager()
  9. retstr = StringIO()
  10. laparams = LAParams()
  11. # device
  12. device = TextConverter(rsrcmgr, retstr, laparams=laparams)
  13. process_pdf(rsrcmgr, device, pdf)
  14. device.close()
  15. content = retstr.getvalue()
  16. retstr.close()
  17. # 获取所有行
  18. lines = str(content).split('\n')
  19. units = [1, 2, 3, 5, 7, 8, 9, 11, 12, 13]
  20. header = '\x0cUNIT '
  21. # print(lines[0:100])
  22. count = 0
  23. flag = False
  24. text = open('words.txt', 'w+')
  25. for line in lines:
  26. if line.startswith(header):
  27. flag = False
  28. count += 1
  29. if count in units:
  30. flag = True
  31. print(line)
  32. text.writelines(line + '\n')
  33. if '//' in line and flag:
  34. text_line = line.split('//')[0].split('. ')[-1]
  35. print(text_line)
  36. text.writelines(text_line+'\n')
  37. text.close()
  38. def _main():
  39. my_pdf = open('t1.pdf', 'rb')
  40. read_pdf(my_pdf)
  41. my_pdf.close()
  42. if __name__ == '__main__':
  43. _main()

其实看到lines =  str(content).split('\n')那一行就够了,我们可以把lines都print出来,就可以看到pdf里面的内容。

这样我们就可以把pdf文件处理看作简单的字符串数据处理了。接下来的脚本操作也不用过多解释了。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多