如何从python上的PDF文件中提取单词的多个实例?
Posted
技术标签:
【中文标题】如何从python上的PDF文件中提取单词的多个实例?【英文标题】:How to extract multiple instances of a word from PDF files on python? 【发布时间】:2021-01-22 18:56:27 【问题描述】:我正在 python 上编写一个脚本来读取 PDF 文件并记录在每个提到“时间”的实例之后出现的字符串以及它所提到的页码。
我已经让它识别每个页面上何时有字符串“时间”并将页码发送给我,但是如果页面不止一次有“时间”,它不会告诉我。我假设这是因为它已经满足了字符串“时间”至少一次的标准,因此它会跳到下一页来执行检查。
如何查找“时间”一词的多个实例?
这是我的代码:
import PyPDF2
def pdf_read():
pdfFile = "records\document.pdf"
pdf = PyPDF2.PdfFileReader(pdfFile)
pageCount = pdf.getNumPages()
for pageNumber in range(pageCount):
page = pdf.getPage(pageNumber)
pageContent = page.extractText()
if "Time" in pageContent or "time" in pageContent:
print(pageNumber)
另外作为一个附注,这个 pdf 是一个扫描的文档,因此当我在 python 上阅读文本(或复制并粘贴到 word 上)时,有很多单词会出现多个随机符号和字符,即使它非常完美易读。这是计算机编程的限制,而无需应用更复杂的概念(例如机器学习)来准确读取文件?
【问题讨论】:
【参考方案1】:一种解决方案是在 pageContent 之外创建一个字符串列表,并计算列表中单词“时间”的频率。选择“时间”后面的单词也更容易 - 您可以简单地检索列表中的下一项:
import PyPDF2
import string
pdfFile = "records\document.pdf"
pdf = PyPDF2.PdfFileReader(pdfFile)
pageCount = pdf.getNumPages()
for pageNumber in range(pageCount):
page = pdf.getPage(pageNumber)
pageContent = page.extractText()
pageContent = ''.join(pageContent.splitlines()).split() # words to list
pageContent = ["".join(j.lower() for j in i if j not in string.punctuation) for i in pageContent] # remove punctuation
print(pageContent.count('time') + pageContent.count('Time')) # count occurances of time in list
print([(j, pageContent[i+1] if i+1 < len(pageContent) else '') for i, j in enumerate(pageContent) if j == 'Time' or j == 'time']) # list time and following word
请注意,此示例还会从非字母或数字字符中删除所有单词。希望这足以清除坏的 OCR。
【讨论】:
这很完美,因为文字很清楚!我现在的问题是:更先进的机器学习方法是获得正确光学字符读数的唯一其他方法吗?就目前而言,由于正在扫描,PDF 仍然无法完全匹配单词。 你可以先试试pytesseract。以上是关于如何从python上的PDF文件中提取单词的多个实例?的主要内容,如果未能解决你的问题,请参考以下文章
如何让 Python 从文本文件中读取和提取单词? [复制]