在Python中从PDF文件的文本中添加页码

时间:2019-11-23 11:45:41

标签: python pdf text

以下Python程序读取PDF文件并收集该文件中使用的唯一单词。

import PyPDF2
import re

print('process started')

pdfFile = open('pdf_file.pdf', 'rb')
pdfFileReader = PyPDF2.PdfFileReader(pdfFile)
pdfFilePageCount = pdfFileReader.numPages

pdfPageText = ""
for i in range(pdfFilePageCount):
    pageObj = pdfFileReader.getPage(i)
    pdfPageText += pageObj.extractText()

pdfPageText = pdfPageText.lower()
pdfPageText = re.sub(r'[^a-zA-Z]+', ' ', pdfPageText)
listOfWords = pdfPageText.split()

setPage = set(listOfWords)  

textFile = open('text_file.txt', 'w')
for item in listOfWords:
  textFile.write("%s\n" % item)

textFile.close()
pdfFile.close()
print('process ended')

是否可以在每个单词后添加页码(即表明从哪个页面中选择了它们)?

例如,如果在多个页面中都找到了单词“ xyzabc”,我需要将它们全部列出如下:

xyzabc (1,22,130, ...)

1 个答案:

答案 0 :(得分:1)

您可以创建一个以单词为键的字典,并为其指定页码列表。

使用defaultdict可以轻松附加页码。

您还必须在每个循环中更新字典,如此处修改的代码所示:

import PyPDF2
import re
from collections import defaultdict

print('process started')

pdfFile = open('pdf_file.pdf', 'rb')
pdfFileReader = PyPDF2.PdfFileReader(pdfFile)
pdfFilePageCount = pdfFileReader.numPages

wordsAndPages = defaultdict(list)

pdfPageText = ""
for page in range(pdfFilePageCount):
    pageObj = pdfFileReader.getPage(page)
    pdfPageText = pageObj.extractText()
    print(pdfPageText)
    pdfPageText = pdfPageText.lower()
    pdfPageText = re.sub(r'[^a-zA-Z]+', ' ', pdfPageText)
    listOfWords = pdfPageText.split()

    for word in listOfWords:
        wordsAndPages[word].append(page)


textFile = open('text_file.txt', 'w')
for word, pages in wordsAndPages.items():
    output = '{} ({})\n'.format(word, ','.join([str(page) for page in pages]))
    textFile.write(output)

textFile.close()
pdfFile.close()
print('process ended')

您最终可以按预期格式输出数据。