При запуске программа добавляет большой раздел выделенного текста в конце? - PullRequest
0 голосов
/ 21 марта 2019

Смысл сценария в том, чтобы разбить блок текста на предложения, а затем сгенерировать случайное число, чтобы увидеть, выделено ли предложение или нет. Когда приведенный ниже код выполняется, он вырезает все отдельные предложения и вставляет их в конец документа. Я ищу предложения, которые будут заменены, а не добавлены в конце.

from docx import Document
import re
from nltk import tokenize
import Funtion
import random
from docx.enum.text import WD_COLOR_INDEX

doc = Document('raw.docx')

rawdata = (Funtion.gettext('raw.docx'))

sen = tokenize.sent_tokenize(rawdata)

senlen = len(sen)

p = doc.add_paragraph()

for indsen in sen:
    rng = random.randint(1,11)
    if rng == 8:
        p.add_run(indsen).font.highlight_color = WD_COLOR_INDEX.YELLOW



doc.save('TTTCH.docx')   

1 Ответ

0 голосов
/ 21 марта 2019

Предложения добавляются в конце, потому что вы звоните

p = doc.add_paragraph()

, что добавляет абзац к концу документа, а затем вы звоните

p.add_run()

, который добавляет пробег к концу ранее созданного абзаца.

Вместо этого вам потребуется получить доступ к абзацам , уже созданным в документе.вместо того, чтобы создавать свой собственный.Как и в https://python -docx.readthedocs.io / en / latest / api / document.html # docx.document.Document.paragraphs Вы можете получить доступ к ним, например (*):

for paragraph in doc.paragraphs:
    # process paragraph in place

Полагаю, вы хотели бы использовать информацию по адресу https://python -docx.readthedocs.io / en / latest / api / text.html # абзац-объекты

Специально:

for paragraph in doc.paragraphs:
    text_being_read = paragraph.text
    # process text
    paragraph.clear()
    paragraph.text = "New stuff"
...