LINUX.ORG.RU

Импорт Office Open XML, преобразование (перевод), экспорт в тот же формат

 , ,


0

2

Возникла задача для локальных нужд написать некий аналог google translate toolkit, который позволяет импортировать docx, odt и т.д., выполнять перевод, а дальше делать экспорт в тот же формат файла с сохранением форматирования.

Зачем? GTT коверкает разметку - как минимум, портит шрифт и игнорирует комментарии.

Есть всякие традосы с memoq, которые грамотно заменяют теги и восстанавливают форматирование, но они под w~ и стоят денег.

Изначально я попробовал скопипастить принцип с omegat, конвертить всю структуру ooxml в текст вида:

<t1/>text <t2/>lol
, где XML-шелуха заменяется на последовательные <t1/>[tail], но иногда возникают проблемы при изменении порядка следования тегов (<t2/>лол <t1/>текст): приходится таскать все эти w:rPr внутри документа. Но и это не особо напряжно. Более актуальна тема с огромным количеством тегов, например, из-за того, что ворд решил сделать такую разметку:
вместо <b>some bold</b> сделать <b>som</b><b>e</b> <b>bold</b>

что после преобразования приобретает вид
<t1/>som<t2/>e <t3/>bold
Давать юзеру такое крайне некрасиво. Причем порой доходит до какого-то полнейшего абсурда, когда стиль применяется побуквенно, что порождает умопомрачительное количество тегов.

Если конвертить параграфы в html, то гарантированно возникают проблемы с обратным преобразованием. Вдобавок придется писать пачку парсеров под каждый формат.

Задача состоит в том, что нужно заменить xml-теги на какие-то линейные сабсты без вложенностей, которые можно скормить переводчику/корректору, а далее восстановить по этим сабстам оригинальное форматирование. Хотел бы поинтересоваться у знакомых с этой темой, как эта задача вообще решается, потому что у меня закончились идеи, как это сделать без написания «честного» парсера под каждый формат.

Как БЫ я это сделал:

  • Раздобыть DTD Office Open XML
  • Забиндить XML документа на объект класса в Java с помощью JAXB/JIBX.
  • Работаем с объектом - сохраняем обратно в XML.
ZUKMAN ()

1. Линеаризуем XML. Для каждого символа получаем стек b/em/p/...

2. Для каждой комбинации ставим некоторый идентификатор: t1 = «b», t2 = "".

3. Ставим метку идентификатора при смене стиля. «<b>som</b><b>e</b> <b>bold</b>» => «<t1>some bold<t2>»

4. После обработки делаем обратное преобразование

monk ★★★★★ ()

Я бы попробовал прикрутить po4a - один чёрт поддержка DocBook в нём уже есть, думаю, прикрутить ooxml будет не сложно.

undertaker ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.