Я не думаю, что нужно брать каждую букву на странице и находить индекс первой буквы, вместо этого вы все равно можете выполнить:
pages_text.append(pdfReader.getPage(page).extractText())
и затем сделайте что-то вроде этого:
pages_text[0].split()
, который получит каждое слово из извлеченного текста, поэтому вместо индексации букв и необходимости выяснить, где слова начинаются и заканчиваются, у вас уже есть слова. На этом этапе я перебрал бы слова и нашел бы индекс слова, а затем добавил бы и вычел 50 из позиции этого слова и распечатал их. Я использовал его на первой странице PDF следующим образом:
import PyPDF2
import re
import os
pdfFileObj = open(r'C:\path','rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
number_of_pages = pdfReader.numPages
pages_text = []
words_start_pos = {}
words = {}
searchwords = ["pdf"]
word_pos = 0
print_words = []
word_pos = []
print_text = ''
line = []
for word in searchwords:
for page in range(number_of_pages):
pages_text.append(pdfReader.getPage(page).extractText())
text = pages_text[0].split()
for each_word in range(0, len(text)):
if(text[each_word] == "PDF"):
word_pos.append(each_word)
print(word_pos)
for each_pos in word_pos:
for each_word in range(each_pos-50, each_pos+50):
print_text = print_text +' ' + text[each_word]
line.append(print_text)
print_text = ''
print(line)
with open(r'C:\path', 'w') as f:
f.write('{0},{1},{2}\n'.format("Sheet Number", word, "File Name"))
for each_line in line:
f.write('{0},{1},{2}\n'.format(page + 1, each_line, r'C:\path'))
Примечание: я бы с осторожностью сохранял текст, извлеченный из PDF-файла, в CSV-файле, потому что в тексте могли быть запятые, которые могли бы испортить ваш CSV-файл. Надеюсь, это поможет!