N-grambaserad språkbestämning Johanna Lambertz jolam@stp.ling.uu.se Examensarbete i datorlingvistik Språkteknologiprogrammet Uppsala universitet Institutionen för lingvistik och filologi 9 juni 2004 Handledare: Mats Dahllöf, Uppsala universitet Fredrik Larsson, Phoneticom AB
Sammanfattning Syftet med den här studien är att undersöka möjligheterna till automatisk språkbestämning och att finna en lämplig metod att implementera. Om resultatet av utvärderingssteget är tillräckligt stabilt kommer programmet att användas i ett text-till-tal-system hos Phoneticom AB i Uppsala, där denna studie utförts. I den här studien utvärderas en statistisk n-grammetod för automatisk språkidentifiering. Metoden fokuserar de kombinationer av tecken, sk. n-gram, som används i de olika språken. Som träningsdata används en samling av korpusar, för vilka det korrekta språket är känt. N- grammen, tillsammans med frekvenser, extraheras ur korpusarna och dessa språkmodeller används sedan för att uppskatta hur troligt det är att texten har producerats av de olika språken. Det språk som har genererat det högsta värdet på samband väljs. I studien jämförs resultatet av metoder som använder sig av unigram, bigram respektive trigram. Tre olika beräkningsmetoder; enkel poängräkning, beräkning av det Euklidiska avståndet och beräkning av Spearman s rangkorrelation, har implementerats för vardera n- gramslängd och sammanlagt ger detta nio olika varianter av språkidentifieringsprogram. Dessa program har utvärderats och resultaten visade sig vara mycket varierande. Vissa av programmen var mycket beroende av textens längd och andra hade svårigheter att språkbestämma de kortaste texterna (4-5 löpord) som användes i utvärderingssteget. Två av programvarianterna, poängräkningsprogrammet och programmet med beräkning av det Euklidiska avståndet, som båda var anpassade till trigram, uppnådde dock hög grad av korrekthet, även för korta texter. På de kortaste testfilerna (4-5 löpord) blev resultaten 88,9 respektive 91,1 procent, och vad gäller de längsta testfilerna (80-100 löpord) var programmen i stort sett felfria. När det gäller de felaktiga språkval programmen gjorde visar utvärderingen att programmen förväxlar språk som är lika varandra, t.ex. norska och danska. Även spanska och katalanska var i vissa fall svåra att skilja åt. i
Innehållsförteckning Förord iv 1 Inledning 1 1.1 Syfte...1 1.1.1 Förutsättningar och krav...1 1.2 Rapportens disposition...2 2 Bakgrund 3 2.1 Olika metoder för språkbestämning...3 2.1.1 Ordbaserade metoder...3 2.1.2 Teckenbaserade metoder...4 2.1.3 Grammatiska metoder...6 2.2 Korpusar...6 3 Genomförande 7 3.1 Val av metod...7 3.2 Datainsamling...8 3.2.1 Korpusarna...8 3.2.2 Testdata...9 3.2.3 N-grammen...10 3.3 Övergripande programstruktur...12 3.4 Beräkningsmetoder...12 3.4.1 Poängräkning...12 3.4.2 Euklidiskt avstånd...13 3.4.3 Spearman s rangkorrelation...14 3.5 Valbara språk som argument...15 3.6 Språkoberoende implementation...15 4 Utvärdering 17 4.1 Utvärderingsmetod...17 4.2 Utvärdering och jämförelse av de nio programmen...17 ii
4.2.1 Poängräkning med trigram...19 4.2.2 Euklidiskt avstånd med trigram...21 4.3 Diskussion och kommentarer till resultaten...22 4.4 Jämförelse med andra verktyg...24 4.4.1 TextCat...24 4.4.2 SILC...26 4.4.3 Kommentarer till resultaten...27 5 Slutsatser 29 5.1 Framtida förbättringar och utvecklingsmöjligheter...31 Referenser 33 iii
Förord I denna uppsats redovisas ett examensarbete som utförts som en del av Språkteknologiprogrammet vid Institutionen för lingvistik och filologi, Uppsala universitet. Examensarbetet har utförts hos Phoneticom AB i Uppsala under våren 2004. Jag vill här ta tillfället i akt att uppmärksamma några personer som på olika sätt hjälpt mig att genomföra detta arbete. Jag vill rikta ett tack till min handledare på Institutionen för lingvistik och filologi, Mats Dahllöf, som har kommit med värdefull kritik och goda råd kring uppsatsens innehåll och utseende. Ett tack går även till min handledare på Phoneticom AB, Fredrik Larsson, som givit mig vägledning och stöd under arbetets gång. Ytterligare ett tack går till Bengt Dahlqvist på Institutionen för lingvistik och filologi för de tips och synpunkter jag fått. Tack! Johanna Lambertz, Uppsala juni 2004 iv
1 Inledning Att automatiskt bestämma språket på vilket ett dokument är skrivet har många möjliga användningsområden. Till exempel har alla stora sökmotorer på Internet i dagsläget stöd för flera olika språk, vilket gör det möjligt för användaren att begränsa sina sökningar till dokument skrivna på ett visst språk. Automatisk språkbestämning används för att sortera ut dessa dokument. Inom språkteknologin är det i många fall nödvändigt att känna till vilket eller vilka språk en text är skriven på för att någon typ av bearbetning ska kunna utföras. Så är fallet när det exempelvis gäller informationsextraktion, textkategorisering, lexikonuppslagning och parsning. Vid maskinöversättning kan systemet användas för att identifiera källspråket, och även inom talteknologin finns flera tänkbara användningsområden när det gäller såväl talsyntes som taligenkänning. Inom lingvistisk forskning kan program som utför språkbestämning användas vid exempelvis sammanställandet av korpusar från Internet eller andra flerspråkiga textarkiv. Ett språkidentifieringsprogram medför då att arbetet både underlättas och effektiviseras. Problematiken kring automatisk språkbestämning har fått mycket utrymme inom forskningen och ett antal tänkbara metoder och tillvägagångssätt har föreslagits. Vissa av dem är väldigt enkla och fungerar bra om texterna som ska språkbestämmas är någorlunda långa. Andra är mer komplicerade och fungerar ofta bättre för korta texter. 1.1 Syfte Syftet är att undersöka möjligheten att automatiskt bestämma språktillhörigheten hos elektroniska texter. Lämplig metod ska implementeras och valet av metod ska göras utifrån de önskemål som finns när det gäller programmets tilltänkta användningsområde. En utvärdering ska utföras för att det på så sätt ska kunna avgöras om pålitligheten hos programmet är tillräckligt stor för att det ska tas i bruk. 1.1.1 Förutsättningar och krav Programmet, som utför automatisk språkbestämning, har utvecklats åt Phoneticom AB i Uppsala och är tänkt att användas i ett text-till-tal-system, där det ska ha som uppgift att tala om för systemet vilken språktillhörighet en text har. Utifrån detta kan sedan rätt talsyntes användas vid uppläsning av texten. Programmet är först och främst tänkt att användas vid uppläsning av webbsidor. Phoneticom har även andra idéer om hur programmet kan användas, exempelvis vid uppläsning av e-postmeddelanden. För att programmet ska passa Phoneticoms syften fanns en del krav från deras sida som påverkade såväl valet av identifieringsmetod som vissa implementeringslösningar. Exempelvis är programmet skrivet i programmeringsspråket c++ för att det ska vara lätt att integreras i det redan existerande systemet. Programmet ska utifrån ett antal givna språk avgöra vilket språk som är det mest troliga. De språk som programmet hanterar är valda utifrån Phoneticoms önskemål och är för tillfället nio till antalet; svenska, norska, danska, engelska, tyska, franska, italienska, spanska och 1
katalanska. Programkoden ska vara skriven så att det är lätt att lägga till nya språk allt eftersom Phoneticoms kundkrets vidgas. Det ska vidare vara möjligt att begränsa antalet möjliga språk genom att låta programmet ta valbara språk som argument. Detta är användbart då Phoneticoms kunder sällan har tillgång till fler än ett par olika talsynteser. Att låta programmet välja mellan alla nio språken är då både onödigt tids- och minneskrävande. Dessutom ökar sannolikheten för att rätt svar levereras om antalet språk att välja mellan är begränsat. Vidare är det viktigt att språkidentifieringsprogrammet är snabbt, eftersom det används i realtid, och inte kräver så mycket lagringskapacitet. Det är dessutom önskvärt att programmet klarar av att identifiera språket på så korta texter som möjligt, med så stor pålitlighet som möjligt. Det kan till exempel finnas tillfällen då ett dokument innehåller text på flera språk och då ska möjligheten finnas att skifta talsyntes inom ett och samma dokument. Det är även en fördel om språkidentifieringsprogrammet är stabilt vad gäller textuella felaktigheter. 1.2 Rapportens disposition I det första kapitlet ges en kort introduktion till automatisk språkbestämning och innehåller en beskrivning av de förutsättningar och krav som fanns i inledningsfasen av den här studien. I det nästföljande bakgrundskapitlet beskrivs ett antal olika metoder som kan användas för att språkbestämma en skriven text. Även några för- och nackdelar med de olika metoderna behandlas, liksom vilka begränsningar metoderna har. I det tredje kapitlet beskrivs vad som har genomförts i den här studien. Det inleds med en beskrivning av den metod som valts utifrån de krav som fanns på språkidentifieringsprogrammet. Här finns även beskrivningar av de ställningstaganden som var nödvändiga vid extraherandet av de data som skulle användas. Tre beräkningsmetoder för att bestämma språket på texten har använts och dessa beskrivs och exemplifieras i detta kapitel. För att programmet ska passa in i Phoneticoms system krävdes vissa justeringar. Dessa beskrivs i ett av avsnitten i detta kapitel, liksom en kort beskrivning av programmens struktur. De program som har konstruerats har sedan utvärderats och resultatet från utvärderingarna återfinns i det fjärde kapitlet. Här redovisas även en jämförelse som gjorts med två andra program som utför språkbestämning av skriven text. Kapitlet innehåller dessutom kommentarer till de funna resultaten, samt en diskussion. Uppsatsen avslutas med ett kapitel som innehåller slutsatser och framtida användningsområden och utvecklingsmöjligheter för den metod som har använts. 2
2 Bakgrund 2.1 Olika metoder för språkbestämning Möjligheten att automatiskt kunna språkidentifiera skriven text har fått relativt mycket utrymme inom forskningen och ett antal olika metoder har implementerats och utvärderats. Några av de som nämns i litteraturen är olika typer av ordbaserade och teckenbaserade metoder. Även metoder där olika sätt att använda mer grammatisk kunskap om språken har undersökts. Metodernas resultat har visat sig vara mycket beroende av längden på den text som ska språkbestämmas. En mycket enkel metod kan därför mycket väl tjäna sitt syfte om programmet enbart ska språkidentifiera långa texter som exempelvis romaner, medan det för kortare texter ofta krävs mer kunskapsintensiva metoder. 2.1.1 Ordbaserade metoder Ordbaserade metoder bygger på samma teknik som den som människan ofta använder för att identifiera språk och är de allra enklaste metoderna för språkbestämning. De går ut på att söka efter ord som är unika eller vanliga för ett språk. Unika ord En av de allra enklaste metoderna för språkidentifiering är att hitta ord som är unika för de olika språken. Genom att matcha orden i texten som ska språkbestämmas med en lista över de unika orden för vartdera språket, kan programmet avgöra vilket av språken det handlar om. Om texten inte innehåller de ord som specificerats kan inget svar ges. Detta medför att metoden har uppenbara brister vid identifiering av korta texter där antalet ord är litet och sannolikheten för att de unika orden ska ingå därför minimal. Ett problem som uppstår vid ordbaserade metoder är den information som kan gå till spillo i tokeniseringssteget. Att tokenisera exempelvis engelska och franska texter är relativt enkelt då en sträng av tecken som avgränsas med ett inledande och ett avslutande blankslag kan sägas utgöra ett ord. I japanska och kinesiska markeras däremot inte ordgränser av blanksteg. För att tokenisera texter skrivna på sådana språk krävs att man har mer lingvistisk kunskap om språken i fråga och språkspecifika lösningar krävs. Frekventa ord De enkla ordbaserade metoderna kan utvecklas genom användning av frekvenser. Metoden med frekventa ord går ut på att, utifrån stora textmassor, generera en frekvenssorterad ordlista för vartdera av de olika språken. Därefter matchas de ingående orden i den text man vill språkbestämma med dessa listor. Om ett ord förekommer i flera av språken väljs det språk med högst frekvens av det förekomna. Metoden har vissa begränsningar. Texternas innehåll och språkets stil kan påverka resultatet när det gäller ordfrekvenserna. Att använda frekvenser löser inte heller problemet med identifiering av korta texter. De innehåller helt enkelt för få ord för att identifieringen ska vara pålitlig (Souter m.fl. 1994). 3
De ord som är frekventa i en text är ofta grammatiska ord. Att endast utgå från språkens grammatiska ord vid språkidentifiering är därför ett annat alternativ. De grammatiska orden kan oftast inte uteslutas ur en sats då de ger struktur åt satsen, samt gör den förståelig. Detta innebär att texten som ska språkbestämmas borde innehålla ett antal av dessa ord och språkidentifieringen borde då kunna genomföras. Vidare är de grammatiska orden ofta unika för de olika språken, korta och begränsade till antalet, vilket gör det enkelt att konstruera hanterbara lexikon av dem. Resultatet från en studie som gjorts med matchning av grammatiska ord visar att metoden fungerar mycket bra för texter som är längre än nio ord. I väldigt korta texter (ett till tre ord) återfinns vanligen alla syntaktiska kategorier förutom just grammatiska ord. Metoden är därför direkt olämplig för identifiering av korta texter (Giguet 1996). Denna metod förutsätter att texten som ska identifieras är fullständig. I praktiken är detta inte alltid fallet. Det kan exempelvis handla om olika typer av listor som ska språkbestämmas eller telegrafiska texter där de grammatiska orden är uteslutna. 2.1.2 Teckenbaserade metoder Även bland de teckenbaserade metoderna finns ett flertal olika tillvägagångssätt som har använts för automatisk språkbestämning. Att använda unika strängar, alfabetet och n-gram är metoder som nämns. Unika strängar En av de enklaste teckenbaserade metoderna går ut på att skapa listor med längre teckensträngar som är unika för de olika språken. Förekomst av dessa strängar i en text ger upplysningar om vilket språk det handlar om. Metoden fungerar tämligen bra när programmet enbart är tänkt att hantera ett fåtal språk. Då är det relativt enkelt att sätta ihop ett stort lexikon över unika strängar för vartdera språket. Vid tillägg av flera språk blir det allt svårare att finna unika teckensträngar och de som hittas är ofta mycket ovanliga i språken. Att de skulle förekomma i texten som ska identifieras är därför inte troligt och svårigheter med identifieringen uppstår (Souter m.fl. 1994). Metoden har således stora svårigheter med att identifiera korta texter där antalet ord är litet och sannolikheten att strängarna ska förekomma därför är minimal. Ett annat problem är den stora textmängd som krävs för att man ska kunna försäkra sig om att alla teckensekvenser som är möjliga i ett språk verkligen har kommit med. Detta är näst intill omöjligt. Även om man hittar strängar som är unika för varje språk är det inte säkert att språkidentifieringen lyckas. I en studie användes strängen cchi för att identifiera italienska texter. Strängen hade identifierats som unik för språket, men att säga att alla texter som innehåller zucchini eller Pinocchio är italienska är föga troligt (Dunning 1994). Ytterligare en nackdel med metoden är det jobb som krävs vid tillägg av nya språk. Det finns inget som säger att en sekvens av tecken, som är unik när ett visst antal språk hanteras, förblir unik efter tillägg av flera språk. Vid utökandet av antalet språk måste därför nya lexikon med unika teckensekvenser extraheras för samtliga av språken. Alfabetet Ett annat tillvägagångssätt är att utgå ifrån alfabetet. Även om alfabetet innehåller en hel del lika tecken, så finns en del tecken som är specifika för ett eller flera språk. Det handlar till 4
exempel om sk. utsmyckade tecken. Genom att jämföra tecknen i texten som ska språkbestämmas med en lista över de tecken som finns i vartdera språket kan språket bestämmas. Det har dock visat sig att metoden att enbart använda alfabetet vid identifiering inte är så lyckad. En av anledningarna är att det är mycket få tecken som bara återfinns i ett enda språk. De specifika tecknen i alfabeten är heller inte tillräckligt vanliga i språken för att de ska kunna användas på ett tillförlitligt sätt. Fördelningen över de 10 vanligaste tecknen i de nio språken som hanteras i den här studien framgår av sammanställningen i tabell 2.1. tecken svenska e a n t r s i l d o danska e r n t d a i s l g norska e n r t s a i l o d engelska e t a o n i s h r d franska e s a i n t r u o l tyska e n i r s t d a h u italienska e i a o n t r l s c spanska e a o s n r i l d t katalanska e a s i r n t l o c Tabell 2.1. De 10 mest frekventa tecknen i de nio olika språken. 1 Av tabellen framgår att inget av de språkspecifika tecknen finns bland de tio vanligaste för något av språken. I svenskan kommer bokstaven ä först på 15:e plats, å på 20:e plats och ö på 21:a plats. Att använda unika tecken är därför ingen tillförlitlig metod på grund av att tecknen är alltför ovanliga. N-grammetoden För att få ännu bättre statistik om ett språks användande av olika tecken kan man utöka metoden till att hantera de kombinationer av tecken som förekommer i de olika språken. Att sedan räkna ut sannolikheten för att en given teckensekvens är konstruerad av de olika språken resulterar i språkspecifik information om språkets teckenkombinationer. Sådan information kan räknas ut med relativt hög precision utifrån korpusar från de olika språken. Teckenkombinationerna kallas vanligen för n-gram och är en n tecken lång sekvens. Sekvenser av ett tecken (n=1) kallas unigram, två tecken (n=2) kallas bigram och tre tecken (n=3) kallas trigram etc. N-grammen görs oftast överlappande och en fördel med det är att man får med alla de n-gram språket består av. I annat fall är det tänkbart att viktig information om vanliga n-gram i språket skulle gå förlorad. I exemplet nedan delas strängen en bil upp i n- gram. Bigrammen och trigrammen är överlappande. unigram bigram trigram e, n, _, b, i, l _e, en, n_, _b, bi, il, l en, en_, n_b, _bi, bil, il_ 1 Fördelningarna över teckenförekomsterna i de nio språken är sammanställda utifrån de korpusar som samlats in i den här studien (se 3.2.1) 5
Språkbestämningsmetoden går ut på att n-gram, med ett bestämt värde på n, extraheras ur stora textmassor. En n-gramfördelning för vartdera språket skapas och med hjälp av frekvensen för de olika n-grammen och antalet n-gram beräknas sannolikheten för att ett givet n-gram är konstruerat av de olika språken. Dessa observerade sannolikheter kan sedan användas för att avgöra vilket språk det handlar om. Exempelvis är sannolikheten för th i engelskan relativt hög, medan den i spanska är näst intill obefintlig. På så sätt kan man räkna ut ett värde för att vartdera språket har genererat texten som ska språkbestämmas och det språk som givit högst värde kan då väljas. Vid extraherandet av n-gram krävs ingen tokenisering och det finns därför inte någon risk att viktig information går förlorad vid extraherandet. Eftersom språkmodellerna är skapade utifrån antagandet om att textsträngar endast är sekvenser av tecken behövs ingen språkspecifik förprocessering. Vilken text som helst, på vilket språk som helst, kan delas upp i n-gram. Detta gäller således även för språk som inte använder mellanslag som ordskiljare. 2.1.3 Grammatiska metoder Det har även gjorts flera försök där grammatisk kunskap om språken har använts för språkidentifiering. Ett exempel på detta är användandet av morfologin hos orden i de olika språken. Metoden går ut på att dela upp språkens ord i morfem som sedan används för att matcha textens ord. Ett annat alternativ är att använda vanliga ändelser, stavelser, sekvenser av konsonanter eller vokaler för matchning. Att använda sig av språkens syntax är ett annat tillvägagångssätt. En sådan metod är bra när en ordform förekommer i flera olika språk. Ordet chat förekommer till exempel både i franska och i engelska, men på olika syntaktisk position. Genom att genomföra syntaktisk analys på satserna kan man alltså sluta sig till vilket språk det handlar om. Dessa metoder erfordrar mycket lingvistisk kunskap om de olika språken och vid tillägg av nya språk krävs omfattande språkspecifik förbehandling. 2.2 Korpusar Flera av metoderna för automatisk språkbestämning som beskrivits ovan går ut på att utvinna språkspecifik information från stora textmassor. Dessa textmassor kallas korpusar och används som träningsmaterial till språkidentifieringsprogrammen. Det finns ett flertal olika definitioner av vad en korpus är. I den här rapporten använder jag korpus som beteckning på en datorläsbar textsamling av naturligt förekommande språk. När en korpus ska sättas ihop finns det vissa saker som är viktiga att ta hänsyn till. Korpusar kan exempelvis vara sammansatta på en mängd olika sätt beroende på hur de ska användas och det är viktigt att fundera över vad man behöver för material för att få önskat resultat. En korpus kan till exempel vara balanserad eller representativ. En balanserad korpus består av olika typer av text från alla typer av domäner, genrer, författare och stilar i bestämda proportioner. En sådan korpus ska spegla språket så som det faktiskt används. Vid sammansättning av en sådan korpus är det viktigt att få med tillräckligt mycket text för att korpusen verkligen ska kunna reflektera språket. En representativ korpus innehåller ofta texter från en och samma domän. Om språkidentifieringsprogrammet enbart är tänkt att användas på tidningstexter används med fördel sådana texter för att sätta samman korpusen. Språkbestämningsprogrammet som ska utvecklas i den här studien ska dock inte användas på texter ur en specifik domän, utan ska användas på texter av olika typer. Det är dock viktigt att den korpus som används som träningsmaterial är representativ för språket (Kennedy 1998:19ff.). 6
3 Genomförande 3.1 Val av metod I den här studien har en n-grammetod för att språkbestämma texter använts. Program som använder unigram, bigram respektive trigram har implementerats och utvärderats. Valet av metod är grundat på de krav som fanns på språkidentifieringsprogrammet och de fakta som framkommit (avsnitt 2.1) om de olika metoderna. Här beskrivs de argument som låg till grund för valet. Vissa av de metoderna som beskrivits ovan kan tjäna sitt syfte mycket väl när det handlar om ett fåtal språk eller där språken skiljer sig mycket från varandra. Vid tillägg av fler språk kan dock problem uppstå. Phoneticom har behov av att enkelt kunna lägga till hantering av flera språk i takt med att marknaden för deras produkter växer. Det ska därför vara lätt att lägga till nya språk utan att någon språkspecifik förbearbetning behövs. När det gäller de ordbaserade metoderna krävs, förutom ihopsamlandet av en representativ korpus för det nya språket, i vissa fall även viss språkspecifik kunskap för tokeniseringssteget. För metoder som använder unika förekomster av strängar eller ord krävs dessutom justeringar av de redan befintliga lexikonen då förekomster som tidigare varit unika för ett språk kanske inte längre är det. När det gäller n-grammetoden är det enda som behövs vid tillägg av ett nytt språk en stor, representativ korpus för det specifika språket. Några justeringar av n- gramfördelningarna för de redan existerande språken är inte nödvändiga och detta talar till n- grammetodens fördel. En annan fördel med att använda n-gram istället för ord i det här sammanhanget är att metoden med n-gram bidrar till en kontroll av storleken på datamängden. Att dela upp en text i ord innebär normalt att lexikonet växer i takt med storleken på texten. När det gäller n-gram finns en övre gräns för hur stort lexikonet kan bli. Lexikonet bestående av n-gram kan inte överskrida antalet tecken i språket upphöjt till n. Exempelvis kan ett språk som består av 26 bokstäver inte generera mer än 676 (26 2 ) bigram eller 17576 (26 3 ) trigram. Om de n-gram som inte existerar i språket (t.ex. aaa, bbb) räknas bort, minskar storleken drastiskt. Stora tillgångar av minne är därför inte ett krav vid användandet av en n-grammetod, vilket naturligtvis är en klar fördel. En tänkbar metod är att endast använda de n-gram som är unika för vartdera språket för att på så sätt minska datamängden ytterligare. Här uppstår dock samma problematik med unika strängar som beskrevs tidigare (avsnitt 2.1.1). Det är svårt att försäkra sig om att man fått med alla n-gram som finns i ett språk. Det är dessutom svårt att hävda att bara för att ett n-gram finns med i texten som ska språkbestämmas så är hela texten skriven på det språket. På webbsidor, där denna applikation ska användas, kan det tänkas att huvuddelen av texten är skriven på ett språk, samtidigt som det kan förekomma exempelvis länkar på andra språk. En webbsida som är översatt till flera språk innehåller ofta ortnamn, företagsnamn och egennamn som inte kan översättas till språket i fråga. Detta innebär att programmet inte får vara känsligt för sekvenser av tecken som inte är specifika för språket. Att bygga programmet på unika n-gram är därför inte en bra lösning för det här användningsområdet. Det är vidare mycket troligt att de flesta n-grammen återfinns vid något tillfälle i flera av korpusarna. Det kan exempelvis handla om felstavningar, vilket ger upphov till n-gram som vanligen inte förekommer i språket. Det kan även vara låneord eller segment på andra språk som kommit med. Detta är vanligt förekommande i t.ex. facktexter och skönlitteratur. 7
Det är även en fördel om metoden som väljs är pålitlig vid förekomster av textuella fel. Här har n-gram en fördel som hänger ihop med dess natur. Eftersom varje sträng delas upp i mindre delar kommer textuella fel endast att påverka ett begränsat antal av dessa delar och resterande delar förblir korrekta. Önskvärt, i det här fallet, är också att programmet klarar av att avgöra vilket det använda språket är på så kort text som möjligt. Av uppenbara skäl har samtliga ordbaserade metoder problem med identifiering av just korta texter och är därför inte lämpliga i detta sammanhang. Eftersom de mest högfrekventa orden i ett språk tenderar att vara grammatiska ord (avsnitt 2.1.1) fångar en n-grammetod med större värde på n upp den information som de ordbaserade metoder som bygger på sådana ord innehåller. Även morfologisk information i form av vanliga affix involveras då de flesta n-grammen överst i frekvenslistan ofta är prefix och suffix. Detta syns tydligt i sammanställningen av de tio vanligaste trigrammen för de nio språken (tabell 3.1). trigram svenska en_ et_ er de tt_ de_ om_ för ar_ an_ danska er_ en_ et_ de de og og nde der _ha norska en_ er_ et de _og og_ om_ ne ha for engelska _th the he_ nd an and ed of of_ ing franska es de de_ nt_ ent le le re_ e_d _qu tyska en_ er de ich der ie_ ein ch_ nd_ sch italienska _di to_ re co _la di de no_ ent che spanska _de de_ os la la_ as_ que _qu ue_ es_ katalanska _de es_ de_ que la qu _la ent _el el_ Tabell 3.1. De 10 mest frekventa trigrammen i de nio olika språken. 2 Bland de 10 vanligaste trigrammen i den svenska korpusen återfinns exempel både på korta ord (för) och på ändelser (et_ och ar_). Bland de engelska trigrammen finns flera korta ord (and, of och the) och även här vanliga affix (ed_ och ing). Liknande exempel finns även bland de övriga språken och detta visar på en viss koppling mellan n-grammetoder, ordbaserade metoder och mer lingvistiska metoder. 3.2 Datainsamling 3.2.1 Korpusarna För att erhålla statistik om de olika språkens n-gramfördelningar krävs en korpus för varje språk, ur vilken n-grammen med tillhörande frekvenser kan utvinnas. Korpusarna ska alltså fungera som träningsmaterial för språkidentifieringsprogrammet och det är då viktigt att ha jämförbara korpusar för de olika språken. Ett antagande gjordes om att korpusarna därför ska ha samma storlek och ungefär samma proportioner av genrer för att den insamlade datamängden ska ge ett tillförlitligt resultat, dvs. korpusarna ska var någorlunda balanserade 2 Fördelningarna över förekomsterna av trigrammen i de nio språken är sammanställda utifrån de korpusar som samlats in i den här studien (se 3.2.1) 8
(se avsnitt 2.2). Sådana korpusar är svåra att finna och att samla in nya var därför en nödvändighet. Det var inte känt i inledningsfasen av studien vilken storlek på korpusarna som skulle vara lämplig. En vanlig slutsats i flera tidigare studier är att resultatet vid utvärderingen av språkidentifieringssystemet är beroende av storleken på träningsmaterialet (Dunning 1994, Cavnar & Trenkle 1994). En liten korpus gav undantagslöst upphov till sämre resultat än en större. För att undvika detta har korpusarna som samlats in för denna studie varit relativt stora. Språket på webbsidor är oftast modernt och en korpus som skildrar hur språket används idag var därför lämplig. Texterna hämtades från Internet och var mestadels publikationer, skönlitterära e-böcker, uppsatser och nyhetsartiklar. Det visade sig vara tämligen lätt att samla in material och storleken på vardera korpusen hamnade på runt 1 miljon löpord. Då en teckenbaserad metod skulle användas var det emellertid inte antalet ord som var av betydelse, utan antalet tecken i korpusarna. Även om antalet ord i de olika korpusarna är ungefär lika så betyder inte det att antal tecken är lika. I svenskan och tyskan används till exempel sammansättningar, medan man i engelskan ofta särskriver sådana konstruktioner. Detta skulle betyda att en tysk korpus på en miljon löpord ger upphov till betydligt fler n-gram än till exempel en engelsk, vilket skulle kunna påverka slutresultatet negativt i och med att sannolikheterna för de olika n-grammen ska beräknas. De slutgiltiga storlekarna uppgick till 6,2 miljoner tecken per språk. Antagandet om att den tyska korpusen skulle innehålla färre löpord än den engelska visade sig vara korrekt. Den tyska korpusen innehöll drygt 0,93 miljoner löpord, medan den engelska innehöll 1,15 miljoner. I exempelvis facktexter och skönlitterära verk är det vanligt att det förekommer sekvenser av text på andra språk än källspråket. För att kunna försäkra sig om att sådana inte finns med i det insamlade materialet krävs ett tidsödande manuellt arbete. Av praktiska skäl var detta inte möjligt. Mina kunskaper i de olika språken var dessutom i flera fall obefintliga, vilket var en ytterligare anledning till att manuell korrektion var en omöjlighet. Korpusarnas väl tilltagna storlek ska dock kunna avhjälpa att fördelningen påverkas av eventuella inslag av andra språk. En viss kontroll av de insamlade texterna gjordes dock när det gäller långa sekvenser av versaler, t.ex. rubriker, innehållsförteckningar etc. och texter som innehåller många facktermer och förkortningar. Sådana sekvenser sorterades bort manuellt allteftersom insamlandet fortlöpte. 3.2.2 Testdata Det är tämligen trivialt att få ett bra resultat om man testar ett program på samma textmaterial som det har tränats på. För att man ska kunna uttala sig om en applikations korrekthet är det därför viktigt att testa den på en för programmet helt okänd text. För detta ändamål sparades en del av de insamlade korpusarna i separata testfiler som sedan användes i utvärderingssteget. Vid sammansättning av testfilerna finns vissa aspekter att ta hänsyn till. För att testkorpusarna inte ska skilja sig alltför mycket från träningstexten är det viktigt att man inte bara väljer ett längre sammanhängande stycke från ursprungskorpusen, utan istället kortare stycken från olika delar av korpusen. Det kan annars tänkas att resultatet av utvärderingen blir extra bra eller dåligt och detta vill man undvika. Testdata valdes därför slumpvis ut ur korpusarna. Testdata får inte heller skilja sig från träningsdata vad gäller användandet av versaler och gemener. Om en testtext exempelvis helt skulle vara skriven med versaler, och applikationen var tränad med gemener, skulle resultatet påverkas negativt. Detsamma gäller givetvis även 9
det omvända. Därför är det viktigt att se till att välja testmaterial med normal användning av både versaler och gemener. 3.2.3 N-grammen Teckenuppsättningen I studien jämförs resultatet av metoder som använder sig av unigram, bigram respektive trigram. Innan n-grammen kunde extraheras ur träningskorpusarna skulle en mängd nödvändiga ställningstaganden om vilka tecken som skulle tillåtas i n-grammen göras. Det är tänkbart att korpusarna innehåller olika tecken som inte medför någon språkspecifik information utan istället bidrar till att identifieringen försvåras. Sådana tecken kan till exempel vara siffror, skiljetecken och andra speciella tecken. Hur versaler och gemener ska hanteras var ett annat sådant ställningstagande som var nödvändigt. När det gäller siffror och andra speciella tecken som parenteser, citattecken etc. var det inte svårt att motivera varför dessa tecken inte ska ingå i n-grammen; de medför helt enkelt ingen språkspecifik information. Vad gäller versaler och gemener fanns det flera anledningar till att behålla skillnaden mellan dem i n-grammen. För det första var det den helt klart enklaste lösningen i och med att det på så sätt inte krävs någon funktion för att göra om de stora bokstäverna till små. För det andra kan man anta att användandet av versaler säger en del om språket. Meningar i ett visst språk kanske ofta börjar med ett visst ord och detta ord kanske inleds med ett trigram som är specifikt för språket. Till exempel är det många satser i svenska som inleds med ord som det, när och en. I tyskan skrivs alla substantiv med inledande versal. Detta leder till att n-gram med versaler är vanligare i tyskan än i de andra språken. Skillnaden mellan versaler och gemener innehåller således information om ett språks specifika särdrag. Av samma anledning kan användandet av skiljetecken säga en del om ett språks syntax. Satser avslutas eventuellt ofta på samma sätt och trigram med punkter, kommatecken och frågetecken kan därför vara intressanta att ha med. I det här fallet gjordes dock valet att utesluta dessa tecken. Om en korpus innehåller fler korta meningar än något annat språk blir antalet punkter naturligt fler. Detta kommer att påverka de observerade sannolikheterna för de respektive n-grammen och risken finns att en text med många korta satser identifieras som detta språk oavsett vilka andra n-gram som återfinns. Detta är inte önskvärt. Efter noga övervägande beslutades att samtliga 123 versaler och gemener som ingår i teckenstandarden ISO 8859, även kallad LATIN-1, skulle behållas. I denna teckenuppsättning ingår bland annat de utsmyckade bokstäver som används i de germanska och romanska språken, t.ex. ü, ñ, ç, è, å och æ (Skansholm 2000:82). Även de bokstäver som inte förekommer i något av de nio språk, som för tillfället behandlas, tilläts. Detta val gjordes för att det ska vara enkelt att lägga till nya språk som använder denna teckenstandard utan att tillägg eller justeringar i koden är nödvändiga. Även tecknen för blanksteg och apostrof, som används till exempel i engelskans hopdragningar (t.ex. don t), behölls, vilket resulterade i att det sammanlagda antalet tecken som tilläts blev 125. I unigrammen är det dock endast de 123 bokstäverna som tas tillvara. Blanksteg och apostrof plockades bort då många förekomster av dessa tecken i testdata inte ska medföra ett felaktigt språkval. En funktion som rensar de insamlade korpusarna från sådana tecken som inte var önskvärda konstruerades. Funktionen såg även till att överflödiga blanksteg togs bort för att underlätta extraherandet av n-grammen. 10
Räkning av n-gram I vissa studier har det förekommit att texterna tokeniserats före n-gramsextraktion för att på så sätt kunna utesluta att n-grammen sträcker sig över ordgränser (Cavnar & Trenkle 1994). Fördelen med att slippa de svårigheter som kan uppstå vid tokeniseringssteget försvinner då. Det är även möjligt att uteslutandet av sekvenser som sträcker sig över ordgränser medför att viktig information om de olika språkens teckenkombinationer går förlorad. I den här studien gjordes valet att inkludera denna typ av information och ingen tokenisering är därför nödvändig. För att få med information om ordbörjan och ordslut används blanktecken i n- grammen för att symbolisera början och slutet av strängen. Överlappande n-gram används för att viktig information om språkens n-gram inte ska gå förlorad. Som tidigare beskrivits medför n-grammetoden en begränsning av storleken på lexikonet. Av 26 bokstäver kan 17576 (26 3 ) olika trigram bildas. I det här fallet tillåts hela 125 tecken och den maximala storleken på lexikonet skulle då bli 1953125 (125 3 ). Denna storlek skulle kunna innebära att programmet blir både tids- och kapacitetskrävande. Det visade sig dock att antalet olika trigram som förekom i språkkorpusarna hamnade mellan 13726 (engelska) och 20219 (spanska), vilket framgår av tabell 3.2, och på så sätt finns ingen risk för ohanterliga mängder data. Antalet bigram hamnade mellan 1923 (italitenska) och 2341 (danska). Att antalet krympte så avsevärt beror till stor del på att flertalet möjliga trigramskombinationer aldrig förekommer i språken. En annan anledning är att antalet tecken i en språkkorpus aldrig uppgick till 125 utan hamnade mellan 74 (danska) och 92 (katalanska) (se tabell 3.2). unigram bigram trigram svenska 77 1996 16647 danska 74 2341 18969 norska 84 2042 16587 engelska 75 1984 16772 franska 84 2248 17415 tyska 82 2095 15961 italienska 82 1923 13726 spanska 84 2420 20219 katalanska 92 2273 17042 Tabell 3.2. Sammanställning över antalet unika uni-, bi- och trigram i de olika språken. För att reducera antalet ytterligare togs de allra ovanligaste n-grammen bort ur lexikonet. Detta var en tidssparande åtgärd, liksom ytterligare sätt att försäkra sig om att n-gram som inte förekommer i språket, men som kommit med i korpusen genom sekvenser av andra språk, inte påverkar slutresultatet. Att den katalanska korpusen innehåller så många fler bokstäver än till exempel den spanska skulle kunna tyda på att språksegment av andra språk kommit med i den katalanska. Anmärkningsvärt är även att det i den svenska och engelska korpusen finns näst intill lika många olika bokstäver. Detta verkar otroligt med tanke på att svenskan innehåller å, ä, ö både som gemener och versaler och den enda tänkbara förklaringen är att icke-språkspecifika sekvenser har kommit med i den engelska. Efter att ha sorterat bort de unigram som förekom mindre än 100 gånger i korpusen blev resultaten mer trovärdiga. Den katalanska unigramfördelningen består nu av 65 olika tecken och den spanska av 61 tecken. Den svenska listan 11
över tecken är nu 57 tecken stor medan den engelska krympte till 52 tecken. Det var dessa unigramfördelningar som sedan användes vid språkidentifieringen. Utifrån korpusarna skapades en frekvenslista över de n-gram som förekommit. Trigrammet att återfinns exempelvis 31422 gånger i den svenska träningskorpusen. Det sammanlagda antalet trigram i den svenska korpusen är 6200000 trigram. Den observerade sannolikheten för att ett trigram i en svensk text är att är således 31422/6200000 = 0,00506798 (0,51%). 3.3 Övergripande programstruktur Utifrån korpusarna har nu språkens n-gramfrekvenser beräknats. Informationen finns sparad i filer, en för vartdera språket. Dessa filer ska sedan användas som uppslagsverk för de n-gram som finns i texten som ska språkbestämmas. Programmet som ska utföra själva språkbestämningen består av flera steg. Texten som ska språkbestämmas läses in från en fil som programmet får som argument. Därefter redigeras texten på samma sätt som korpusarna, dvs. de oönskade tecknen rensas bort, och en fördelning över n-grammen i texten skapas. I nästa steg är det dags att utifrån de data som samlats in utföra någon typ av jämförelse mellan data hämtad ur texten och de olika språkens n-gramfördelningar för att på så sätt få svar på vilket språk som är det mest troliga. När programmet har utfört denna jämförelse levereras resultatet av språkbestämningen. Om två eller fler språk givit upphov till samma resultat görs inget val och programmet svarar att flera språk är lika troliga. 3.4 Beräkningsmetoder Liksom det finns ett flertal övergripande tillvägagångssätt för hur språkbestämning kan utföras, så finns det även ett antal olika metoder för hur språket sedan ska bestämmas utifrån de språkdata som samlats in. Några av de som nämns i den litteratur som behandlar ämnet är neurala nätverk, markovmodeller och olika typer av expertsystem (Sibun & Reynar 1996). Det vanligaste är dock att språkidentifieringsprogrammen bygger på statistiska metoder som beräknar hur troligt det är att de olika språken har genererat texten i fråga. Därefter väljs det mest troliga språket. I den här studien har två olika sådana statistiska metoder implementerats. En tredje variant med enkel poängräkning har också använts. Varje beräkningsmetod är anpassad till unigram, bigram respektive trigram. Sammanlagt ger detta nio olika program som ska utvärderas och jämföras. 3.4.1 Poängräkning En av metoderna som har implementerats är baserad på enkel poängräkning. För varje n-gram i texten som ska språkbestämmas görs en uppslagning av de observerade sannolikheterna i samtliga språkfiler. Det språk som har den högsta sannolikheten för det specifika n-grammet får ett poäng. Om n-grammet skulle ha identiskt värde på den observerade sannolikheten i två eller flera språk får inget av språken något poäng. När alla n-gram i texten har behandlats levererar programmet det språk som har fått högst antal poäng som språkförslag. Ett exempel där uppgiften är att språkbestämma strängen en bil illustrerar poängräkningsmetoden för trigram. 12
observerade sannolikheter poängräkning trigram svensk korpus engelsk korpus sve > eng eng > sve _en 0,003384300 0,000671443 1 en_ 0,012752700 0,002839960 1 n_b 0,000858696 0,000470155 1 _bi 0,000306285 0,000207739 1 bil 0,000325963 0,000097256 1 il_ 0,000078869 0,000245158 1 Tabell 3.3. De observerade sannolikheterna för trigrammen i en bil i den svenska respektive engelska korpusen. Sannolikheterna jämförs och språket med högst värde för vartdera trigrammet tilldelas ett poäng. Av de sex trigrammen i strängen en bil var den observerade sannolikheten i fem fall större i svenska än i engelska. Programmet som använder sig av poängräkningsmetoden för trigram skulle i det här fallet därför svara att den korta textsträngen är skriven på svenska. 3.4.2 Euklidiskt avstånd Den andra metoden som implementerats går ut på att använda likheten mellan n- gramfördelningen i texten och fördelningen i korpusarna för att bestämma språket. Metoden innebär att man beräknar det Euklidiska avståndet mellan n-gramfördelningen i texten och n- gramfördelningen i de olika språken. Maximal likhet definieras som att det Euklidiska avståndet mellan n-gramfördelningarna är obefintligt (Oakes 1998:111). Det språk som ger upphov till det minsta värdet på avståndet är därför det mest troliga språket. Formeln för att räkna ut det Euklidiska avståndet är där L är avståndet och a och b är element, i det här fallet den observerade sannolikheten för ett visst trigram, i korpusen respektive i texten som ska språkbestämmas. För att illustrera metoden används återigen de observerade sannolikheterna för trigrammen i strängen en bil i tabell 3.3 som exempel. I strängen förekommer alla sex trigrammen bara vid ett tillfälle. Sannolikheten för vartdera trigrammet blir därför 1/6 (=0,167). För det första trigrammet i strängen (_en) blir differensen mellan den observerade sannolikheten i den svenska korpusen och sannolikheten för trigrammet i texten -0,1636157, dvs. differensen mellan 0,003384300 och 0,167. Formeln ger att det Euklidiska avståndet mellan den svenska korpusen och texten i detta fall blir 0,401172. Samma uträkning för engelska ger 0,406405 vilket är något större än det svenska värdet. Detta skulle resultera i att även den här programvarianten skulle svara att språket på textsträngen är svenska. 13
3.4.3 Spearman s rangkorrelation Den tredje beräkningsmetoden som har använts i den här studien kallas Spearman s rangkorrelation, där korrelationen är ett mått på det samband som finns mellan texten och de olika n-gramfördelningarna (Oakes 1998:32). Språket som ger upphov till störst samband är det mest troliga. Metoden kräver en rangordnad lista över de n-gram som finns i korpusarna. N-grammen i de olika språken rangordnas därför utifrån de observerade sannolikheterna. Det vanligaste får rang 1 och sedan rangordnas övriga n-gram i stigande ordning. Om två eller flera n-gram är lika vanliga i språket hamnar de på delad rang. Även n-grammen i texten som ska språkbestämmas rangordnas. Formeln som används för att räkna ut korrelationen är där N är antalet par, dvs. i det här fallet antalet n-gram som extraherats ur texten som ska språkbestämmas. D är skillnaden mellan rangordningen på varje par (X-Y) där X är värdet på rangen hämtat ur korpusen och Y är värdet på rangen från texten för de ingående n-grammen. För trigrammen i strängen en bil ser rangordningen i den svenska korpusen respektive i texten ut på följande sätt (tabell 3.4). trigram rang hämtat ur korpusen inbördes rang i korpusen (X) rang i texten (Y) Tabell 3.4. Rangordningsvärden för trigrammen i strängen en bil i den svenska korpusen, det inbördes rangordningsvärdet (X), respektive värdet på rangen för trigrammen i texten (Y). X-Y betecknar differensen mellan värdena. Rangordningen för de olika trigrammen hämtas ur den svenska korpusen och trigrammen rangordnas därefter inbördes utifrån dessa värden. Även trigrammen i texten som ska språkbestämmas rangordnas. I det här fallet är de sex trigrammen lika vanliga i texten som ska språkidentifieras. Samtliga trigram får då ranking 3,5, vilket är medelvärdet av rangpositionerna 1 t.o.m. 6. Skillnaden mellan rangordningsvärdena för de olika trigrammen beräknas och formeln för Spearman s rangkorrelation ger resultatet 0,5. Samma uträkning för engelska ger också 0,5 vilket resulterar i att det är lika troligt att de båda språken har genererat strängen. Programmet klarar alltså inte av att språkbestämma denna korta textsträng. Även utvärderingen (avsnitt 4.2) visar att denna beräkningsmetod har stora problem med att språkbestämma korta texter och en möjlig anledning till detta diskuteras i avsnitt 4.3. X-Y _en 27 2 3,5-1,5 en_ 1 1 3,5-2,5 n_b 220 3 3,5-0,5 _bi 736 5 3,5 1,5 bil 697 4 3,5 0,5 il_ 1930 6 3,5 2,5 14
3.5 Valbara språk som argument I Phoneticoms system kommer språkidentifieringsprogrammet att användas för att avgöra vilket av endast ett litet antal språk en webbsida är skriven på, dvs. programmet kommer aldrig att behöva välja mellan alla nio språken. Språken, som ska vara valbara, bestäms utifrån den enskilda kundens krav. Det kan exempelvis handla om att välja mellan svenska eller engelska om kunden har tillgång till talsynteser för dessa båda språk. Att programmet då har nio språk att välja på gör det hela mycket mer tids- och kapacitetskrävande. Dessutom blir identifieringen betydligt säkrare om det endast finns ett fåtal språk att välja mellan. Att specificera vilka språk som är möjliga att använda är därför ett krav. För att lösa detta justerades programmet så att det är möjligt att ge de valbara språken som argument. Argumenten består av språkkoder och en sådan språkkod utgörs av de två inledande tecknen i språknamnet, t.ex. sv för svenska. Då programmet ska användas i realtid krävs att det är så snabbt som möjligt. Då det kan bildas fler trigram än unigram och bigram är trigramsprogrammet naturligt långsammare. Att språkbestämma en text tar för unigrams- och bigramsvarianterna endast någon tiondels sekund, medan det för trigramsvarianterna tar runt en sekund. Genom att programmet nu tar de språk som det ska välja mellan som argument behöver det inte läsa in data från samtliga nio språk för att göra jämförelsen. Denna justering bidrar därför även till att programmets tidsåtgång minskar. Som tidigare nämnts bidrar möjligheten att kunna ge valbara språk som argument även till att programmet har lättare att avgöra vilken språktillhörighet en text har. Detta beror på att programmet har färre språk att välja mellan. Programmet med poängräkningsmetoden påverkas dessutom direkt av hur många språk som finns att välja på eftersom poängen delas ut mellan de olika språken. Om antalet språk som finns att välja mellan är litet blir programmet säkrare i sin bedömning och fler texter kan språkbestämmas korrekt. De övriga beräkningsmetoderna påverkas inte direkt av att språkantalet minskas, utan det värde som beräknas är detsamma oberoende av antalet språk. De båda programvarianterna har dock lättare att avge ett korrekt svar om antalet valbara språk är begränsat. 3.6 Språkoberoende implementation Som tidigare nämnts ska det vara enkelt att lägga till hantering av flera språk allt eftersom tiden går. Det är därför önskvärt att det varken krävs justeringar eller tillägg i koden för att utföra detta. För att göra det möjligt skrivs koden så att den är oberoende av vilka språk som ska användas vid det specifika tillfället. Detta görs, som i exemplet nedan med programmet som beräknar det Euklidiska avståndet 3, genom en for-loop som itererar igenom den lista av språkkoder som programmet har läst in. 3 Koden är hämtad ur trigramsvarianten av programmet som utför språkbestämning genom beräkning av det Euklidiska avståndet som har utvecklats i den här studien. Om intresse finns vad gäller resterande kod var vänlig kontakta författaren. 15
// inlasning av data och berakning av det Euklidiska avstandet for(int i= 0; i < liststorlek; i++){ sprintf(fil, "%strigram.txt", spraklista[i]); ifstream f_data(fil); while(f_data >> trigram >> sannolikhet) korpusdata[trigram] = sannolikhet; f_data.close(); eukl_avstand = berakna(korpusdata, textdata); resultat.insert(make_pair(eukl_avstand, spraklista[i])); korpusdata.clear(); } Ett filnamn bildas genom att de två tecknen i språkkoden konkateneras ihop med ett filnamnssuffix, i det här fallet trigram.txt. Filen öppnas och data, i form av n-grammen med respektive observerad sannolikhet, läses in. Därefter beräknas det Euklidiska avståndet mellan korpusdata och data som extraherats ur texten som ska språkbestämmas. Funktionen levererar ett värde på avståndet och tillsammans med språkkoden läggs detta in i en datastruktur. Denna datastruktur byggs på efterhand och innehåller i slutänden resultatet från beräkningarna för samtliga angivna språk. Listan sorteras och språkidentifieringsprogrammet kan leverera sitt svar. Tack vare denna lösning är nu det enda som krävs för att lägga till ytterligare språk insamlande av en representativ korpus för språket i fråga. Korpusen redigeras därefter med hjälp av den funktion som rensar texten från oönskade tecken, samt skapar n-gram av den. Filen som skapas läggs i den katalog där programmet hämtar n-gramfördelningarna för de olika språken. 16