- Pradžia
- Atvejų analizės
- Struktūrizuotų dokumentų vertimas pirmyn ir atgal jų nesugadinant
Struktūrizuotų dokumentų vertimas pirmyn ir atgal jų nesugadinant
Sudėtingų dokumentų vertimas nesugadinant maketo: ištraukti tūkstančius segmentų, išsaugoti jų XML vietas ir be nuostolių įterpti atgal.
Paskelbta 2026-06-30Peržiūrėta 2026-07-02
Trumpai
- Problema
- Supakuoti dokumentai išbarsto verčiamą tekstą po XML intarpus, todėl neatsargus ištraukimas sugadina formatavimą arba praranda kelią atgal.
- Apribojimas
- Sistema turėjo versti didelius dokumentus išsaugodama segmentų tvarką, inline formatavimą, maketo metaduomenis ir suderinamumą su redaktoriumi.
- Sukurta sistema
- XML/ZIP konvejeris, kuris prieš eksportą į vertimo mainų formatą įrašo kiekvieno segmento elemento indeksą ir formatavimo kontekstą.
- Rezultatas
- Išversti failai atsidaro kaip žmogaus redaguoti originalai: ta pati struktūra, tas pats formatavimas ir jokio tylaus persilaužimo ar sugadinimo.
- Kur tai pritaikoma
- Tinka DI vertimo ir dokumentų automatizavimo projektams, kuriuose modelio išvestis turi saugiai grįžti į sudėtingus failų formatus.
- Technologijos
- Python XML/ZIP tooling · multi-format CAT interchange
Kodėl tai svarbu
Jei jūsų komanda planuoja sistemą su tais pačiais gedimo scenarijais — būtent nuo tokio mąstymo prasideda pirmas pokalbis.


Apžvalga
Apribojimas — visa užduotis: išversti supakuotą dokumentą, įdėtinį XML dalių ZIP archyvą su tūkstančiais verčiamų segmentų, išsaugant segmentų tvarką, inline formatavimą, maketo metaduomenis ir suderinamumą su redaktoriumi, kuriuo žmogus atsidarytų rezultatą. Niekas matomame puslapyje neturi pasislinkti: jokia pastraipa neperslenka, joks pusjuodis šriftas netampa paprastu, jokia lentelės langelio riba neišsiplečia už savo stulpelio. Vienintelis dalykas, kurį leidžiama pakeisti, — teksto kalba. Šis apribojimas atmeta kiekvieną trumpąjį kelią, traktuojantį dokumentą kaip eilutę, nes supakuotas dokumentas nėra eilutė — tai medis, o medis ir yra maketas.
XML medžio apėjimas ištraukiant tekstą
Supakuoti dokumentų formatai — teksto redagavimo, pateikčių ir skaičiuoklių šeimos, sukurtos pagal šį modelį, bei jų atvirų standartų atitikmenys — yra ZIP archyvai, laikantys XML dalių medį: viena dalis skirta pagrindiniam turiniui, kitos — stiliams, antraštėms, poraštėms, įterptai medijai ir jų tarpusavio ryšiams. Turinio dalyje tekstas, kurį skaitytojas mato kaip vientisą sakinį, žymėjime retai būna viena vientisa eilutė. Jis padalytas per kelis teksto elementus, įdėtus į formatavimo intarpus, ir vienas sakinys gali driektis per kelis intarpus, nes pusjuodis šriftas prasideda pusiaukelėje žodžio, nes nuoroda apima tris žodžius per vidurį, arba nes rengimo įrankio rašybos tikrinimas ar automatinis taisymas tyliai įterpė intarpo ribą dar gerokai anksčiau, nei kas nors pagalvojo apie vertimą. Procesas, dokumentą skaitantis sujungdamas matomą tekstą, jau prarado vieną dalyką, kurio jam prireiks rašant vertimą atgal: iš kurio XML elemento ir iš kurio jo intarpo kiekvienas fragmentas kilo.
Maketo metaduomenys gyvena vienu lygiu aukščiau už intarpus — puslapių lūžiai, skyrių savybės, sąrašų numeracija, lentelių tinklelio apibrėžimai — ir nė vienas iš jų nėra verčiamas turinys, todėl ištraukimas sąmoningai apribotas tik teksto lapų (leaf) mazgais. Apėjimas aplanko kiekvieną intarpą, ieškodamas iškeliamo teksto, bet niekada neliečia aplink juos esančių struktūrinių elementų — būtent todėl išversto dokumento puslapiavimas, numeracija ir lentelių išdėstymas lieka identiški originalui be jokio atskiro žingsnio jiems išsaugoti: jie tiesiog niekada nebuvo paliesti.
Šio sprendimo ištraukimo žingsnis niekada netraktuoja dokumento kaip teksto. Jis pereina XML medį dalimi po dalies, dokumento tvarka, aplankydamas kiekvieną intarpą su verčiamu turiniu, ir kiekvieną intarpą — ne kiekvieną sakinį, ne kiekvieną pastraipą — traktuoja kaip ištraukimo vienetą. Tai vienintelis detalumo lygis, kuriame „tiksliai įrašyti, iš kur tai kilo“ ir „matomas maketas nepaliestas“ gali galioti abu vienu metu. Dideliame dokumente toks apėjimas duoda gerokai daugiau nei tris tūkstančius segmentų — kiekvienas mažas, adresuojamas vienetas, o ne nediferencijuoto teksto gniužulo fragmentas.
Kodėl neištraukti teksto pagal turinį ir neįterpti atgal pagal atitikmenį
Akivaizdus trumpasis kelias — praleisti apskaitą: ištraukti visą matomą tekstą, jį išversti ir kiekvieną išverstą eilutę įterpti ten, kur dokumente rastas jos originalas. Jis žlunga dėl trijų atskirų priežasčių, ir bet kurios vienos pakanka jį atmesti. Dokumentuose eilutės kartojasi — tas pats mygtuko pavadinimas, tas pats įspėjimas, ta pati skyriaus antraštė — pasirodo dešimtis kartų, ir vien pagal turinį neįmanoma atskirti vieno pasikartojimo nuo kito, todėl atitikmens paieška pagal turinį arba išverčia kiekvieną pasikartojimą vienodai (klaidinga, kai jie atsiduria skirtinguose kontekstuose), arba pataiko į netinkamą pasikartojimą. Pats vertimas keičia žodžių tvarką: originalo sakinio žodžių tvarka retai išlieka nepakitusi po vertimo, todėl atitikmens tarp „teksto, kuris čia buvo“ ir „teksto, kuris čia dabar yra“ paieška nustoja būti patikima vos originalui pasikeitus. O formatavimo intarpai originaliame dokumente skaido eilutes visiškai nesusijusiai su prasme — žodis, perskeltas per du intarpus dėl stiliaus pasikeitimo pusiaukelėje, — tai net ne tekstas, kurį naivus ištraukiklis galėtų išskirti kaip vientisą vienetą atitikmeniui rasti, ką jau kalbėti apie teisingą įterpimą atgal. Pozicija — elemento vieta medyje — neturi nė vieno iš šių gedimo scenarijų, nes ji nepriklauso nuo to, ar turinys išliko atpažįstamas. Ji priklauso tik nuo to, ar medis vis dar tos pačios formos, kokios buvo apeitas.
Elemento indekso ir formatavimo konteksto įrašymas
Vien ištraukimas išsprendžia tik pusę problemos — teksto iškėlimas beverčia be patikimo būdo grąžinti vertimą lygiai į tą pačią vietą su lygiai tuo pačiu formatavimu. Todėl kiekvienas segmentas įrašomas kartu su daugiau nei jo tekstu: kurioje XML dalyje jis gyvena, jo indeksas tos dalies dokumento tvarkoje ir intarpo, iš kurio jis kilo, formatavimo kontekstas — pusjuodis šriftas, kursyvas, šriftas, kalbos žyma ir bet kokios kitos intarpo lygmens savybės, kurios kitaip būtų prarastos tą akimirką, kai tekstas iškeliamas į plokščią vertimo failą.
{
"segment_id": 1842,
"part": "word/document.xml",
"element_index": 5391,
"run_props": { "bold": true, "lang": "en-US" },
"text": "Continue to checkout"
}
Vienas ištraukto segmento įrašas — pozicija ir formatavimas keliauja kartu su tekstu, ne vien pats tekstas
Šis įrašas — visa sutartis tarp eksporto ir reimporto. Daugiau nei trys tūkstančiai tokių įrašų dideliame dokumente reiškia daugiau nei tris tūkstančius smulkių progų suklysti su pozicija, todėl apskaita turi būti tiksli, o ne apytikslė — segmentas, patalpintas per vieną elementą ne ten, klaidos neišduoda garsiai: jis tyliai priklijuoja išverstą tekstą prie netinkamo intarpo, o sugadinimas paaiškėja tik kam nors atidarius failą ir radus sakinį netinkamoje pastraipoje su netinkamu stiliumi.
Eksportavimas į vertimo mainų formatą
Kai kiekvienas segmentas ištrauktas ir indeksuotas, jis parašomas į plokščią vertimo mainų formatą, o ne perduodamas vertėjui kaip žaliavinis XML. Žaliavinis XML neša gerokai daugiau nei verčiamą tekstą — vardų sritis, stilių apibrėžimus, skyrių lūžius, įterptų objektų nuorodas — o tai pastatyti prieš žmogų vertėją ar CAT įrankį reiškia pakviesti lygiai tokio pobūdžio atsitiktinę klaidą, kurios visas šis sprendimas ir siekia išvengti: per žymėjimą besiritantis vertėjas gali netyčia pastumti žymą, sulaužyti vardų srities prefiksą arba „pataisyti“ tai, kas nebuvo sugedę. Plokščias mainų formatas visa tai nuima ir palieka tik tai, ko vertėjui ar vertimo atminties sistemai iš tikrųjų reikia: segmento identifikatorių, originalo tekstą ir vietą tikslinio teksto, po vieną sutampantį su ištraukimo metu užfiksuotais įrašais.
Ši formato riba atlieka naudingą darbą ir be saugumo naudos. Vertimo atminties atitikmenų paieška, terminijos patikros ir kokybės užtikrinimo etapai CAT įrankiuose veikia su plokščiais segmentų sąrašais — būtent tokios sutarties dauguma vertimo įrankių ir tikisi, todėl eksportavimas į ją, o ne savito formato kūrimas, reiškia, kad vertimo pusei nereikia jokio specialaus apdorojimo dokumentams, kilusiems iš supakuoto XML. Tai taip pat reiškia, kad segmentą galima naudoti pakartotinai: tas pats atsisakymo tekstas ar mygtuko pavadinimas, ištrauktas iš trijų skirtingų dokumento vietų, vertėją pasiekia kaip trys įrašai su trimis segmentų identifikatoriais — kiekvienas laisvas būti išverstas vienodai arba skirtingai, priklausomai nuo konteksto, vietoj to, kad ištraukimo žingsnis tyliai sujungtų juos į vieną, vos pastebėjęs sutapimą. Mainų formatas taip pat yra natūralus kontrolinis taškas: kiekvienas išeinantis segmentas turi žinomą identifikatorių, ir kiekvienas laukiamas grįžti segmentas turi tą patį identifikatorių, todėl vertimo metu prarastas ar padvigubintas segmentas tampa palyginama, pastebima klaida, o ne tylia.
Įterpimas atgal be nuostolių
Reimportas apverčia apėjimą. Kiekvienam išverstam segmentui sprendimas nuskaito jo įrašytą elemento indeksą ir formatavimo kontekstą, suranda tiksliai tą poziciją šviežioje originalaus dokumento XML medžio kopijoje ir įrašo į ją išverstą tekstą — atkurdamas intarpo formatavimo savybes, o ne tiesiog manydamas, kad išverstas tekstas gali paprasčiausiai pakeisti seną eilutę vietoje. Kai intarpo riba originale krito sakinio viduryje (pusjuodis pofragmentis, nuorodos apimtas fragmentas), įterpimo logikai tenka nuspręsti, kaip išverstas tekstas turi pasiskirstyti per tą patį intarpų rinkinį, nes tiesioginis simbolis-į-simbolį pakeitimas neišlaikys, kai išversto teksto žodžių tvarka ir ilgiai skiriasi nuo originalo.
Schema: XML ciklas pirmyn ir atgal — eksportas pereina dokumento XML medį, ištraukia kiekvieną verčiamą segmentą kartu įrašydamas jo elemento indeksą ir formatavimo intarpo kontekstą, parašo plokščią vertimo mainų failą; po vertimo reimportas nuskaito mainų failą, randa kiekvieno segmento originalų elemento indeksą ir įterpia išverstą tekstą su išsaugotais formatavimo intarpais, sukurdamas dokumentą, kuris atsidaro lygiai taip, kaip numatyta originalo struktūros.
Paskutinis žingsnis prieš pripažįstant išverstą failą baigtu yra struktūrinis, ne kalbinis: perkonstruotas XML privalo likti taisyklingas, ZIP konteineris privalo susipakuoti švariai, o dokumentas privalo atsidaryti toje pačioje rengimo programoje, kurią naudotų žmogus autorius — ne peržiūros programoje, ne konvertuotoje versijoje, o pačioje autorystės programoje — be taisymo raginimo ar pranešimo apie sugadinimą. Tai riba, apie kurią sukurtas visas sprendimas, nes kalbiniu požiūriu tobulas, bet struktūriškai sugadintas vertimas nėra rezultatas — tai pagalbos užklausa.
Kompromisai ir apribojimai
- Indeksais grįstas metodas laiko, kad originalaus dokumento XML struktūra tarp eksporto ir reimporto nepasikeičia. Jei šaltinio failas redaguojamas vertimui vykstant, įrašyti elementų indeksai reimporto metu gali rodyti į netinkamą elementą arba niekur.
- Formatavimo intarpai, originale skeliantys žodį pusiaukelėje, grįžtant atgal reikalauja atsargios sujungimo ir perskaidymo logikos; išversta frazė su kitokiu žodžių skaičiumi nei originalas be tokio apdorojimo tvarkingai neatitiks tų pačių intarpų ribų.
- Apskaita auga proporcingai segmentų skaičiui, ne abstrakčiam dokumento sudėtingumui — dokumente su trimis tūkstančiais segmentų yra trys tūkstančiai vietų, kur pozicijos ar formatavimo įrašas gali būti klaidingas, ir kiekviena iš jų — siauras, tylus gedimas, o ne garsus.
- Formatavimas, kurį vertėjas įveda pačiame mainų faile — tarkim, pabrėžimas, įprastas tikslinei kalbai — reimporto metu vis tiek turi tilpti į intarpų modelį; mainų formatas negarantuoja, kad vertimo pusėje pridėtas formatavimas keliauja atgal taip pat švariai, kaip originalo formatavimas.
- Šis sprendimas garantuoja struktūrinį vientisumą, ne vertimo kokybę. Sklandus, taisyklingai suformatuotas, bet visiškai neteisingas vertimas keliauja pirmyn ir atgal lygiai taip pat švariai, kaip ir teisingas — tai atskira problema, sprendžiama atskirais įrankiais.
- Suderinamumas su redaktoriumi tikrinamas empiriškai, prieš konkrečią tikslinę rengimo programą. Failas, švariai atsidarantis vienoje tos programos versijoje, automatiškai negarantuotas švariai atsidaryti kiekvienoje versijoje.
Šaltiniai ir tolesnis skaitymas
Susijusios atvejų analizės
Sistemos, kurias su šia sieja bendras apribojimas — pakartojimai, izoliacija, kaina, atkūrimas.
Kadrų tikslumo vaizdo įrašų lokalizavimas
Ilgi klipai lieka pririšti prie šaltinio laiko žymų, o originalus nevokalinis garsas išlieka po sintezuotu įgarsinimu.
WhisperX · XTTS voice cloning · Demucs · FFmpeg · CTranslate2Pirmiausia vietinė diktavimo sistema „macOS“
Kalba lieka vietoje, delsa maža, o įklijuojamas rezultatas gali atspindėti ekrano kontekstą nesugriūdamas pasikeitus vienai OS posistemei.
Swift / SwiftUI · whisper.cpp · Accessibility & CoreGraphics APIs