Esperantilo Blogo en Esperanto pri projekto Esperantilo kaj komputila lingvistiko

14.10.2007

Kiel programi maŝinan tradukadon por nova lingvo en Esperantilo?

Filed under: maŝina tradukado,programado — artur @ 10:48

Iafoje mi ricevas leterojn de uzantoj de Esperantilo, kiu dezirus maŝinan tradukadon al ilia nacia lingvo. Esperantilo nun subtenas la maŝinan tradukadon al 3 lingvoj, sed mi nuntempe okupas nur pri pola lingvo. Estas ĝenerale konata fakto, ke programado de maŝina tradukado ne estas triviala tasko. Alikaze ni delonge havus multajn altnivelajn tradukajn programojn por multaj lingvoj. Fakte nur kelkaj profesiaj firmaoj agas en tiu kampo kaj nombro de subtenataj lingvoj estas malgranda. Esperantilo ne estas planita por subteni dekomence multajn lingvojn. Do ĉiu nova subtenata lingvo bezonas novan planadon kaj programadon. Mi ankaŭ konscie okupis nur pri unudirekta traduko el Esperanto al nacia lingvo, ĉar tiu direkto ŝajnas havi malpli multajn obstaklojn pro trajtoj de esperanta lingvo. Mi tamen dekomence de programado planis la izolon de partoj de programo, kiuj estas dependaj de lingvo kaj partoj, kiuj estas ĝeneralaj pro maŝina tradukado mem. Tial la tradukado al tiuj 3 lingvoj uzas en 80% la saman programan bazon. Nur la plej specifaj fragmentoj estas programitaj en tn. traduka modulo por koncerna lingvo. Ankaŭ la proceso de tradukado mem ebligas la reuzon de grandaj partoj de programo por diferencaj lingvoj.

La proceso de programado estas

  1. Analizo de fonta teksto
  2. Kreado de tradukaj strukturoj
  3. Trovo de vortoj
  4. Gramatika transformigo kaj reordigo (Tiu parto dependas de cela lingvo)
  5. Kreado de rezulta teksto

Esperantilo enhavas ankaŭ multajn partojn, kiuj ne servas direkte en proceso de tradukado, sed tamen influas la kvaliton kaj la uzeblecon de tuta sistemo.
Tiuj partoj estas:

  • Pritrakto de diferencaj tekstaj formatoj (XML, HTML, OpenOfficem, Word)
  • Interaktiva tradukado
  • Traduka memoro
  • Administracio de vortaroj
  • Esperanta Vortfarado
  • Prilaboro de esperantaj tekstoj

Tial Esperantilo povus bone servi kiel baza sistemo por aliaj tradukaj sistemoj, ĉefe en direkto de Esperanta lingvo al nacia lingvo. Due oni povus reuzi la tradukan modulon de iu ekzistanta lingvo por krei tradukan modulon de similspeca lingvo. Ekzemple la traduka modulo de pola lingvo povus esti uzata kiel ŝablono por ĉiu slava lingvo. La germana kaj angla moduloj povus esti ŝablonoj por aliaj multnombraj germanaj lingvoj. Tamen mi ne kredas, ke la sintaksa analizo de esperanta lingvo en Esperantilo estus sufiĉa por traduko al lingvoj, kiuj tre diferencas de Esperanto. Temas precipe pri struktura (sintaksa) malsimileco.

Antaŭ ol vi decidis okupi pri maŝina tradukado

Maŝina tradukado postulas multajn konojn kaj vastan scion. Do oni devus longe prepari por tiu tasko. Oni devus eklerni multajn novajn kampojn kaj profundigi jam konatan scion. Do tio ne estas okupo por unu semajno aŭ iu instrua projekto. Tamen ekzistas sufiĉe multaj homoj, kiuj jam havas vastajn spertojn kaj delonge okupas pri tiu temo. Esperantilo estas io, kio povus esti interesa por homoj, kiuj volas havi ion praktikan. Ankaŭ kiel ŝatokupo estas eble en longa tempo fari ion, kio funkcias kaj havas trajtojn de tn. serioza aŭ profesia okupo. Por mi la atributo „profesia“ signifas nur, ke temas pri mono, kiun oni ricevas aŭ devas pagi. En tiu senco la sistemo Esperantilo ne estas profesia.

Mi povas helpi al ĉiu, kiu volas mem plukonstrui aŭ reuzi la sistemon Esperantilo, sed
mi devas dekomence substreki, ke la plej grandan laboron oni devus fari mem. Oni devas mem studi la komputilan lingvistikon, lerni programajn lingvojn kaj gramatikon. La projekto estas tute malferma kaj libera. Ĉiujn fontojn mi publikigas libere. Do oni ankaŭ povus sen mia helpo rekonstrui kaj adaptigi la sistemon por ĉies kialoj. Ekzistas multaj informoj en mia blogo kaj sur la TTT-paĝoj de Esperantilo. Ankaŭ pri aliaj teknikoj oni povas multe legi en interreto.

Due vi devas pripensi, ĉu vi eblas trovi sufiĉe da lingvistika materialo. Ĉu ekzistas liberaj glosaroj por koncerna lingvo? Ĉu ekzistas bonaj priskriboj de gramatiko? Ĉu aldonaj informoj pri fleksio ankaŭ estas uzeblaj? Mi ofte reuzas aliajn liberajn materialojn. La ideo „Programi tradukan sistemon tute de komenco“ estas tre malespera okupo.

EsperantiloSDK – Programa medio de programo Esperantilo

Por programi la programon Esperantilo mi uzas iom ne veste konatan programan medion. La baza programa lingvo estas Tcl. Eldone la programo estas skribita laŭ objektema maniero helpe de XOTcl. La programa medio estas XOTclIDE. Mi kredas, ke XOTcl kaj XOTclIDE ebligas la uzon de programa lingvo TCL en grandaj projektoj. Tiuj teknikaj iloj estas malofte uzataj. Sed la ideoj devenas de aliaj medioj, kiuj normale estas veste konataj. Do Tcl similas al C, Java kaj aliaj skriptaj lingvoj. XOTcl estas simila al Java, C++, Ryby kaj Python. Fine la programa medio XOTclIDE estas programita en tradicio de medioj por programa lingvo Smalltalk, kiuj influis ankaŭ aliajn programajn mediojn. Do sperta programisto ne trovas en tiu medio vere ion novan.

Mi preparis la tutan programan medion kiel EsperantiloSDK.
Vi povas facile instali ĝin sur vindozo kaj linukso. Sen aldonaj obstakloj vi povas uzi la programon, trarigardi ĝian programfonton kaj adaptigi kaj plivastigi ĝin.

Taskoj ĉe programado de nova traduka modulo

Oni povas tiujn laborojn distingi inter lingvistikaj taskoj kaj programaj taskoj.

Lingvistikaj taskoj

  • Kolektado de informoj pri gramatiko de cela lingvo.
    • Fleksio de substantivoj, verboj kaj adjektivoj
    • Fleksio de pronomoj
    • Projektado de fleksiaj grupoj kaj priskriboj en vortaro
    • Reguloj pri vortordo
    • Reguloj pri traduko de subfrazoj
    • Reguloj pri vortfarado
    • Korelativoj
  • Mana preparo de ekzemplaj tradukoj
  • Preparo de vortaro (vortlistoj kaj priskriboj)
  • Preparo de esceptoj en fleksio (ekzemple anglaj fortaj verboj: take, took, token)
  • Testado de sistemo

Programaj taskoj

  • Krado de nova traduka modulo kiel kopio de iu ekzistanta modulo
  • Programado de generatoro por fleksio
  • Programado de generatoro por numeroj
  • Programado de esceptoj kaj specialaj reguloj

Ellerno de sistemo. Praktikaj sugestoj

Jam en normala eldono de Esperantilo vi povas lerni iom pri proceso de tradukado.
Vi povas uzi tiujn funkciojn.

  • Menuo – Redaktu->Montru Sintakso – Analizo de fonta teksto
  • Menuo – Redaktu->Inspektu tradukon de frazo – Analizo de tradukado

sintakso-inspect

traduko-inspect
La sistemo XOTclIDE enhavas multajn ilojn por inspektado de programaj strukturoj kaj proceso de tradukado.
Se vi uzas la EsperantiloSDK, vi havas ankaŭ aldonajn eblojn.
La duopa klako en montrilo de sintakso sur iu elemento malfermigas tn. inspektan fenestron, en kiu
vi povas inspekti la variablojn kaj metodojn de iu elemento.
La proceso de tradukado estas bone priskribita en artikolo „Kiel komputilo tradukas?“.
Ekzistas ankaŭ multaj aliaj artikoloj pri tiu temo.


objektoinspektilo
Se vi jam scias ion pri programa lingvo Tcl, XOTcl kaj la programa medio XOTclIDE, vi povus tuj trarigardi la programfonton de programo kaj tuj adaptigi la sistemon en fenesto Component Browser. Atentu, ke XOTclIDE estas interaktiva sistemo. Tio signifas, ke vi samtempe povas kuri la programon kaj programi ĝin.

Konkretaj informoj pri programado

Se vi lanĉis EsperantiloSDK vi vidas fensetron de XOTclIDE, sed ankaŭ fenestro kun nomo EsperantiloCentro. De tiu lasta fenestro vi povas lanĉi la konatan redaktilon de Esperantilo kaj ankaŭ atingi kelkajn specialajn funkciojn per programado.


esperantilcentro
Por programado de maŝina tradukado estas gravaj subaj programaj moduloj.

Modulo Priskribo
EspSintaksaAnalizo Anazizo de esperanta teksto
EspTradukilo Bazaj funkcioj por tradukado
EspPlTradukilo traduka modulo por pola lingvo
EspDeTradukilo traduka modulo por germana lingvo
EspEnTradukilo traduka modulo por angla lingvo

Precipe vi devas „nur“ programi vian propran Esp??Tradukilo.

Tie vi povas vidi la priskrobjn de eroj de programo. Tamen mi sugestas trarigardi la fontprogramon kaj programan strukturon de Esperantilo tuj en EsperantiloSDK per modulomontrilo (angle: Component Browser).

Mi nun volas priskribi kelkajn teknikojn, kiujn vi povas uzi dum adaptado de modulo.

En ceteraj kazoj la vortoj de cela lingvo estas enmetitaj direkte en la programa fonto. Tial vi povas vidi la fremdlingvan vorton de la baza lingvo, kiu ne venas de vortaro, en la cela teksto.
Vi povas trovi facile la lokon en programo, kiu tion kaŭzis per serĉado de teksto en modulomontrilo.
Uzu la menuon (Method->Search Text->In Component.


method-search-which
Ofte iu metodo faras pli ol vi bezonas. Vi povas simple forigi la metodon (menuo: Method->Delete). La programo uzas en tiu kazo la pli bazan metodon kaj la programo daŭre funkcias.

Vi povas kompari metodojn de aliaj moduloj per funkcio (menuo: Method->Search Implementers.

La baza klaso, kiu respondas pri la tradukado estas FrazTraduko en modulo EspTradukilo. Vidu la metodon traduku.

Modulomontrilo

Ĉiuj vortoj estas objektoj, kiuj devenas de derivita klaso de la klaso TradukElemento.
Ekzemple ĉiu pola substantivo estas objekto de klaso ETPlSubstantivo.
Tiu klaso havas tiujn parencojn:

ETPlSubstantivo
  ETPlTradukElemento
  ETSubstantivo
    ElemTraduko
       ArboFolio
          ArboElemento

Vi povas rigardi la parencajn strukturojn per Heritage Browser, kiun vi lanĉas per
Class->Heritage Browser. Kiel vi vidas, la programo Esperantilo uzas konsekvence la objekteman programadon. La klaso „ETSubstantivo“ estas uzata en ĉiujn tradukajn modulojn kaj enhavas bazajn trajtojn de substantivo.


heritagebrowser
Se vi modifis unu metodon (funkcion) kaj ĝi ne funkcias, vi povas senprobleme reveni al malnova eldono. Do ni ne bezonas komenti aŭ malkomenti partojn de programo. Uzu la menuon: (Method->Version Control->$gt;Editions) aŭ (Method->Version Cotrol->Previous Version).

En ĉiu metodo, vi povas enmeti tn. haltpunkton (Breakpoint). Por tiu vi skribu en aldona linio: my halt. (Vi devas aldone enlegi la novan metodon per menu Edit->Save aŭ klavkombino Ctrl-S)
Se la programo denove uzas tiun metodon, vi povas inspketi la fluon de programo en sencimilo (debugger). Tiel vi ofte povus pli ekkoni pri programo ol nur legante la statikan programfonton. Vi povas pluruli la programon per butono Resume.


sencimilo

La preciza priskribo de tuta programo ne estas praktika. Pli bone estas lernia la programan lingvo kaj legi la programon direkte.

Kiel komenci?

Se vi estas preta komenci vian okupon pri programado de Esperantilo, kontaktu min. Eble mi povus fari la plej malfacilajn taskojn por la komenco aŭ doni al vi kelkajn rimarkojn.

Powered by WordPress