Я перебираю документ по абзацам, затем разбиваю текст каждого абзаца на предложения по .
(точка с пробелом). Я разбиваю текст абзаца на предложения,чтобы сделать текстовый поиск более эффективным по сравнению с поиском в целом тексте абзаца.
Затем код ищет ошибку в каждом слове предложения, ошибка берется из базы данных исправления ошибок. Я показываю ниже упрощенный код:
from docx.enum.text import WD_BREAK
for paragraph in document.paragraphs:
sentences = paragraph.text.split('. ')
for sentence in sentences:
words=sentence.split(' ')
for word in words:
for error in error_dictionary:
if error in word:
# (A) make simple replacement
word = word.replace(error, correction, 1)
# (B) alternative replacement based on runs
for run in paragraph.runs:
if error in run.text:
run.text = run.text.replace(error, correction, 1)
# here we may fetch page break attribute and knowing current number
# find out at what page the replacement has taken place
if run.page_break== WD_BREAK:
current_page_number +=1
replace_counter += 1
# write to a report what paragraph and what page
write_report(error, correction, sentence, current_page_number )
# for that I need to know a page break
Проблема заключается в том, как определить, содержит ли прогон (или другой элемент абзаца) разрыв страницы? run.page_break == WD_BREAK
работает? @scanny показал как добавить разрыв страницы, но как его идентифицировать?
Лучше всего, если можно определить также разрыв строки в абзаце.
Я мог бы сделать:
for run in paragraph.runs:
if run._element.br_lst:
for br in run._element.br_lst:
br_couter+=1
print br.type
Однако этот код показывает только жесткие разрывы, то есть разрывы, вставленные с помощью Ctrl+Enter. Мягкие разрывы страниц не обнаруживаются... (Мягкие разрывы страниц формируются, когда пользователь продолжает печатать до тех пор, пока страница, на которой он находится, не закончится, а затем он переходит на следующую страницу)
Любые подсказки?