Как изменить конец текстового содержимого lxml etree.Element в Python3?

В настоящее время я работаю над проектом обработки естественного языка на Python. У нас есть html-тексты научных статей, которые мы анализируем с помощью Pythons lxml.etree и сохраняем как Elements и ElementTrees. Некоторые из наших html-текстов фактически преобразованы в pfs с помощью pdf2htmlEX (https://github.com/coolwanglu/pdf2htmlEX). Этот конвертер превращает каждую строку статьи в div, удаляя пробелы из конечных строк.

Итак, этот html:

<div>This is a</div>
<div>sample text.</div>

... анализируется следующим образом:

This is asample text.

Обратите внимание на отсутствие пробелов между «a» и «sample».

Мне нужно, чтобы это выглядело так:

This is a sample text.

Мне нужно как-то вручную добавить пробел в конец строки. У Etree есть атрибут Element.text, и Element.text можно изменить, как и любые другие строки. Element.text + = '' приводит к добавлению пробела в конец .text. Однако .text будет идти только до первого дочернего тега. Рассмотрим следующий код:

html = '<div>This is a <strong>sample</strong> text.</div>'
el = etree.fromstring(html)
print(el.text)

Напечатанный результат:

'This is a '

К сожалению, у Element нет атрибута для достижения конец текста. Если вы хотите использовать все текстовое содержимое элемента, вам нужно использовать '' .join (el.itertext ()). К сожалению, по нескольким причинам мне нужно напрямую изменить текстовое содержимое элементов. Сохранение результатов itertext и использование их в остальной части кода для меня сейчас не вариант.

Чтобы добавить еще один вызов, существуют разные варианты одной и той же проблемы:

html_1 = <div>This is a <strong>sample</strong> text.</div>
html_2 = <div>This is a sample <strong>text.</strong></div>

Это разные случаи: html_1 имеет конечную строку в элементе div, а html2 - в сильном.

Есть ли решение, в котором я могу добавить пробел в конец строки в элементе?

Это может помочь вам понять свойство tail элемента, которое содержит текст после конечного тега элемента, но перед начальным тегом следующего родственного элемента. Это хорошо описано здесь: infohost.nmt.edu/~shipman/soft/pylxml/web/etree-view.html.

mzjn 06.11.2018 15:57

Спасибо, что полностью решили мою проблему!

Gergely 08.11.2018 09:34
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
149
0

Другие вопросы по теме