Как с помощью библиотеки python-docx извлечь химическую формулу из текста ячейки таблицы и перенести ее в другую таблицу?
Если копировать, как текст, то нет разницы между цифрой в верхнем, нижнем или обычном регистре
Пример таблицы
Ответ
В версии 0.8.6 python-docx этот функционал отсутствует, даже нужного пространства имен нет и нигде нет упоминания нужных тегов, то есть нет ни единого упоминания возможности работы с математическими элементами. Формулы из Word, например, в сыром виде выглядят как-то так. Исходная формула: ex=sin(x)
docx:
То есть вы можете попробовать спуститься в самый адок и обращаться с docx, как с набором XML документов. И вам необходимо найти в параграфе, в ячейке, где хотите нужный тег и потом вставить также в новый параграф, ячейку, куда хотите. Вот такой вот примерчик приведу. Он копирует формулу из одного документа, в пустой другой документ. В исходном документе нет ничего, кроме этой формулы. Однако, я бы уверенно себя не чувствовал на этом пути, даже если простой пример и работает. Также вместо тупого итерирования вы можете отыскать нужный элемент с тегом
import docx
d = docx.Document("formula_test.docx")
new_doc = docx.Document()
new_para = new_doc.add_paragraph()
new_para_elem = new_para._element
para_with_formula = d.paragraphs[0]
# Это уже объект типа CT_P, родителем которого является lxml.Element
elem = para_with_formula._element
# Пространство имен `m` xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math"
tmp_ns = {"m": "http://schemas.openxmlformats.org/officeDocument/2006/math"}
math_tag_with_namespace = "{" + tmp_ns["m"] + "}oMathPara"
for i in elem.getiterator():
if i.tag == math_tag_with_namespace:
print("OH! A formula!")
new_para_elem.append(i)
new_doc.save("NEW_DOC.docx")
Как результат - в новом документе исходная формула.
Комментариев нет:
Отправить комментарий