Нужно распарсить xml, выдрать оттуда нужные тэги и запомнить смещения этих тэгов от начала исходного xml.
xml выглядит как-то так (docx, pptx, odt и т.д.):
<w:r>
<w:rPr>
<w:sz w:val="36"/>
<w:szCs w:val="36"/>
</w:rPr>
<w:t>w</w:t> <!-- :( -->
</w:r>
Нужно получить offset w.
Самоочевидный такой вариант:
from lxml import etree
text = open('/devel/tmp/doc2/word/document.xml', 'r').read()
root = etree.XML(text)
start = 0
for e in root.iter("*"):
if e.text:
offset = text.index(e.text, start)
l = len(e.text)
print 'Text "%s" at offset %s and len=%s' % (e.text, offset, l)
start = offset + l
Но если в e.text будет «w», «a» и т.д., то будет найден индекс не тэга, а чего попало.