当前位置:   article > 正文

用python提取pdf文字做关键字筛选进阶_python数据采集-多pdf文档进行关键字数据检索

python数据采集-多pdf文档进行关键字数据检索
  1. import os
  2. import pandas as pd
  3. import pdfplumber
  4. import re
  5. # 设置 PDF 文件夹路径
  6. pdf_folder_path = r"C:\Users\win10\Desktop\pdf_files"
  7. # 读取原始 Excel 文件并获取 pdf_filename 列
  8. df = pd.read_excel(r'C:\Users\win10\Desktop\工作簿2.xlsx')
  9. pdf_filenames = df["pdf_filename"].tolist()
  10. # 创建空列表用于存储结果
  11. conclusion_pages = []
  12. # 遍历每个 PDF 文件并提取符合条件的文本
  13. for filename in pdf_filenames:
  14. # 拼接 PDF 文件的完整路径
  15. pdf_path = os.path.join(pdf_folder_path, filename)
  16. # 清空 conclusion_pages 列表,以便处理下一个 PDF 文件
  17. conclusion_pages.clear()
  18. with pdfplumber.open(pdf_path) as pdf:
  19. # 遍历每一页
  20. for page_num, page in enumerate(pdf.pages, start=1):
  21. if page_num < 15:
  22. continue
  23. # 获取当前页的全部文本内容
  24. text = page.extract_text()
  25. # 提取包含关键字的部分文本
  26. conclusion_text = re.search(r"\bConclusion\b", text)
  27. summary_text = re.search(r"\bSummary\b", text)
  28. if conclusion_text and summary_text:
  29. # 找到关键字所在行,并获取该行内容
  30. conclusion_line = text[conclusion_text.start():].split("\n", maxsplit=1)[0]
  31. conclusion_page_text = conclusion_line + "\n"
  32. # 从关键字所在行开始往下逐行提取文本,直到遇到空行为止
  33. for line in text[conclusion_text.end():].split("\n"):
  34. line = line.strip()
  35. # 判断该行是否为页码,如果是则跳过
  36. if re.match(r"^\d+\s*$", line):
  37. continue
  38. if not line:
  39. break
  40. conclusion_page_text += line + "\n"
  41. summary_line = text[summary_text.start():].split("\n", maxsplit=1)[0]
  42. summary_page_text = summary_line + "\n"
  43. # 从关键字所在行开始往下逐行提取文本,直到遇到空行为止
  44. for line in text[summary_text.end():].split("\n"):
  45. line = line.strip()
  46. # 判断该行是否为页码,如果是则跳过
  47. if re.match(r"^\d+\s*$", line):
  48. continue
  49. if not line:
  50. break
  51. summary_page_text += line + "\n"
  52. # 将包含关键字的完整页文本添加到列表中
  53. conclusion_pages.append(conclusion_page_text + "\n\n" + summary_page_text)
  54. # 将列表中的结果添加到原始 Excel 中的 "conclusion_page" 列
  55. df.loc[df['pdf_filename'] == filename, "conclusion_text"] = "\n\n".join(conclusion_pages)
  56. # 将结果保存到新的 Excel 文件中
  57. df.to_excel(r'C:\Users\win10\Desktop\工作簿3.xlsx', index=False)

特别是提取 "Conclusion" 和 "summary" 部分的逻辑封装成函数并复用,让代码的可读性更好,同时避免了重复代码的问题。

此外,你还把定义列表和清空列表操作移到了循环外部,避免了原来代码中可能会出现的问题,真正实现了对结果的正确处理。

正则匹配去除了带有的页数。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号