Kategória: Linux všeobecne

Zmenené: 7. august 2012

Terminologický slovník

V minulom článku (Kompendium prekladov) som sa venoval vytvoreniu prekladateľského kompendia, s cieľom zvýšiť jednotnosť prekladov. Inou možnosťou je vytvorenie terminologického slovníka. V tomto význame je terminologický slovník myslený ako slovník najčastejšie používaných výrazov.

Generovanie slovníka

Na generovanie terminologického slovníka použijem nástroj poterminology, z projektu Translation toolkit. Je to nástroj, ktorý prejde zadané súbory PO a na základe nastavených kritérií vyberie krátke termíny (predvolene max. 3 slová), ktoré sa javia ako spoločné pre viacero súborov PO (predvolene 2) a zapíše ich vo formáte súboru PO, spolu s ich prekladmi.

Samozrejme, terminologický slovník možno generovať aj z jediného súboru PO (napríklad z kompendia), ale čím viac súborov PO má nástroj k dispozícii, tým môže spoľahlivejšie určiť množinu opakujúcich sa výrazov. Ale pekne po poriadku, najprv základné vygenerovanie terminologického slovníka:

poterminology -o terminology.po adresar/suborov/po

Ja som pracoval s aktuálnymi prekladmi XFCE4, kde je výsledok takýto:

processing68 files...
[###########################################] 100%
scanned68 files
13882 terms from 6493 units
1951 terms after thresholding
1759 terms after subphrase reduction

Ako si môžete prečítať vo výpise, nástroj spracoval 68 vstupných súborov, z ktorých vygeneroval spoločných 1 759 výrazov, z ktorých je:

  • 493 preložených
  • 85 nepresných
  • 1181 nepreložených

Prispôsobenie generovania

1 759 výrazov síce nie je z pohľadu vytvorenia slovníka veľa, veď aj Malý anglicko-slovenský slovník ich obsahuje viac ako 11 tisíc, ale mojim cieľom nie je vytvoriť anglicko-slovenský slovník, ale vytvoriť terminologický slovník, ktorý by poslúžil ako dobrý štart na ďalšie rozširovanie. Z tohoto pohľadu je 1 759 výrazov veľa.

Preto pri generovaní terminologického slovníka pridám ďalšie kritériá a aby ste si mohli utvoriť predstavu o ch vplyve, budem ich pridávať postupne, spolu výstupom. Ako prvú pridám voľbu –inputs-needed, ktorá udáva minimálny počet súborov PO, v ktorých sa musí príslušný termín nachádzať:

poterminology --inputs-needed=3 -o terminology.po adresar/suborov/po
processing 68 files...
[###########################################] 100%
scanned 68 files
13882 terms from 6493 units
676 terms after thresholding
637 terms after subphrase reduction

Sami vidíte, že zvýšenie hranice na tri súbory znížilo počet výrazov asi na tretinu. Skúsim pridať ďalšiu voľbu, a to –substr-needed, ktorá taktiež udáva minimálny počet súborov, v ktorých sa musí daná časť reťazca (ktorá bude použitá ako výraz terminologického slovníka):

poterminology --inputs-needed=3 --substr-needed=3 -o terminology.po adresar/suborov/po
processing 68 files...
[###########################################] 100%
scanned 68 files
13882 terms from 6493 units
655 terms after thresholding
621 terms after subphrase reduction

Tentokrát nebol pokles počtu výrazov taký vysoký, ale každopádne i táto voľba sa postará o to, že terminologický slovník bude používať výrazy, ktoré sú naozaj spoločné. Na záver mojich pokusov pridám ešte tretiu voľbu, –locs-needed. Táto voľba, na rozdiel od predošlých udáva minimálny počet výskytov na rôznych miestach zdrojového kódu:

poterminology --inputs-needed=3 --substr-needed=3 --locs-needed=3 -o terminology.po terminology.po adresar/suborov/po
processing 68 files...
[###########################################] 100%
scanned 68 files
13882 terms from 6493 units
631 terms after thresholding
598 terms after subphrase reduction

I tentokrát došlo k pomerne významnej redukcii počtu výrazov. Posledná voľba, –fullmsg-needed, je podobný svojou funkciou voľbe –substr-needed, ale pracuje nie s časťou reťazca prekladu, ale s celým reťazcom prekladu. Pridanie tejto voľby môže ovplyvniť zahrnutie krátkych reťazcov, ale v mojom prípade už znížilo počet reťazcov len o 4.

Samozrejme, informácie o zmene počtu výsledných výrazov v závislosti na použitých voľbách sa môžu líšiť, ak budete pridávať voľby v inom poradí, ale myslím, že ako ukážka možností postačia aj tu uvedené informácie. Okrem spomenutých volieb považujem za zaujímavé ešte voľby:

  • -F, –fold-titlecase mení formát Title Case na malé písmená (predvolené správanie)
  • -C, –preserve-case zachováva veľkosť písmen
  • -I, –ignore-case mení všetko na malé písmená

Ich použitie nechám na vás, ja som sa uspokojil s predvoleným správaním.

Čistenie slovníka

Teraz sa lepšie pozriem na výsledok generovania slovníka. Predošlým postupom vygenerovaný terminologický slovník je v pomerne zaujímavom stave:

msgfmt-o /dev/null--stat terminology.po
195 preložených správ, 54 nepresných prekladov, 345 nepreložených správ.

Toto znie pomerne sľubne, ale pri bližšom pohľade do súboru mi okamžite udrú do očí prekladateľské komentáre:

# (poterminology) po/midori.po (27)
#
# (poterminology) po/thunar-media-tags-plugin.po (3)
#
# (poterminology) po/terminal.po (6)
#
...

Okrem nich obsahuje slovník aj informácie o umiestnení reťazca v zdrojovom kóde:

#: ../Terminal.glade.h
#: ../xfburn/xfburn-burn-data-composition-base-dialog.c
#: ../xfburn/xfburn-adding-progress.c
...

Na účely, kvôli ktorým slovník vytváram (viď neskôr), však tieto informácie (komentáre) nepotrebujem. Na odstránenie prekladateľských komentárov síce existuje nástroj pocommentclean, ale pre moje potreby chcem odstrániť všetky komentáre, preto použijem sed:

sed -i '/^#/ d' terminology.po

Verte alebo neverte, odstránením komentárov sa zmenšila veľkosť súboru asi o 25 %, či bolo ich tam pomerne dosť. Upozorňujem, že tento príkaz odstráni aj príznaky nepresného prekladu, ak tieto chcete zachovať, treba upraviť regulárny výraz príkazu sed:

sed -i '/^#[^,]/ d' terminology.po

Vyčistenie prekladov

Po prečistení komentárov už samotný súbor obsahuje len anglické reťazce výrazov a ich preklady. Lenže ich preklady sú ďalším problémom, pretože mnohé preklady sa líšia, napríklad kvôli inému kontextu, napríklad:

msgid "failed"
msgstr ""
"zlyhal {po/thunar-vcs-plugin.po}; "
"zlyhanie {po/xfburn.po}; "
"Nepodarilo sa {po/thunar-shares-plugin.po}"

Teda v prípade konfliktného prekladu sú do reťazca prekladu pridané všetky nájdené formy, vrátane ich pôvodného umiestnenia. Pre mňa sú informácie o umiestnení pôvodného prekladu nepotrebné, a tak mám dve možnosti, ako to vyriešiť. Prvou je odstrániť:

msgfilter-i terminology.po -o vystup.po sed 's/ {[^}]\+}//g'

Výsledkom je súbor PO, ktorý obsahuje 249 preložených a 345 nepreložených reťazcov. No a reťazec prekladu z predošlého príkazu teraz vyzerá takto:

msgid "failed"
msgstr "zlyhal; zlyhanie; Nepodarilo sa"

Druhým spôsobom je vygenerovanie prázdnej šablóny, teda súboru kompletne bez prekladov. Týmto spôsobom síce prídete o všetky preklady, ale zato získate zoznam termínov/výrazov, ktoré sú do slovníka vhodné. Vygenerovať šablónu (prázdny súbor PO) možno malou úpravou predošlého príkazu:

msgfilter-i terminology.po -o vystup.po sed 's/ {[^}]\+}//g'

Takže znova použijem výraz z predošlého príkladu, ktorý teraz vyzerá takto:

msgid "failed"
msgstr ""

Použitie slovníka

Samotný terminologický slovník by bol úplne zbytočný, keby nebol použiteľný pri prekladoch. Prvé použitie, o ktorom viem, je jeho pridanie terminologického slovníka do servera Pootle. Ak sa nemýlim, do Pootlemožno pridať slovník vo formáte PO, takže stačí vygenerovaný slovník doprekladaťa je to!

Oveľa viac ma láka možnosť vytvoriť slovník, do ktorého možno pridávať alebo z neho odoberať výrazy, upravovať a vylepšovať preklady a podobne. Toto riešenie bolo vlastne pôvodným cieľom celého tohoto môjho snaženia a momentálne experimentujem s webovým slovníkom založeným na Glossword. Tento webový slovník umožňuje import výrazov slovníka vo formáte CSVa na to je potrebné súbor PO konvertovať do formátu CSV, čo však nie je problém, pretože existuje nástroj po2csv, ktorý celú prácu urobí za mňa:

po2csv --columnorder=source,target vystup.po vystup.csv

Príkaz jednoducho skonvertuje súbor vystup.po a výsledok zapíše do súboru vystup.csv:

"source","target"
"file","súbor"
"no","nie"
"display","displej; zobraziť; zobrazenie"
"failed","zlyhal; zlyhanie; Nepodarilo sa"

Samotná voľba –columnorder je použitá jednak kvôli tomu, že som so súboru PO odstránil informáciu o umiestnení reťazca v zdrojovom kóde a jednak preto, že túto informáciu nepotrebujem. Avšak, na import do slovníka Glossword je potrebné tento súbor CSV ešte upraviť, pretože Glossword používa viac ako dve polia:

  • IDvýrazu
  • výraz
  • t1
  • t2
  • t3
  • URIvýrazu
  • prepis alebo výslovnosť výrazu
  • text definície výrazu
  • skratka
  • preklad výrazu
  • použitie výrazu
  • pozri aj

Nie všetky polia dokážem zo súboru PO získať, vlastne dokážem získať len výraz a jeho preklad, ostatné bude potrebné v slovníka doplniť manuálne. Každopádne, najprv je potrebné zmeniť vygenerovaný súbor CSVtak, aby obsahoval prázdne položky pre polia, ktoré nebudú vyplnené. Pričom Glosswordočakáva polia oddelené znakom tabulátor (tu t) a bez úvodzoviek. Aj túto úlohu možno urobiť pomocou nástroja sed.

Pomocou sed zmením CSVz tohoto formátu:

"file","súbor"

Do formátu s prázdnymi hodnotami polí, ktoré nebudú vypĺňané (znova upozorňujem, že tabulátor je nahradený t):

\tfile\t\t\t\t\t\t\tsúbor

Keďže sa jedná o pomerne jednoduchú manipuláciu s textom, príkaz bude vyzerať takto:

sed 's/"\(.\+\)","\(.*\)"/\t\1\t\t\t\t\t\t\t\t\2/g' vystup.csv> import.csv

Výsledný súbor import.csv stačí naimportovať do Glossworda spolupráca na vylepšovaní slovníka môže začať!

Záver

Viem, že niektoré tímy používajú svoj terminologický slovník, často krvopotne vytvorený napríklad pomocou wiki. Nechcem diskutovať o jeho užitočnosti/použiteľnosti, pretože už to, že existuje jednoznačne potvrdzuje jeho potrebnosť a užitočnosť. Každopádne som týmto článkom chcel ukázať cestu tým tímom, ktoré svoj terminologický slovník nemajú.

Zároveň si myslím, že tu chýba akýsi celoslovenský terminologický slovník, ktorý by spájal to najlepšie z prekladov všetkých tímov, no možno raz