Institutionen för datavetenskap
Department of Computer and Information Science
Examensarbete
Utveckling av ett verktyg för länkning och
bedömning av översättningar
av
Joel Eriksson
LIUIDA/LITHEXG15/006SE
20150327
Linköpings universitet Institutionen för datavetenskap
Examensarbete
Utveckling av ett verktyg för länkning och
bedömning av översättningar
av
Joel Eriksson
LIU-IDA/LITH-EX-G--15/006--SE
2015-03-27
Handledare: Lars Ahrenberg
Examinator: Lars Ahrenberg
Sammanfattning
Idag finns det m˚anga system f¨or att bed¨oma och tolka ¨
overs¨attningar av texter. Det finns system som l¨ankar delar av en k¨alltext och en ¨overs¨attning, det finns en ¨aven tekniker f¨or att bed¨oma ¨overs¨attningar f¨or ge ett m˚att p˚a hur bra de ¨ar. Ett exempel p˚a en s˚adan teknik ¨ar Token Equivalence Method(TEM). Det finns dock f˚a program, om n˚agra, som utnyttjar b˚ade l¨ankning och bed¨omning p˚a ett s˚adant s¨att att de skulle kunna vara anv¨andbara vid till exempel spr˚akutbildningar. I detta arbete utvecklas just ett s˚adant program. Programmet som skapats kan segmentera och l¨anka parallella texter mot varandra helt automatiskt via inkopplade system. F¨or att ¨oka anv¨andarv¨anligheten s˚a visualiserar programmet ¨
aven l¨ankningen och till˚ater redigering av b˚ade segmentering och l¨ankning. L¨ankningen utnyttjas sedan f¨or att r¨akna ut och visa delar av TEM f¨or att ge ett m˚att p˚a ¨overs¨attningens kvalit´e.
Inneh˚
all
1 Inledning 1
1.1 Motivering . . . 1
1.2 Syfte . . . 1
1.3 Fr˚agest¨allning och systemkrav . . . 2
1.4 Avgr¨ansningar . . . 2 2 Bakgrund 3 2.1 Token-Equivalence Method . . . 3 2.2 L¨ankningssystem . . . 4 2.2.1 Anymalign . . . 4 2.2.2 GIZA++ . . . 5 2.2.3 Hunalign . . . 5 2.2.4 GMA . . . 5
2.3 System f¨or visualisering och redigering . . . 5
2.3.1 Cairo . . . 5
2.3.2 I*Link . . . 6
2.3.3 Yawat . . . 7
3 Metod 8 3.1 Verktyg och programmeringsspr˚ak . . . 8
3.1.1 Programmeringsspr˚ak . . . 8
3.1.2 L¨ankningssystem . . . 9
3.2 Systemutvecklingsmetodik . . . 9
4 Design och Implementation 10 4.1 Datahantering . . . 10
4.2 Anv¨andargr¨anssnitt . . . 13
4.2.1 Uppl¨agg . . . 13
4.2.2 Menyfunktioner . . . 14
4.2.3 Spara- och ¨oppna-funktioner . . . 15
4.2.4 Vy f¨or meningsuppdelning . . . 16
4.2.5 Vy f¨or meningsl¨ankning . . . 18
4.2.6 Vy f¨or visualisering . . . 19
4.2.7 Visualisering av ordl¨ankning . . . 20
4.2.8 Redigering av ordl¨ankning . . . 22
5 Diskussion och Resultat 23 5.1 Resultat . . . 23
5.2 Diskussion . . . 25
5.2.1 Metod . . . 25
5.2.2 Resultat . . . 26
1
Inledning
1.1 Motivering
Idag finns det m˚anga olika s¨att att bed¨oma och tolka ¨overs¨attningar av texter. Man kan till exempel koppla ihop meningar och ord i en
¨
overs¨attning med motsvarande i k¨alltexten. Detta brukar kallas f¨or att l¨anka tv˚a texter och idag finns det ¨aven system som g¨or detta automatiskt. Det finns ¨aven tekniker som anv¨ander sig av denna l¨ankning f¨or att
bed¨oma och ge ett m˚att p˚a hur bra en ¨overs¨attning ¨ar. ¨
Aven om dessa system och tekniker funnits under en viss tid finns det f˚a system som tar tillvara p˚a deras potential. Mer specifikt s˚a finns det inga system som ¨ar utvecklade f¨or den okunnige inom omr˚adet. I spr˚ak- och ¨
overs¨attarutbildningar skulle dessa tekniker kunna t¨ankas vara till stor anv¨andning. Eftersom ¨overs¨attningar ¨ar en stor del av dessa utbildningar s˚a skulle system som hj¨alper, till exempel en l¨arare, att studera en elevs ¨
overs¨attning b˚ade ¨oka f¨orst˚aelse av ¨overs¨attningarna samt spara tid.
1.2 Syfte
Syftet med detta arbete ¨ar att skapa ett program som anv¨ander
existerande system f¨or att l¨anka parallella texter med varandra och sedan visualisera detta p˚a ett ¨oversk˚adligt s¨att. Med tanke p˚a systemens m¨ojliga felmarginal ¨ar det viktigt att l˚ata anv¨andaren av programvaran redigera l¨ankningen p˚a ett l¨atthanterligt s¨att. F¨or att ¨oka anv¨andarv¨anligheten ska programmet till˚ata anv¨andaren att spara en skapad l¨ankning, f¨or att sedan kunna ¨oppna den vid ett senare tillf¨alle.
Programmet ska ¨aven kunna ber¨akna och presentera vissa delar av en teknik som kallas Token-Equivalence Method(TEM). Detta f¨or att ge ett m˚att av kvalit´en p˚a ¨overs¨attningen. TEM hanterar ordl¨ankning och segmentering lite annorlunda ¨an vanliga l¨ankningsmetoder, det ¨ar d¨arf¨or viktigt att systemet anpassas f¨or att st¨odja detta.
En viktig del ¨ar att programmet inneh˚aller ett grafiskt anv¨andargr¨anssnitt som ¨ar anpassat f¨or den okunnige inom omr˚adet. En anv¨andare b¨or allts˚a kunna anv¨anda programmet utan att f¨orst˚a hur bakomliggande tekniker fungerar.
1.3 Fr˚agest¨allning och systemkrav
F¨or att f˚a en klarare bild av programmet togs en lista av krav p˚a funktionalitet i programmet fram:
• En k¨alltext ska kunna l¨aggas in i systemet • En ¨overs¨attning ska kunna l¨aggas in i systemet
• Automatisk strukturering av texterna i stycken eller meningar med editeringsm¨ojligheter
• Automatisk tokenisering av texterna med editeringsm¨ojligheter • Taggning av ord
• Automatisk l¨ankning av meningar med editeringsm¨ojligheter • Automatisk ordl¨ankning med editeringsm¨ojligheter
• Visualisering av ordl¨ankning och meningsl¨ankning • Visning av TEM-m˚att
Programmet b¨or st¨odja s˚a m˚anga spr˚ak som m¨ojligt och b¨or fungera p˚a Linux i f¨orsta hand men ¨aven Windows och Mac.
Ett par viktiga fr˚agor som beh¨ovs besvaras ¨ar:
• Vilka externa system beh¨ovs och passar b¨ast f¨or ¨andam˚alet? • Hur g˚ar man tillv¨aga f¨or att utveckla ett s˚adant system?
1.4 Avgr¨ansningar
Ett system av denna typ kan t¨ankas inneh˚alla m˚anga olika delar. Bland annat kan n˚agon typ av versionshantering som ger m¨ojlighet att se hur en ¨
overs¨attning ¨andrats i olika versioner beh¨ovas. ¨
Aven ett st¨orre system d¨ar flera ¨overs¨attningar kan kopplas till samma k¨alltext ¨ar ett alternativ. Detta skulle kunna ge, till exempel en l¨arare, m¨ojligheten att se hur en viss del i text ¨oversatts av olika
¨
overs¨attare.
Genom att skapa en server-klient del med m¨ojlighet f¨or inloggning av anv¨andare skulle dessa problem kunna implementeras utan att klienten beh¨over ha tillg˚ang till l¨ankningssystemen lokalt.
P˚a grund av tidsbrist kommer detta arbete fokusera p˚a att v¨alja och koppla samman olika l¨ankningssystem. Sedan skapa ett anv¨andargr¨anssnitt f¨or redigering och visualisering av l¨ankningen som skapas. Dock kan det
vara en bra id´e att ha dessa m¨ojligheter i ˚atanke vid utveckling av programmet.
2
Bakgrund
2.1 Token-Equivalence Method
Token-Equivalence Method (TEM) ¨ar en metod som togs fram f¨or att f¨ors¨oka betygs¨atta en ¨overs¨attning av en text. Den togs fram av Dr. Ljuba Tarvis i hennes avhandling ”Comparative Translation Assessment:
Quantifying Quality”[1]. Metoden visar b˚ade vilken stil en ¨overs¨attare har och hur stor del av originalet som ¨ar ¨oversatt. F¨or att ber¨akna TEM anv¨ands ett antal ramar som alla r¨aknar olika saker i en ¨oversatt mening[2].
TEM delar upp ord i content(inneh˚all) och formal(formella). Formella ord ¨
ar grammatiska ord och ett ord r¨aknas som inneh˚all om det inte ¨ar grammatiskt. P˚a grund av vad TEM ber¨aknar kan ordl¨ankningen som TEM anv¨ander sig av vara lite annorlunda. Ordl¨ankning sker oftast ¨over samtliga ord, oavsett vilken typ ett ord ¨ar. Under TEM beh¨ovs inte ¨
overfl¨odiga grammatiska ord l¨ankas, d˚a l¨ankningen av dessa ¨ar irrelevant f¨or vad TEM ber¨aknar. Denna typ av l¨ankning ¨ar dock inte n¨odv¨andig s˚a l¨ange dessa grammatiska ord inte r¨aknas. TEM kr¨aver ¨aven att skiljetecken ignoreras vid segmentering, det vill s¨aga att de till˚ats vara kvar.
Basic Content Frame (BCF): R¨aknar antalet ord i originaltexten som har en direkt ¨overs¨attning. Det vill s¨aga ord som inte ¨ar grammatiska och som ¨
ar l¨ankade. Denna ram visar hur stor del av originalet som ¨ar ¨oversatt. Antalet ges i procent.
Optional Content Frame (OCF): R¨aknar antalet av ord i ¨overs¨attningen som inte har en direkt motsvarighet i originalet. ¨Aven h¨ar ska inte grammatiska ord r¨aknas, d˚a dessa ofta f¨oresl˚as eller kr¨avs av ¨
overs¨attningsspr˚aket. Denna ram visar vad som har lagts till i ¨
overs¨attningen. Antalet ges som ett heltal.
Basic Formal Frame (BFF): R¨aknar antalet grammatiska ord i ¨
overs¨attningen. Detta kan s¨aga mycket om en ¨overs¨attares stil. Antalet ges som ett heltal.
Optional Formal Frame 1 (OFF1): R¨aknar hur m˚anga inneh˚alls-ord i ¨
overs¨attningen som ¨ar tolkade i samma ordklass som originalet. Ges i procent.
samma ordning som i originalet och samtidigt beh˚aller samma syntaktiska funktion. Antalet ges i procent.
Samtliga av dessa ramar kr¨aver att alla ord i en mening ¨ar klassificerade p˚a ett eller annat s¨att. F¨or att ˚astadkomma detta automatiskt kr¨avs sofistikerade tolkningssystem med ordb¨ocker f¨or varje spr˚ak.
2.2 L¨ankningssystem
L¨ankning av parallella texter ¨ar ett s¨att att koppla ihop en k¨alltext och en ¨
overs¨attning med varandra. Tanken ¨ar att l¨ankningen ska visa vilka delar av texterna som motsvarar varandra inneh˚allsm¨assigt. Det ¨ar vanligt att dela upp l¨ankningen i tv˚a olika niv˚aer: meningsniv˚a och ordniv˚a.
Meningsl¨ankning ¨ar, precis som det l˚ater, l¨ankning p˚a meningsniv˚a. Texterna m˚aste h¨ar ha delats upp i meningar och varje mening l¨ankas mot motsvarande mening i motsvarande text. Viktigt att komma ih˚ag ¨ar att en mening inte beh¨over motsvara endast en mening utan flera meningar kan l¨ankas till en. Detta skapar ¨aven m¨ojligheten att flera meningar ¨ar l¨ankade till flera. Dessa typer av l¨ankningar kommer fortfarande att ben¨amnas som meningspar, ¨aven om det handlar om tre meningar eller fler.
Ordl¨ankning ¨ar l¨ankning p˚a ordniv˚a. Meningarna m˚aste h¨ar ha delats upp i ord, ibland fraser, f¨or att ord sedan ska kunna l¨ankas mot
motsvarande. Om en mening ¨ar l¨ankad till fler ¨an en mening s˚a kan dessa hanteras som en enda mening.
2.2.1 Anymalign
Anymalign ¨ar ett system f¨or l¨ankning av ord i en text och det ¨ar skrivet i Python. Det ¨ar baserat p˚a programmet Malign som ¨ar till f¨or att l¨anka molekyl¨ara sekvenser. Det utvecklades av Adrien Lardilleux och Yves Lepage ˚ar 2009. Anymalign anv¨ander sig av statistiska modeller och fungerar d¨arf¨or p˚a i stort sett alla m¨ojliga spr˚ak utan specifika
spr˚akresurser. Det som ¨ar lite speciellt med Anymalign j¨amf¨ort med andra l¨ankningssystem ¨ar att programmet k¨ors s˚a l¨ange anv¨andaren l˚ater det. Ju l¨angre programmet k¨ors, desto fler resultat genererar det. Programmet ¨ar skrivet f¨or att anv¨andas i Linux men fungerar p˚a flera operativsystem som Windows och Mac. [3] [4]
2.2.2 GIZA++
GIZA++ ¨ar en tillbyggnad av programmet GIZA som utvecklades av ett team p˚a Johns-Hopkins universitet sommaren 1999. GIZA++ anv¨ander statistiska modeller av varierande komplexitet f¨or att l¨anka ord f¨or meningar i tv˚a olika spr˚ak. D˚a dessa modeller ¨ar baserade p˚a statistik s˚a kr¨aver d¨arf¨or GIZA++ inga specifika spr˚akresurser. GIZA++ anv¨ander sig av ett externt verktyg f¨or att segmentera texten i ord innan anrop till sj¨alva l¨ankningssystemet. Denna ordsegmentering f¨oljer i stort sett TEMs krav och kan d¨arf¨or anv¨andas till just detta ¨andam˚al. Programmet ¨ar skrivet i C++ f¨or Linux, men g˚ar att anv¨anda p˚a andra operativsystem.[5]
2.2.3 Hunalign
Hunalign ¨ar ett system f¨or l¨ankning av meningar som utvecklades under the Hunglish Project 2005. Hunalign fungerar b˚ade med och utan specifika spr˚akresurser, utan spr˚akresurser anv¨ander den sig av menings-l¨angd och annan information f¨or att g¨ora en kvalificerad gissning. Det ¨ar skrivet i Portable C++, s˚a det kan i teorin kompileras p˚a n¨astan vilket
operativsystem som helst.[6] 2.2.4 GMA
GMA(Geometric Mapping and Alignment) ¨ar ¨annu ett system f¨or l¨ankning av meningar. Det ¨ar baserat p˚a Smooth Injective Map Recognizer som ¨ar en statistisk algoritm framtagen i samband med skapandet av GMA.[7] Systemet ¨ar framtaget av Dan Melamed ˚ar 1996 och ¨ar skrivet i Java. Det fungerar enligt skaparen b¨ast med spr˚akresurser som till exempel lexikon, men ¨ar inget som kr¨avs. Programmet ¨ar skrivet f¨or Linux och Solaris, men eftersom det ¨ar skrivet i Java b¨or det fungera p˚a ett flertal andra
operativsystem. [8]
2.3 System f¨or visualisering och redigering
2.3.1 Cairo
Cairo ¨ar ett program f¨or visualisering av ordl¨ankning utvecklat ˚ar 2000 av Noah A. Smith och Michael E. Jahr. Programmet l¨aser in en fil med tv˚a meningar med dess l¨ankningsdata. Det visualiserar ordl¨ankning genom att l¨agga tv˚a meningar l¨angs med varandra, antingen horisontellt eller
vertikalt, och ritar sedan streck mellan l¨ankade ord(se figur 1). Det ger ¨
Figur 1: Visualisering av l¨ankning i Cairo. 2.3.2 I*Link
I*Link ¨ar ett program f¨or hantering av parallella texter utvecklat vid Link¨opings universitet ˚ar 2000. Det kr¨aver tv˚a texter d¨ar meningarna ¨ar l¨ankade sedan innan och l¨ankar sj¨alv p˚a ordniv˚a. I*Link till˚ater anv¨andaren att verifiera alternativt modifiera ordl¨ankningen genom att g˚a igenom alla ord i en mening. Programmet gissar p˚a en l¨ankning mellan ord eller fraser och anv¨andaren accepterar eller ber om en ny gissning. Programmet visualiserar ordl¨ankningen genom att matcha f¨arg p˚a ord som ¨ar l¨ankade, tv˚a ord som ¨ar l¨ankade har med andra ord samma bakgrundsf¨arg(se figur 2). Detta s¨att att visualisera l¨ankning fungerar bra med mindre meningar, men blir l¨att sv˚arf¨orst˚add vid st¨orre meningar. [10]
2.3.3 Yawat
Yawat(Yet Another Word Alignment Tool) ¨ar ett verktyg f¨or att visualisera och redigera ord- och fras-l¨ankning av parallella texter. Det utvecklades av Ulrich Germann vid University of Toronto. Yawat ger m¨ojlighet att visualisera ordl¨ankning genom att rita streck mellan l¨ankade ord och ¨aven att visualisera som matris. Det som g¨or det unikt ¨ar dess dynamiska visualisering. Denna dynamiska l¨ankning visas genom att byta bakgrundsf¨arg p˚a alla associerade ord, men bara n¨ar muspekaren pekar p˚a ett av orden(se figur 3).
Figur 3: Dynamisk visualisering i Yawat.
Yawat ger ¨aven m¨ojlighet att visualisera l¨ankningen som en matris. H¨ar skapas ett rutn¨at d¨ar meningarna ligger horisontellt respektive vertikalt mot varandra och varje ruta representerar en l¨ank mellan varje ord. En kryssad ruta betyder att tv˚a ord ¨ar l¨ankade. Denna representation anv¨ands ¨
aven f¨or att ge m¨ojlighet att redigera l¨ankningen mellan ord, genom att l˚ata anv¨andaren kryssa i och ur rutor(se figur 4).[11]
3
Metod
F¨or att skapa programmet kr¨avs f¨orst och fr¨amst att ett antal val g¨ors. Sedan b¨or ¨aven en generell plan tas fram f¨or hur arbetet ska fortg˚a. Planen som togs fram s˚ag ut som f¨oljer.
1. Val av vilket programmeringsspr˚ak programmet ska utvecklas i. 2. Val av de externa system, l¨ankningssystem, som kr¨avs.
3. Ta fram metoder f¨or att anropa och hantera de externa systemens in-och utdata.
4. Ta fram en datastruktur som kan hantera alla data som kr¨avs f¨or programmet.
5. Utveckla ett grafiskt anv¨andargr¨anssnitt som anv¨ander framtagen datastruktur.
3.1 Verktyg och programmeringsspr˚ak
3.1.1 Programmeringsspr˚ak
Valet av programmeringsspr˚ak best¨ams av flera variabler och viktigast i detta fall ¨ar att spr˚aket st¨ods p˚a operativsystemen som kr¨avs. Det ¨ar ¨aven viktigt att det finns bibliotek f¨or utveckling av grafiska gr¨anssnitt
tillg¨angliga d˚a detta avsev¨art underl¨attar utveckling. Det finns m˚anga spr˚ak som st¨odjer operativsystemen som kr¨avs, men f˚a av dessa har ett bibliotek som fungerar ¨over alla plattformar.
Java ¨ar framtaget f¨or att vara s˚a plattformsoberoende som m¨ojligt, detta betyder att ett program i Java kan k¨oras p˚a alla operativsystem utan att beh¨ova kompileras om. Java-kod kompileras till byte-kod och denna byte-kod kan senare k¨oras p˚a vilken Java Virtual Machine(JVM) som helst. En JVM ¨ar en emulerad dator som tolkar kompilerad Java-kod. P˚a grund av detta system s˚a kan ett Java-program k¨oras p˚a alla
operativsystem som har en JVM installerad utan att kompileras om. JavaFX ¨ar en mjukvaruplattform som ¨ar till f¨or att skapa
anv¨andargr¨anssnitt till Java-applikationer. Fr˚an och med Java 8 ing˚ar JavaFX som ett standardbibliotek i Java och med Javas
plattformsoberoende s˚a blir ¨aven JavaFx plattformsoberoende, dock inte helt i samma utstr¨ackning d˚a JavaFX kr¨aver grafiska komponenter av operativsystemet.
P˚a grund av detta s˚a passar Java och JavaFX utm¨arkt till detta syfte.
3.1.2 L¨ankningssystem
Verktygen som beh¨ovs ¨ar f¨orst och fr¨amst ett l¨ankningssystem p˚a
meningsniv˚a och ett p˚a ordniv˚a. Ut¨over dessa kan det ¨aven kr¨avas ett s¨att att dela upp text i delar s˚a som stycken, meningar och ord. D˚a m˚anga system anv¨ander egen tokenisering kan det vara en bra id´e att b¨orja med att v¨alja dessa.
Som system p˚a meningsniv˚a finns det tv˚a popul¨ara system att v¨alja mellan; Hunalign och GMA. B˚ada dessa system ¨ar i stort sett
plattformsoberoende och kr¨aver inga specifika spr˚akresurser. D˚a ingenting avsev¨art skiljer systemen, utan n˚agon st¨orre utv¨ardering, kan valet baseras p˚a hur l¨att systemen ¨ar att anv¨anda f¨or detta syfte. Utefter detta blev valet Hunalign.
Anymalign och GIZA++ ¨ar tv˚a system f¨or l¨ankning p˚a ordniv˚a. De fyller b˚ada kraven p˚a att st¨odja s˚a m˚anga spr˚ak som m¨ojligt eftersom de ¨ar statistiskt baserade. Eftersom Anymalign st¨ods p˚a fler operativsystem ¨an GIZA++ talar detta f¨or Anymalign, men p˚a grund av Anymaligns
speciella s¨att att exekveras ¨ar GIZA++ att f¨oredra. GIZA++ anv¨ander sig ¨
aven av ett externt program f¨or att dela upp meningar i ord och skapa en ordbok ¨over texten. Detta kan till f¨ordel anv¨andas i programmet.
Eftersom verktygen som valts ut ¨ar skrivna i C++ ¨ar dessa inte helt plattformsoberoende. F¨or att dessa ska fungera p˚a olika operativsystem m˚aste de kompileras f¨or det specifika operativsystemet och i m˚anga fall m˚aste de ¨aven anropas lite annorlunda, till exempel med olika
mapp-avskiljare i Linux och Windows.
3.2 Systemutvecklingsmetodik
Vid utveckling av mjukvara finns det flera olika metoder som man kan arbeta efter. Gemensamt f¨or n¨astan alla dessa metoder ¨ar en m¨angd faser som arbetet g˚ar igenom. I stort sett ¨ar dessa faser som f¨oljande:
kravspecificering, design, implementation och fels¨okning. Dessa faser ¨ar oftast inte helt separerade utan p˚ag˚ar till stor del ¨overlappande med varandra. Kravspecificering involverar bland annat att ta fram en
kravspecifiktion, men ¨aven framtagande av prototyper och dylikt ¨ar vanligt f¨or att ge en klarare bild av det blivande programmet. N¨ar
kravspecifikationen ¨ar klar m˚aste programmet delas upp och en plan f¨or hur kravspecifikationen ska realiseras m˚aste tas fram. Detta brukar kallas
f¨or design och involverar till stor del att dela upp programmet i mindre och mindre delar. N¨ar designen ¨ar klar s˚a b¨or det egentligen bara finnas en sak kvar att g¨ora, att programmera alla delar och koppla ihop dem. Detta ¨
ar vad som kallas f¨or att implementera programmet. N¨ar varje del av programmet ¨ar implementerad s˚a m˚aste de ¨aven fels¨okas f¨or att f¨ors¨akra att de fungerar som de ska. Fels¨okning ¨ar n˚agot som g¨ors b˚ade f¨or enskilda delar av programmet, och n¨ar flera delar kopplas ihop.
Exempel p˚a programutvecklingsmetoder ¨ar den traditionella
vattenfalls-modellen, V-modellen samt agila metoder som Scrum och Extreme Programming. Under vattenfalls-modellen sker alla faser efter varandra utan n˚agon st¨orre ¨overlappning, metoden anser p˚a s˚a vis att framtiden ¨ar f¨oruts¨agbar. Denna metod kritiseras d¨arf¨or ofta, eftersom man vid b¨orjan ett projekt ofta inte vet tillr¨ackligt mycket om ett projekt f¨or att g¨ora en felfri planering. Svaret p˚a denna kritik ¨ar agila
utvecklingsmetoder d¨ar den grundl¨aggande filosofin ¨ar att just framtiden ¨
ar of¨oruts¨agbar. De agila metoderna g¨or sitt yttersta att till˚ata att den kunskap man samlar p˚a sig under arbetets g˚ang tas tillvara p˚a genom att l˚ata all planering ¨andras.[12]
P˚a grund av storleken p˚a detta arbete s˚a kommer det inte f¨olja n˚agon av dem n¨amnda metoderna best¨amt utan kommer ist¨allet ta inspiration av dem. Kravspecifikationen ¨ar fr˚an b¨orjan i stort sett klar och kommer d¨arf¨or inte specificeras ytterligare. Design, implementation och fels¨okning kan ske i stort sett parallellt p˚a grund av storleken p˚a programmet. Ett f¨ors¨ok till ˚aterkoppling genom hela arbetet kommer att ske f¨or att lyfta fram eventuella brister i programmet.
4
Design och Implementation
4.1 Datahantering
N¨ar val av programmeringsspr˚ak och l¨ankningssystem ¨ar gjorda s˚a kr¨avs en plan f¨or att koppla ihop och hantera datan. Eftersom tanken ¨ar att anv¨andaren ska ge tv˚a filer i olika spr˚ak som indata m˚aste programmet hantera data f¨orst och fr¨amst i denna form. Fr˚an ren text m˚aste datan konverteras till Hunaligns indata-format. Hunalign kr¨aver tv˚a filer, en f¨or varje spr˚ak, som inneh˚aller en mening p˚a varje rad. F¨or att ˚astadkomma detta automatiskt utan att kr¨ava att anv¨andaren beh¨over g¨ora det manuellt kr¨avs ¨annu ett verktyg. Ett skript utvecklat av Philipp Koehn och Josh Schroeder under Europarl som heter Sentence-splitter
˚astadkommer just detta. Sentence-splitter kr¨aver specifika spr˚akresurser, men dessa finns tillg¨angliga i ett 20-tal spr˚ak. [13]
N¨ar texterna ¨ar indelade i meningar kan de l¨ankas i Hunalign. Utdata fr˚an Hunalign best˚ar av en fil med tv˚a eller fler l¨ankade meningar p˚a samma rad. Hunalign matchar en eller flera meningar i ett spr˚ak emot en mening i motsvarande spr˚ak. Om Hunalign l¨ankar flera meningar i ett av spr˚aken separeras dessa med en speciell avskiljare. Denna data m˚aste d¨arf¨or konverteras till hanterlig indata f¨or GIZA++, d˚a GIZA++ kr¨aver likadan indata som Hunalign med undantaget att meningarna nu ska vara
l¨ankade.
GIZA++ anv¨ander sig av ett eget dataformat SNT, som kan konverteras till med verktyget Plain2snt som tillh¨or GIZA++. Plain2snt delar upp texterna i tre filer. Tv˚a filer ¨ar en typ av ordbok f¨or varje text, d¨ar varje ord har givits ett identifikationsnummer. Den tredje filen inneh˚aller de parade meningarna med orden utbytta till sina respektive
identifikationsnummer. Dessa tre filer anv¨ands sedan vid anrop till GIZA++ och med r¨att inst¨allningar produceras en fil med vad GIZA++ rankar som det b¨asta l¨ankningsalternativet. Denna fil best˚ar av meningar fr˚an k¨allspr˚aket i dess vanliga form och orden fr˚an ¨overs¨attningen har blivit givna en eller flera siffror f¨or vilket/vilka ord i k¨allan som det ¨ar l¨ankat till.
Anrop till verktygen kan ske med Java genom att anv¨anda de inbyggda processfunktionerna. Sentence-splitter kan b˚ade ta emot och ge sin utdata direkt, som g˚ar att l¨asa in rad f¨or rad genom Java. Detta ¨ar p˚a grund av att det endast kr¨aver en typ av indata och ger en typ av utdata, utan n˚agra extra tecken. F¨or b˚ade Hunalign och GIZA++ kr¨avs dock att filer skapas p˚a h˚arddisken b˚ade f¨or indata och utdata. Utdatan kan l¨att l¨asas in och filerna som skapats kan sedan tas bort.
Det finns nu tillr¨ackliga metoder f¨or att g˚a ifr˚an tv˚a parallella texter till ordl¨ankad utdata ifr˚an GIZA++ helt automatiskt. Detta ¨ar f¨orst˚as inte vad som skulle ˚astadkommas. Vad som beh¨ovs h¨arifr˚an ¨ar ett s¨att att hantera denna data, i alla dess former f¨or att kunna ge m¨ojlighet att redigera den i ett gr¨anssnitt. Datan och datatyperna som kommer beh¨ova hanteras ¨ar:
1. De fulla texterna i originalformat 2. Texterna uppdelade i meningar 3. Meningarnas l¨ankningsdata 4. Meningarna uppdelade i ord 5. L¨ankningsdata f¨or varje ord
De tre f¨orsta punkterna kan hanteras med tv˚a listor, en f¨or varje spr˚ak. I dessa listor ¨ar varje objekt en mening som inneh˚aller meningen, ett
identifikationsnummer och den l¨ankade meningens identifikationsnummer. Det g˚ar ¨aven att anv¨anda denna lista till att h˚alla texterna innan de delats upp i meningar och l˚ata andra delar av programmet h˚alla reda p˚a vilken form datan har.
De tv˚a sista punkterna ˚astadkoms l¨attast genom att dela upp varje meningsobjekt i delar, eftersom meningarna vid detta l¨age ¨ar l¨ankade och inte b¨or ¨andras. F¨or detta skapas, precis som f¨or meningar, en lista d¨ar varje objekt inneh˚aller ett ord, dess identifikationsnummer samt l¨ankning. Man kan h¨ar, till f¨ordel, anv¨anda GIZA++ uppdelade format med
ordlistor och meningar i sifferformat. Orden i denna del representeras med andra ord enbart i siffror och orden sparas ist¨allet i ordlistor som anv¨ands n¨ar orden beh¨over skrivas ut.
Denna datastruktur visualiseras i figur 5. H¨ar ¨ar Alignment en klass som ¨
ar t¨ankt att inneh˚alla all information som beh¨ovs samt funktioner f¨or att hantera den. Alignment inneh˚aller en lista med Sentence-objekt som inneh˚aller all information om meningarna. Klassen Sentence inneh˚aller i sin tur en lista med Word-objekt som h˚aller reda p˚a information om enstaka ord.
Sentence Word
1 1...* 1 1...*
Figur 5: UML f¨or informationshanteringen.
Eftersom datan kan befinna sig i olika l¨agen beh¨ovs en metod f¨or att h˚alla reda p˚a vilket l¨age datan befinner sig i. Detta ¨ar ¨aven hopkopplat med gr¨anssnittet som tas upp senare.
Detta l¨ostes genom en variabel State som kan befinna sig i f¨oljande l¨agen:
Empty
Empty fungerar som start-l¨age och n¨ar inga texter har l¨asts in. Split
Split ¨ar l¨aget Alignment befinner sig i direkt efter inl¨asning av tv˚a texter. Det vill s¨aga n¨ar texterna ska segmenteras i meningar. Datan h¨ar best˚ar enbart av Sentence objekt med enbart hela str¨angar. Align
N¨ar Alignment befinner sig i l¨aget Align ska texten vara segmenterad i meningar. I detta l¨age ska meningarna l¨ankas till varandra. Datan best˚ar nu av korrekt uppdelade meningsobjekt med korrekt eller okorrekt meningsl¨ankning.
View
I View ¨ar segmentering eller meningsl¨ankning klar. Meningarna och deras l¨ankningar ska nu vara fasta. Det som kan ¨andras i texterna efter detta ligger endast p˚a meningsniv˚a, det vill s¨aga det p˚averkar enbart enstaka meningar.
Egentligen skulle View kunna delas i tv˚a l¨agen, men p˚a grund av att skillnaden h¨ar ligger p˚a meningsniv˚a beh¨over inte klassen Alignment h˚alla reda p˚a detta. Detta underl¨attar ocks˚a det faktum att alla meningar inte beh¨over vara segmenterade och l¨ankade p˚a ordniv˚a.
4.2 Anv¨andargr¨anssnitt
Anv¨andargr¨anssnittet ska till˚ata redigering av texterna i alla l¨agen. L¨agena ¨
ar i f¨orsta hand meningsuppdelning, meningsl¨ankning och ordl¨ankning. Det kr¨avs med andra ord tre redigerings-vyer. Gr¨anssnittet beh¨over ocks˚a st¨odja att se texterna i sin helhet och visualisera l¨ankningarna. Ut¨over detta tillkommer en meny som inneh˚aller knappar f¨or alla funktioner, till exempel att spara och ¨oppna.
4.2.1 Uppl¨agg
Eftersom vissa funktioner ska finnas tillg¨angliga hela tiden och vyerna enbart ska visas en i taget kan gr¨anssnittet delas i tv˚a delar. En meny i ¨
ovre delen som inneh˚aller funktioner f¨or att till exempel l¨asa in filer, spara och ¨oppna. Den undre delen blir en vy d¨ar texterna visas men som byts ut d˚a datan byter l¨age, i enlighet med Alignments tillst˚and.
F¨orst kr¨avs en meny som med f¨ordel l¨aggs ¨overst i f¨onstret, och under detta ett f¨alt som inneh˚aller olika vyer. Dessa delar kan sedan hanteras med tv˚a olika klasser separat, en klass MenuHandler kan hantera menyn och en annan klass ViewHandler kan hantera vyerna.
Dessa klasser kr¨aver b˚ada det aktiva Alignment-objektet som argument, dels f¨or att kunna hantera dess information och dels f¨or att kunna bli informerade n¨ar denna ¨andras. F¨or att ˚astadkomma det senare kan ett designm¨onster som kallas f¨or Observer anv¨andas. Med denna metod utses vissa klasser till lyssnare p˚a det aktiva Alingment-objektet. N¨ar
Alignment-objektet ¨andras kan det tala om det f¨or alla objekt som lyssnar p˚a den att en ¨andring har skett. P˚a s˚a vis kan en del av programmet modifiera Alignment-objektet och resterande delar uppfattar detta. Detta kan till exempel anv¨andas f¨or att byta vy d˚a Alignment-objektet byter l¨age. Alignment-objektet meddelar sina prenumeranter att en ¨andring har
skett. ViewHandler kommer d˚a att kolla om det ¨ar l¨aget som har bytts och ¨
andra vy om s˚a ¨ar fallet. 4.2.2 Menyfunktioner
Menyn b¨or inneh˚alla alla funktioner som inte ¨ar vy-specifika. De sj¨alvklara funktionerna ¨ar; Nytt projekt, spara, spara som, ¨oppna, och avsluta. Ut¨over dessa tillkommer ¨aven funktioner f¨or att exportera till ett vissa format, editera grammatiska tokens och att till˚ata anv¨andaren att g˚a tillbaka till tidigare l¨agen i projektet. Funktionerna f¨or att spara och ¨
oppna f¨orklaras mer utf¨orligt i n¨asta kapitel.
F¨or att skapa ett nytt projekt m˚aste anv¨andaren specificera vilka tv˚a textfiler som ska l¨asas in och vilken text som ¨ar k¨alltexten respektive ¨
overs¨attningen. F¨or att ˚astadkomma detta beh¨ovs en dialog som inneh˚aller tv˚a textf¨alt, en f¨or respektive fil. Filformatet som st¨ods beh¨over ¨an s˚a l¨ange inte vara mer ¨an ”.txt”, d˚a konverterare till och fr˚an andra format kan l¨aggas till vid ett senare tillf¨alle. H¨ar b¨or ¨aven funktioner f¨or att bl¨addra grafiskt i mappar finnas tillg¨angligt. Knappar f¨or att ¨oppna b˚ada filerna och f¨or att avbryta dialogen l¨aggs ocks˚a till. N¨ar filerna ¨ar valda anropas en funktion i Alignment som l¨aser in filerna som om de vore meningar och s¨atter l¨aget till Split. Detta kan ¨aven anv¨andas till att uppdatera vyer n¨ar Alignment-objektet ¨andras. Dialogen f¨or att skapa nytt projekt kan ses i figur 6.
Figur 6: Dialog f¨or att skapa nytt projekt.
F¨or att TEM-ramar senare ska kunna r¨aknas ut m˚aste ¨aven en funktion f¨or att specificera vilka ord som ¨ar grammatiska implementeras. Eftersom ordlistor fr˚an GIZA++ redan anv¨ands s˚a beh¨ovs varje lista enbart
utvidgas med en extra variabel. D˚a det inte finns n˚agra verktyg som skulle kunna hj¨alpa till med detta kr¨avs en metod f¨or att ge anv¨andaren
m¨ojlighet att ange vilka ord som ¨ar grammatiska. Detta kan ˚astadkommas enkelt genom att visa alla ord i en lista d¨ar anv¨andaren kan markera vilka ord som ¨ar grammatiska(se figur 7). F¨or att ge anv¨andaren ˚atkomst till dialogen l¨aggs knappar till f¨or dessa funktioner till i menyn.
Figur 7: Dialog f¨or att ange grammatiska ord. 4.2.3 Spara- och ¨oppna-funktioner
F¨or att implementera spara- och ¨oppna-funktioner kr¨avs ett s¨att att spara all data externt ifr˚an programmet. Detta ˚astadkoms givetvist l¨attast genom att skriva data till filer p˚a h˚arddisken. F¨or att ˚astadkomma detta b¨or funktioner i klassen Alignment l¨aggas till och innan dessa funktioner anropas m˚aste ¨aven Alignment uppdateras med r¨att data. I Split- och Align-l¨aget ¨ar informationen i anv¨andargr¨anssnittet inte alltid den samma som i Alignment eftersom den laddas innan den kan redigeras, den ¨ar allts˚a inte synkroniserad. Det kr¨avs allts˚a att informationen i gr¨anssnittet f¨orst sparas till Alignment.
Knappar f¨or att spara och ¨oppna ¨ar t¨ankta att anropa funktionerna i Alignment. F¨or att visa f¨or anv¨andaren att en Alignment ¨ar sparad och inte ¨andrad b¨or knappen f¨or att spara avaktiveras. N¨ar n˚agot redigeras aktiveras knappen igen. F¨or att ˚astadkomma detta l¨aggs en variabel Edited till i Alignment.
F¨or att kunna spara och sedan ¨oppna ett projekt kr¨avs att all information sparas. Detta inkluderar vilket l¨age projektet ¨ar i samt all information som kr¨avs f¨or att kunna l¨asa in datan korrekt igen, bland annat antalet
meningar och storleken p˚a ordb¨ocker. P˚a grund av att klassen Alignment inneh˚aller olika typer av information i de olika l¨agena m˚aste informationen sparas och laddas olika beroende p˚a l¨aget. I Split- och Align-l¨aget m˚aste ocks˚a informationen som ¨ar aktiv i gr¨anssnittet f¨orst sparas.
Gemensamt f¨or alla sparade filer blir endast att l¨aget f¨orst sparas, detta kan representeras med ett heltal. Filen b¨orjar allts˚a med ett heltal i som s¨ager vilket format datan har och vilket l¨age anv¨andargr¨anssnittet befinner sig i. F¨or att hantera de olika l¨agena beh¨ovs sedan funktioner f¨or att skriva
datan i r¨att format.
I Split-l¨aget sparas endast texten i det format det f¨or tillf¨allet befinner sig i. F¨or att ˚astadkomma detta skrivs f¨orst information om hur m˚anga meningar som sparats av b˚ada spr˚aken, sedan f¨oljer alla meningar i ordning.
I Align-l¨aget sparas, precis som i Split-l¨aget, alla meningar. Det som m˚aste tillkomma ¨ar meningsl¨ankningen. Denna kan l¨aggas till efter meningen p˚a samma rad, separerat med en avskiljare.
I View-l¨aget finns det tv˚a scenarier. Om ordl¨ankning/segmentering inte existerar ska informationen sparas precis som i Align-l¨aget, dock med ett annat heltal f¨or l¨aget eftersom programmet b¨or ˚aterv¨anda till r¨att vy vid inl¨asning. Innan meningarna skrivs b¨or information om hur m˚anga meningar som finns i varje spr˚ak och hur m˚anga ord det finns i varje ordbok skrivas ut.
Om segmentering och ordl¨ankning existerar m˚aste ¨aven dessa sparas. Eftersom det tillkommer en hel del information j¨amf¨ort med f¨oreg˚aende l¨age kan det underl¨atta att dela upp varje mening p˚a fler rader. F¨or att spara ordl¨ankningen kan varje Sentence-objekt ifr˚an k¨alltexten delas upp p˚a tre rader. F¨orsta raden blir d˚a som i Align-l¨aget, meningen i textform och meningsl¨ankning med avskiljare. Andra raden best˚ar av meningen uppdelad i ord b˚ade med ordens ID i ordboken och ordets position i meningen, med en avskiljare mellan varje ord. P˚a tredje raden skrivs ordens l¨ankningsdata. Sentence-objekten i ¨overs¨attningen skrivs i samma stil som ifr˚an k¨alltexten, men utan sista raden f¨or ordl¨ankningen. Efter att alla Sentence-objekt har skrivits ut skrivs ¨aven ordb¨ocker ner med dess ID, ord och om dessa ¨ar grammatiska tokens eller inte.
N¨ar en sparad fil senare ska l¨asas in, l¨ases f¨orst heltalet in som best¨ammer l¨aget, sedan anropas olika funktioner beroende p˚a detta tal. Funktionerna l¨aser in datan precis som den skrevs ut, med hj¨alp av bland annat
information om hur m˚anga meningar som skrivits. Sist av allt s¨atts l¨aget som programmet ska befinna sig i.
4.2.4 Vy f¨or meningsuppdelning
En ny vy ’SentenceSplitView’ skapas f¨or l¨aget Split, som ska hantera meningsuppdelningen. F¨or att kunna dela upp meningarna i r¨att format kr¨avs att anv¨andaren kan redigera texten som just en text. H¨ar g˚ar det att anv¨anda ett vanligt textf¨alt f¨or ren text som till˚ater redigering. Eftersom det ¨ar tv˚a texter skapas tv˚a f¨alt bredvid varandra, en f¨or varje spr˚ak, som inneh˚aller texterna. Nu kan allts˚a programmet l¨asa in tv˚a texter och
texterna visas bredvid varandra, k¨alltext till v¨anster och ¨overs¨attning till h¨oger.
Innan eller efter texterna l¨ases in ¨ar det t¨ankt att de ska automatiskt delas upp med hj¨alp av Sentence-splitter skriptet. Eftersom Sentence-splitter kr¨aver att f˚a veta vilket spr˚ak texterna ¨ar i m˚aste dessa specificeras vid inl¨asning av filerna, om det ska ske direkt vid inl¨asning. Denna funktion beh¨over dock inte alltid anv¨andas och det ¨ar d¨arf¨or b¨attre att ge
valm¨ojligheten att anv¨anda den. Med detta i ˚atanke b¨or funktionen l¨aggas som alternativ efter inl¨asningen. Detta kan ˚astadkommas i form av en spr˚akvals-box och en Automatic-knapp under varje textf¨alt. En
continue-knapp l¨aggs till l¨angst ner i vyn, s˚a att anv¨andaren kan verifiera att uppdelningen ¨ar klar.
Denna vy n˚as direkt n¨ar ett nytt projekt skapas. Resultatet ¨ar en vy d¨ar texterna syns parallellt i varsin editerbar textruta. Anv¨andaren blir h¨ar instruerad att dela upp texterna i meningar, en mening p˚a varje rad. Under varje textruta finns en box f¨or val av spr˚ak och en knapp Automatic. V¨aljer anv¨andaren spr˚ak och trycker p˚a knappen Automatic f¨ors¨oker programmet automatiskt dela upp texterna. N¨ar anv¨andaren ¨ar klar med uppdelningen trycker denne p˚a Continue-knappen och kommer till en ny vy.
4.2.5 Vy f¨or meningsl¨ankning
Precis som f¨or f¨oreg˚aende l¨age m˚aste en vy skapas f¨or l¨aget Align. I detta l¨age ¨ar alla meningar fasta objekt, det vill s¨aga texten i meningarna ska vara fast. Meningarna kan d¨arf¨or i detta l¨age hanteras som hela objekt utan n˚agon textredigering, det enda som beh¨over kunna redigeras ¨ar sj¨alva meningsl¨ankningen. Hur detta kan ˚astadkommas finns det inga bra
exempel p˚a, men p˚a grund av att meningar kan hanteras som objekt kan man t¨anka sig att man kan p˚a n˚agot s¨att dra i meningarna och p˚a s˚a s¨att l¨anka dem till varandra. Viktigt h¨ar ¨ar att visualiseringen av l¨ankningen st¨ammer ¨overrens med utdata fr˚an Hunalign.
Utdata fr˚an Hunalign ¨ar tv˚a eller flera meningar p˚a en rad, d¨ar en mening ¨
ar l¨ankad till en eller flera meningar i motsvarande spr˚ak. Programmet m˚aste med andra ord kunna visualisera att meningar ¨ar ol¨ankade, l¨ankade en mot en eller en mot flera. Med detta i ˚atanke, samt id´en att dra och sl¨appa menings-objekt, kan man t¨anka sig att man har l˚ador som
meningarna kan befinna sig i. Anv¨andaren drar och sl¨apper meningarna i l˚adorna f¨or att l¨anka dem. F¨or att h˚alla is¨ar spr˚aken skapas en typ av l˚adpar d¨ar meningar som ¨ar l¨ankade ligger i respektive l˚ada f¨or varje spr˚ak. Dessa l˚ador kan d˚a inneh˚alla noll, en eller flera meningar.
F¨or att hantera detta kr¨avs en klass som inneh˚aller tv˚a l˚ador i form av ListBoxes. Dessa Listboxes inneh˚aller Sentence-objekt och presenteras grafiskt i listan som en mening. F¨or att g¨ora det mer l¨attf¨orst˚aeligt f¨or anv¨andaren l¨aggs l˚adorna p˚a varsin sida, precis som i f¨oreg˚aende l¨age. Meningarna kan nu dras mellan l˚adorna i respektive spr˚ak, det vill s¨aga endast upp eller ner och inte ˚at sidan. Precis som i f¨oreg˚aende l¨age l¨aggs en continue-knapp till l¨angst ner i vyn, s˚a att anv¨andaren kan verifiera att l¨ankningen ¨ar klar.
Resultatet blir en vy d¨ar anv¨andaren instrueras att l¨anka meningarna till varandra. Detta g¨or anv¨andaren genom att dra meningarna mellan l˚ador som ligger parallellt i par. L¨angst ner finns ¨aven h¨ar en Automatic-knapp som vid anv¨andning f¨ors¨oker l¨anka meningarna automatiskt. Skulle anv¨andaren beh¨ova ¨andra i en mening trycker denne p˚a knappen Edit sentences under Edit-menyn eller p˚a Back-knappen l¨angst ner och kommer d˚a tillbaka till f¨oreg˚aende vy. N¨ar anv¨andaren ¨ar klar och accepterar meningsl¨ankningen trycker denne p˚a Continue-knappen och kommer till en ny vy.
Figur 9: Vy f¨or redigering av meningsl¨ankning. H¨ar har anv¨andaren precis dragit en mening till ¨oversta l˚adan.
4.2.6 Vy f¨or visualisering ˚
Aterigen kr¨avs en vy f¨or l¨aget View. Denna vy ska kunna ge en ¨overblick ¨
over alla meningar och vilka meningar som ¨ar l¨ankade till vilka. Den ska ¨
aven visa ordl¨ankning och ge m¨ojlighet att redigera ordl¨ankning. Meningarna ¨ar h¨ar statiska som i f¨oreg˚aende vy och dessutom l¨ankade. Meningarna beh¨over med andra ord bara kunna visas utan att kunna redigeras eller ¨andras i f¨orsta hand men anv¨andaren ska efter segmentering kunna redigera ordl¨ankningen f¨or ett specifikt menings-par. F¨or att kunna hantera att meningar ¨ar b˚ade segmenterade och enbart meningsl¨ankade kr¨avs ¨aven flera s¨att att representera meningarna.
F¨orst och fr¨amst m˚aste meningarna kunna visas och meningsl¨ankningen b¨or vara synlig. N¨ar meningarna ¨annu inte ¨ar segmenterade kan de visas som ren text. F¨or att tydligg¨ora vilka meningar som ¨ar vilka l¨aggs meningarna bredvid varandra som i f¨oreg˚aende vyer, men till att b¨orja med endast i ren text.
N¨ar meningarna ¨ar segmenterade och ordl¨ankade kommer anv¨andaren beh¨ova kunna titta n¨armare p˚a ett specifikt meningspar, bland annat f¨or att kunna redigera ordl¨ankningen. F¨or att ge m¨ojlighet till detta l¨aggs m¨ojligheten att klicka p˚a ett meningspar f¨or att s¨atta det i fokus. Huruvida ett meningspar s¨atts i fokus finns det lite alternativ p˚a. Tv˚a
rimliga alternativ ¨ar att skapa ett nytt f¨onster separerat fr˚an resten av texten, eller ¨andra saker som bakgrundsf¨arg och upps¨attning p˚a texten f¨or att p˚a s˚a s¨att lyfta fram den. Eftersom m˚alen med att s¨atta gruppen i fokus ¨ar relativt begr¨ansade duger det att att lyfta fram gruppen i vyn. Detta kan ˚astadkommas genom att byta bakgrundsf¨argen till en ljusare f¨arg och ¨aven l¨agga meningarna ovanp˚a varandra, ist¨allet f¨or bredvid varandra. Under meningarna kan d˚a diverse alternativ, s˚a som knappar f¨or redigering och annan visualisering, l¨aggas till.
F¨or att hantera meningsparen och alla dess representationer beh¨ovs ny en klass SentenceViewController(SVC). Eftersom varje SVC kommer hantera ett meningspar och tillhandah˚alla en representation f¨or denna s˚a passar det att SVC ut¨okar klassen som vyn hanterar, i detta fall klassen HBox. SentenceView ¨ar h¨ar t¨ankt att inneh˚alla en lista med SVC, som alla hanterar sina egna meningar separat.
SVC inneh˚aller tv˚a listor med meningar, en f¨or varje spr˚ak. SVC ¨ar t¨ankt att representera meningarna utefter det l¨age meningarna ¨ar i.
SentenceView h˚aller reda p˚a vilken SVC som ¨ar markerad och ska vara i fokus. SVC f˚ar reda p˚a ifall den blir markerad eller av markerad ifr˚an SentenceView och representerar sitt meningspar olika utefter det. Om meningsparet ¨ar segmenterat s˚a representeras det som segmenterat, ¨ar det markerat representeras det som s˚a och vice versa. Det finns allts˚a fyra olika s¨att meningspar m˚aste kunna representeras som och detta sk¨ots nu automatiskt.
Resultatet blir den tredje och sista vyn(se figur 10). Texterna syns h¨ar bredvid varandra, meningspar f¨or meningspar. Klickar anv¨andaren p˚a en mening l¨aggs denna mening och dess motsvarande mening ovanp˚a
varandra. Om ordl¨ankning existerar visas ¨aven den och om ett meningspar ¨
ar i fokus ges ¨aven m¨ojlighet att redigera ordl¨ankning genom en knapp. Anv¨andaren kan ¨aven h¨ar v¨alja att g˚a tillbaka till uppdelnings-vyn eller meningsl¨anknings-vyn genom att anv¨anda knapparna i
verktygsf¨altet.
4.2.7 Visualisering av ordl¨ankning
Det finns flera olika s¨att att visualisera ordl¨ankning, som visat i kapitel 2.2. De flesta s¨att involverar dock n˚agon typ av grafisk representation d¨ar mer ¨an bara texten visas. Dessa tekniker ¨ar oftast bra f¨or att ge en helhet av l¨ankningen, men f¨or att kunna visualisera ordl¨ankningen i SentenceView beh¨ovs ett minimalt s¨att utan grafiska komponenter. Ett simpelt och dugligt s¨att f¨or att ˚astadkomma detta ¨ar att byta f¨arg p˚a ett ord och dessa l¨ankade motsvarigheter n¨ar man f¨or musen ¨over dem, p˚a det viset det g¨ors
Figur 10: Huvudvyn med ett markerat meningspar utan ordl¨ankning. i Yawat.
F¨or att implementera detta skapas en Label f¨or varje ord i varje mening och p˚a varje label l¨aggs sedan en lyssnare som k¨anner av n¨ar muspekaren dras ¨over den. N¨ar h¨andelsen som lyssnaren utl¨oser v¨al sker byts f¨orst f¨arg p˚a den Label som musen ¨ar ¨over. Sedan m˚aste ordets l¨ankade
motsvarigheter tas fram i motsvarande mening och alla Labels f¨or dessa ord m˚aste ¨aven de byta f¨arg. F¨or att ge en b¨attre bild av l¨ankningen b¨or ¨
aven alla de l¨ankade ordens l¨ankningar g˚as igenom. D¨arf¨or m˚aste detta ske i en kedja, tills alla ord som ska ¨andras har ¨andrats. N¨ar musen senare tas bort fr˚an ett ord beh¨over detta inte ske omv¨ant, ist¨allet nollst¨alls hela meningen till ursprungsf¨argen.
F¨or att automatiskt segmentera meningarna i ord och l¨anka p˚a ordniv˚a trycker anv¨andaren p˚a Add word alignment under Edit-menyn. Vyn ser fr˚an b¨orjan likadan ut, men h˚aller anv¨andaren ¨over ett ord kommer ordet och ordets l¨ankade ord i motsvarande mening att byta f¨arg till r¨od. Trycker anv¨andaren p˚a en mening nu kommer meningarna fortfarande l¨aggs ovanp˚a varandra men nu visas ¨aven en knapp och ett antal TEM-ramar(se figur 11).
Figur 11: Markerat meningspar med ordsegmentering och visualisering av ordl¨ankning.
4.2.8 Redigering av ordl¨ankning
Redigeringen av ordl¨ankningen b¨or ske separat fr˚an resten av texten f¨or att denna kr¨aver extra plats, i detta fall ¨ar det en bra id´e med ett nytt f¨onster. Redigeringen kan ske f¨or hela texten eller f¨or en mening i taget vid behov.
¨
Aven om m¨ojligheten att redigera en hel mening ˚at g˚angen existerar, kan det vara bra att ha m¨ojligheten att snabbt ¨andra ett specifikt ord. En knapp l¨aggs d¨arf¨or till under meningar som ¨ar i fokus, och denna knapp ¨
oppnar ett nytt f¨onster f¨or redigering av ordl¨ankning.
Det finns flera s¨att att redigera ordl¨ankning, som tas upp i kapitel 2, men simplast att implementera ¨ar att anv¨anda tekniken bakom visualiseringen. I och med att ordl¨ankningen endast finns i k¨alltexten s˚a kan man t¨anka sig att man f¨or varje ord i k¨alltexten v¨aljer vilka ord i ¨overs¨attningen som detta ord ¨ar l¨ankat till. Detta kan ˚astadkommas mycket enkelt genom att ge m¨ojligheten att klicka p˚a det ord man vill redigera och sedan klicka p˚a de ord som ordet ska l¨ankas till. N¨ar redigeringsf¨onstret ¨oppnas ges m¨ojligheten att klicka p˚a ett valfritt ord i k¨allmeningen, n¨ar ett ord v¨aljs s˚a markeras de ord i ¨overs¨attningsmeningen som redan ¨ar l¨ankade. Anv¨andaren ska nu kunna markera och avmarkera de ord i
¨
overs¨attningsmeningen som ordet ska l¨ankas till och sedan spara dessa ¨
andringar.
Detta kan enkelt implementeras genom att anv¨anda liknande tekniker som vid visualiseringen. Det g˚ar att anv¨anda sig av samma algoritm som n¨ar f¨arg p˚a ord byts, och l¨agga till funktioner f¨or att trycka p˚a ordet. Efter l¨aggs funktioner till som hanterar n¨ar ett ord kan klickas p˚a och vad som ska ske vid olika tillf¨allen.
F¨or att g¨ora detta mer f¨orst˚aeligt kan sm˚a ¨andringar i presentationen l¨aggas till. Innan anv¨andaren trycker p˚a ett ord i k¨allmeningen kan alla ord i ¨overs¨attningen vara ljusgr˚a f¨or att visa att dessa inte g˚ar att trycka p˚a. N¨ar anv¨andaren v¨al trycker p˚a ett ord kan alla andra ord i k¨allmeningen bli gr˚a, ¨overs¨attningen blir nu svart och alla l¨ankade ord blir markerade med en gr¨on bakgrund.
fokus, knappen ¨oppnar ett nytt f¨onster. I detta f¨onster syns meningarna ovanp˚a varandra och fr˚an b¨orjan ¨ar ¨overs¨attningen i en ljusgr˚a f¨arg. Anv¨andaren v¨aljer h¨ar ett ord ur k¨allmeningen att redigera(se figur 12).
Figur 12: B¨orjan p˚a editering av ordl¨ankning.
N¨ar ett ord ¨ar valt markeras det med gr¨on bakgrundsf¨arg och resten av k¨allmeningen blir ljusgr˚a. ¨Overs¨attningen blir nu i svart f¨arg och alla ord som ¨ar l¨ankade f˚ar en gr¨on bakgrundsf¨arg. Anv¨andaren avmarkerar eller markerar nu ord genom att klicka p˚a dem och sparar l¨ankningen genom att trycka p˚a Save(se figur 13).
Figur 13: Val av ord att redigera ¨ar valt och ett nytt ord att l¨anka till ¨ar valt.
5
Diskussion och Resultat
5.1 Resultat
Programmet som har skapats ger m¨ojlighet att skapa ett projekt med hj¨alp av tv˚a parallella texter. Vid skapande av ett projekt instrueras anv¨andaren att dela upp texterna i meningar och till hj¨alp finns en knapp som f¨ors¨oker g¨ora detta automatiskt. N¨ar texterna ¨ar uppdelade instrueras anv¨andaren ˚aterigen, denna g˚ang f¨or att l¨anka meningarna emot varandra. ¨Aven h¨ar
finns det en knapp som f¨ors¨oker ˚astadkomma detta automatiskt. N¨ar meningsl¨ankning ¨ar klar visas texterna och meningsl¨ankningen i en ny vy.
Nu finns m¨ojligheten f¨or anv¨andaren att l¨agga till ordsegmentering och ordl¨ankning f¨or texterna. Om anv¨andaren v¨aljer detta kommer vyn se likadan ut, men m¨ojligheten att visualisera ordl¨ankningen har lagts till. Om anv¨andaren klickar p˚a ett meningspar hamnar dessa i fokus och m¨ojlighet att redigera ordl¨ankning finns, samt att ett par TEM-ramar visas. Programmet till˚ater ¨aven att spara ett projekt f¨or att vid ett senare tillf¨alle ¨oppna det igen.
I kapitel 1.3 presenterades en lista p˚a krav som programmet skulle st¨odja. De flesta av dessa punkter ¨ar uppfyllda p˚a ett eller annat s¨att. Punkt f¨or punkt s˚a ser det ut som f¨oljande:
• En k¨alltext ska kunna l¨aggas in i systemet • En ¨overs¨attning ska kunna l¨aggas in i systemet
De tv˚a f¨orsta punkterna har implementerats genom att anv¨andaren kan skapa ett nytt projekt d¨ar anv¨andaren m˚aste v¨alja en k¨alltext och ¨
overs¨attning.
• Automatisk strukturering av texterna i stycken eller meningar med editeringsm¨ojligheter
N¨ar ett nytt projekt har skapats m˚aste texterna struktureras upp i meningar innan de kan meningsl¨ankas. Anv¨andaren kan v¨alja att g¨ora detta manuellt genom att redigera texterna eller automatiskt genom skriptet Sentence-splitter fr˚an Europarl. F¨or tillf¨allet st¨ods automatisk uppdelning f¨or upp till 20 spr˚ak.
• Automatisk l¨ankning av meningar med editeringsm¨ojligheter
N¨ar texterna delats upp i meningar s˚a kr¨aver programmet att anv¨andaren l¨ankar meningarna. H¨ar har anv¨andaren m¨ojligheten att automatiskt l¨anka meningarna genom programmet Hunalign. Anv¨andaren kan ¨aven redigera l¨ankningen manuellt genom att dra och sl¨appa meningar i l˚ador.
• Automatisk tokenisering av texterna med editeringsm¨ojligheter Programmet st¨odjer automatisk tokenisering d˚a detta sker vid anrop till GIZA++. Det finns d¨aremot inga m¨ojligheter att editera denna
tokenisering.
• Taggning av ord
Taggning av ord ¨ar implementerat enbart p˚a en ytterst enkel niv˚a f¨or att kunna r¨akna ut vissa delar av TEM. Detta st¨ods genom att anv¨andaren manuellt kan m¨arka ord som grammatiska eller inte.
N¨ar meningar ¨ar l¨ankade s˚a finns m¨ojligheten att l¨agga till ordl¨ankning i texterna. Detta sker genom anrop till GIZA++ med funktionen Add word alignment i menyn. Anv¨andaren har ¨aven m¨ojlighet att redigera
ordl¨ankningen i sista vyn. Denna redigering sker i ett nytt f¨onster d¨ar anv¨andaren v¨aljer ett specifikt ord som denne vill redigera.
• Visualisering av ordl¨ankning och meningsl¨ankning
Visualisering av meningsl¨ankning sker i sista vyn genom att meningarna ligger bredvid varandra horisontellt samt att ett meningspar kan s¨attas i fokus. Visualisering av ordl¨ankning sker dynamiskt genom att anv¨andaren f¨or musen ¨over ett ord.
• Visning av TEM m˚att
I sista vyn finns m¨ojligheten att titta n¨armre p˚a ett meningspar genom att klicka p˚a det. N¨ar anv¨andaren klickar p˚a ett par hamnar dessa i fokus och m¨ojlighet att redigera ordl¨ankning visas. H¨ar visas ¨aven ett antal
TEM-ramar. M˚atten som visas ¨ar BCF, OCF och BFF.
Programmet ¨ar skrivet i Java och fungerar p˚a alla operativsystem med tillg˚ang till en Java Virtual Machine f¨or Java version 8 och upp˚at. Tyv¨arr st¨ods inte alla funktioner i programmet p˚a alla operativsystem d˚a alla verktyg inte ¨ar plattformsoberoende. De funktioner som inte alltid st¨ods ¨ar automatisk meningsuppdelning och meningsl¨ankning samt att l¨agga till ordsegmentering.
5.2 Diskussion
5.2.1 Metod
Utveckling av programmet har inte varit utan dess motg˚angar. Den ¨
oversiktliga planen har f¨oljts och fungerat bra. Den kunde dock ha gjorts mer detaljerad, framf¨or allt med avseende p˚a det grafiska gr¨anssnittet. Det som kunde gjorts annorlunda var att s¨oka ˚aterkoppling p˚a bland annat uppl¨agget av gr¨anssnittet. Detta skulle b˚ade underl¨atta och spara tid d˚a bristerna kunde ha uppt¨ackts innan dom implementerades.
I ¨ovrigt har systemutvecklingsmetodiken fungerat bra. Testning och implementation har kunnat ske parallellt utan att skapa problem. Detta beror p˚a att de flesta delarna av programmet har implementerats en efter en och att dom dessutom inte har n˚agon st¨orre inverkning p˚a
varandra.
En mer utf¨orlig utv¨ardering av l¨ankningssystem skulle vara att f¨oredra. Framf¨orallt beh¨ovs en v¨ardering av hur bra systemen ¨ar med eller utan
spr˚akspecifika resurser, samt hur mycket dessa p˚averkar. 5.2.2 Resultat
Det finns anv¨andarv¨anliga brister i programmet. Framf¨orallt visas eller f¨orklaras egentligen inte att ett projekt existerar i olika l¨agen. Det beh¨ovs b˚ade ett s¨att som visualiserar detta i anv¨andargr¨anssnittet och n˚agon typ av guide som kan f¨orklara detta vid skapande av ett nytt projekt.
M¨ojligtvis skulle dessa vyer kunna separeras till en typ av genomg˚ang i olika steg, men detta skulle i s˚a fall g¨ora funktionerna f¨or att spara och ¨
oppna lite problematiska. Det kunde ocks˚a l¨aggas till n˚agon typ av indikation att varje vy ¨ar ett steg i projektets g˚ang.
Visualiseringen av ordl¨ankning ¨ar ett bra och smidigt s¨att att se l¨ankningen utan att strukturen av meningarna p˚a n˚agot s¨att st¨ors. Det l˚ater anv¨andaren se och l¨asa texten utan vidare att vara st¨orande. Denna typ av visualisering ger dock ingen ¨oversiktlig bild av l¨ankningen, utan det kan beh¨ovas flera s¨att att visualisera ordl¨ankningen. Eftersom m¨ojligheten att s¨atta en mening i fokus finns skulle det kunna l¨aggas till flera
alternativ h¨ar, framf¨orallt de vanligaste visualiserings-tekniker som tas upp i kapitel tv˚a. Denna visualisering b¨or dock ske i ett separat f¨onster eller i en annan del av vyn.
Redigering av ordl¨ankning ¨ar f¨or n¨arvarande anpassad f¨or att redigera ett ord i taget. Detta ¨ar en anv¨andbar funktion om anv¨andaren vill just det, att redigera endast ett ord. Det ¨ar dock b˚ade sv˚art att se felaktiga
l¨ankningar i redigeraren p˚a grund av att endast den simpla visualiseringen visas h¨ar. Det skulle vara anv¨andbart med en mer grafisk visualisering ¨
aven h¨ar, m¨ojligtvis genom att dra streck eller anv¨anda matris-metoden. Att b˚ade visualisera och till˚ata redigering med matriser kan vara mycket effektivt. Detta har tyv¨arr en stor nackdel; stora meningar skapar mycket stora rutn¨at. N¨ar rutn¨aten blir f¨or stora s˚a blir det ist¨allet mycket sv˚art att se vilka ord som ¨ar l¨ankade och de ¨ar dessutom mycket sv˚ara att f˚a plats med p˚a en datorsk¨arm utan att rutorna blir f¨or sm˚a. ¨Aven I*Links redigeringsmetod, d¨ar anv¨andaren f˚ar g˚a igenom hela meningar och verifiera l¨ankningen, ¨ar ett bra alternativ som effektivt g˚ar igenom en hel mening.
Redigering av meningsl¨ankning ˚astadkommer det den beh¨over, vilket ¨ar att kunna matcha meningar mot deras motparter. Meningsl¨ankningen p˚averkar dock mer ¨an bara l¨ankningen mellan meningar. Den best¨ammer bland annat strukturen p˚a meningarna vilket kan bli ett problem med den nuvarande redigeraren. Att ¨andra strukturen i en text kan bli ett problem bland annat d˚a en anv¨andaren beh¨over flytta ett meningspar eller separera
tv˚a meningar. Detta skulle kunna l¨osas genom att l˚ata anv¨andaren l¨agga in tomma l˚ador d¨ar detta ¨onskas, ist¨allet f¨or att det automatiskt l¨aggs till l¨angst ner. Det skulle ¨aven vara anv¨andbart med funktioner f¨or att byta plats p˚a tv˚a meningar fr˚an samma spr˚ak. Dessa funktioner skulle
m¨ojligtvis kunna implementeras som knappar f¨or en markerad mening. P˚a samma st¨alle skulle ¨aven knappar f¨or att flytta meningen upp eller ner ¨
aven kunna l¨aggas till, som ett alternativ till att dra och sl¨appa. Verktygen och ordsegmenteringen ¨ar i denna implementation externa. Problemet med detta ¨ar att vissa inte fungerar p˚a alla operativsystem, som resten av programmet. Det finns ¨aven en risk med externa anrop att problem skulle uppst˚a som inte g˚ar att hantera fr˚an programmet. Det skulle vara till f¨ordel med ett helt integrerat system, helst helt skrivet i Java. Detta skulle underl¨atta m˚anga delar av systemet och en st¨orre del av informationen fr˚an dessa verktyg skulle kunna tas tillvara p˚a.
5.3 M¨ojlig utvidgning av systemet
En teknik som tyv¨arr inte anv¨ands i systemet ¨ar att GIZA++ kan ge ett flertal l¨ankningsalternativ. Ist¨allet till˚ats GIZA++ sj¨alv v¨alja det
alternativ som det sj¨alv rankar som b¨ast. Det skulle kunna g˚a att l˚ata anv¨andaren ist¨allet v¨alja mellan ett par av dessa l¨ankningsalternativ. Detta skulle ¨aven kunna kombineras med I*Links redigeringsmetod om man l˚ater anv¨andaren f¨orst v¨alja mellan ett par alternativ och sedan verifiera eller modifiera varje ord i meningen.
Automatisk ordklasstaggning vore en m¨ojlig utvidgning av programmet. Detta skulle f¨orse anv¨andaren med mer information om texterna och samtidigt underl¨atta framtagning av TEM-ramar, d˚a n˚agra av ramarna kr¨aver detta.
Att separera l¨ankningssystem och anv¨andargr¨anssnitt genom en server-och klient-del ¨ar ocks˚a en m¨ojlighet. Detta skulle kunna realiseras med en central serverdel som inneh˚aller l¨ankningssystem och d¨ar klienten skickar texterna f¨or bearbetning genom en klient. Klienten skulle inte beh¨ova inneh˚alla n˚agra externa verktyg utan skulle enbart anv¨andas f¨or att visualisera eller redigering texten. Med en klient skulle till exempel en l¨arare kunna skapa en uppgift, som eleverna sen kommer ˚at och kan l¨anka sin text emot. Detta skulle ge m¨ojlighet f¨or ett mer sofistikerat system f¨or l¨ankning som kan utnyttja data fr˚an flera ¨overs¨attningar. I ett s˚adant system skulle b˚ade statistik och m¨ojligtvis ¨aven maskininl¨arning vara m¨ojligt.
6
Slutsats
Syftet med detta arbete var att skapa ett program som utnyttjar
existerande verktyg f¨or att l¨anka tv˚a parallella texter. Programmet skulle kunna l¨anka automatiskt, samt kunna visualisera och ge anv¨andaren m¨ojlighet att redigera denna l¨ankning. Det skulle ¨aven kunna betygs¨atta en ¨overs¨attning med hj¨alp av TEM.
Programmet som skapats till˚ater en anv¨andare att l¨anka tv˚a parallella texter med varandra och anv¨ander sig av tv˚a system f¨or automatisk l¨ankning, ett p˚a meningsniv˚a och ett p˚a ordniv˚a. Det till˚ater redigering och visualisering av denna l¨ankning p˚a b˚ade menings- och ord-niv˚a. Det ¨ar ¨
aven anpassat till att kunna r¨akna ut och visa vissa ramar inom TEM.
Programmet kan anv¨andas av n˚agon utan djupare kunskaper om l¨ankning och l¨ankningssystem. Hur anv¨andarv¨anligt och anv¨andbart programmet ¨ar i sitt nuvarande format ¨ar diskuterbart. M˚alet att programmet skulle kunna anv¨andas i spr˚akutbildningar har med stor sannolikhet inte n˚atts. F¨or att programmet ska ˚astadkomma detta kr¨avs ett par utvidgningar har programmet och m¨ojligtvis en mer komplett l¨osning d¨ar samtliga externa system ist¨allet ¨ar helt integrerade.
Referenser
[1] Ljuba Tarvi (2006). Comparative Translation Assessment: Quantifying Quality.
[2] Lars Ahrenberg, Ljuba Tarvi (2013). Natural Language Processing for the Translation Class. In proc. Of the second workshop on NLP for computer-assisted language learning , Oslo, Norway.
[3] http://anymalign.limsi.fr/ (h¨amtad 2015-01-12)
[4] Adrien Lardilleux, Yves Lepage. (2009) Sampling-based multilingual alignment. International Conference on Recent Advances in Natural Language Processing (RANLP 2009), Borovets, Bulgaria, September 2009.
[5] Franz Josef Och, Hermann Ney.(2003) A Systematic Comparison of Various Statistical Alignment Models, Computational Linguistics, volume 29, number 1, pp. 19-51 March 2003.
[6] D´aniel Varga, L´aszl´o N´emeth, P´eter Hal´acsy, Andr´as Kornai, Viktor Tr´on, Viktor Nagy (2005).Parallel corpora for medium density languages In Proceedings of the RANLP 2005, pages 590-596 [7] I. Dan Melamed (1996). A Geometric Approach to Mapping Bitext
Correspondence, IRCS Technical Report 96-22, a revised version of the paper presented at the First Conference on Empirical Methods in Natural Language Processing (EMNLP’96), Philadelphia, PA, May. [8] http://nlp.cs.nyu.edu/GMA/ (h¨amtad 2015-01-12)
[9] Noah A. Smith, Michael E. Jahr. (2000). Cairo:An alignment
visualization tool. In Second In-ternational Conference on Linguistic Resourcesand Evaluation
[10] http://www.ida.liu.se/labs/nlplab/ILink/readme.htm (h¨amtad 2015-01-12)
[11] Ulrich Germann (2008) Yawat: Yet Another Word Alignment Tool. Proceedings of the ACL-08: HLT Demo Session (Companion Volume), pages 20–23
[12] Shari Lawrence Pfleeger, Joanne M. Atlee (2009) Software Engineering - Theory and Practice, 4th edition, Pearson Education International. [13] Philipp Koehn (2005) Europarl: A Parallel Corpus for Statistical