Språkigenkänning en tillämpning av OCR system och klassificering Projekt i Bildanalys Anna Lindholm
Introduktion Syftet med projektet är att undersöka möjligheterna att känna igen vilket språk en text är skriven på med utgångspunkt från en bild på en text. Målet är att hitta ett bra OCR-system för igenkänning av bokstäverna i bilderna och därefter en bra klassificeringsmetod för språken. Två klassificeringsmetoder undersöks här, klassificering genom att identifiera speciella tecken och ord för språken och klassificering genom jämförelse av histogram för den okända texten med en känd exempeltext. I detta projekt undersöktes igenkänning av språken engelska, franska, spanska, tyska och svenska. 2
1. Val av OCR system Anna Lindholm Som första steg i projektet undersöktes möjligheten att hitta bra gratis OCR-program på internet som fungerar tillräckligt bra. Två alternativ som hittades var gocr och FreeOCR. Dessa program testades med exempeltexter tagna från boken Languages of the world av Kenneth Katzner samt med lite mer modernt skrivna texter från Wikipedia och det visade sig att FreeOCR var det program som bäst lämpade sig för projektet eftersom det har stöd för alla våra valda språk utom svenska. För bilderna med de svenska texterna användes den tyska klassificeringen eftersom detta ansågs vara det språk som var mest likt teckenmässigt. Att ha med ett språk som OCR-systemet troligen inte klarar så bra ansågs vara intressant för att se hur bra språkigenkänningen fungerar på en text som inte är helt korrekt. Några korta exempel på hur bra FreeOCR fungerar för de olika språken visas nedan: Engelska, original: Image analysis is the extraction of meaningful information from images; mainly from digital images by means of digital image processing techniques. Engelska, OCR: Image analysis is the extraction of meaningful information from images; mainly from digital images by means of digital image processing techniques. Franska, original: L'analyse d'image est l'extraction d'information signicative des images ; principalement des images numériques au moyen de techniques de traitement d'image numérique. Franska, OCR: L analyse d image est l extraction d infonnation signicative des images ; principalement des images numeriques au moyen de techniques de traitement d image numerique. Spanska, original: El análisis de imagen es la extracción de la información significativa de imágenes; principalmente de imágenes digitales por medio de técnicas de proceso de imagen digital. Spanska, OCR: El analisis de imagen es la extracción de la infonnación signiíicativa de imágenes; principalmente de imagenes digitales por medio de tecnicas de proceso de imagen digital. Tyska, original: Bildanalyse ist die Extraktion der sinnvollen Informationen von den Bildern; hauptsächlich von den digitalisierten Bildern mittels der Verfahrenstechniken des digitalisierten Bildes. Tyska, OCR: Bildanalyse ist die Extraktion der sinnvollen Infonnationen von den Bildern; hauptsächlich von den digitalisierten Bildern mittels der Verfahrenstechniken des digitalisierten Bildes. Svenska, original: Bildanalys syftar till förståelse och kategorisering av bilder. Svenska, OCR: Bildanalys syftar till förstäelse och kategorisering av bilder. (Källa: Uppslagsord Image Analysis från Wikipedia) Som synes fungerar FreeOCR mycket bra för de stödda språken, det händer att accenter eller prickar försvinner men annars klassificeras bokstäverna i princip perfekt. För svenska blir det något sämre eftersom programmet inte stödjer å (och därmed klassificerar det som ä eller a istället) men texten är fortfarande helt läsbar. 3
2. Klassificering Anna Lindholm Bilder genererades på texter tagna från Wikipedia genom att skriva en textfil till pdf och därefter konvertera till jpeg. FreeOCR användes på alla bilder med texter på olika språk och resultatet sparades som textfiler (.txt) som sedan kunde läsas in i Matlab. 2.1. Klassificering genom igenkänning av bokstäver och ord För denna klassificering skrevs Matlab-programmen reader och identifier. I reader läses en text in från en textfil och därefter används identifier för att bestämma vilket språk texten är skriven på. idenfifier innehåller en mängd kännetecken för de olika språken, dels vilka ovanliga bokstäver som kan förekomma, dels några vanliga ord som nästan alltid förekommer i en text skriven på det givna språket. Vägledning för hur man ska välja kännetecken för de olika språken har erhållits från boken Languages of the world av Kenneth Katzner. De kännetecken som använts listas nedan: Engelska: the, are Franska: â, ê, î, que, dans Spanska: ñ, ó, á, que, y Svenska: ä, ö, och, i Tyska: ä, ö, ü, ß En text skriven på ett okänt språk läses in och gås igenom bokstav för bokstav. Då ett kännetecken för ett visst språk hittas i texten adderas en etta till platsen för detta språk i en vektor och efter att ha gått igenom hela texten klassificeras språket som det språk vars plats i vektorn har störst belopp, det vill säga det språk där flest kännetecken i den okända texten har hittats. Utskriften då programmet körts visas i figur 1 nedan. Figur 1: Körning av reader.m 4
2.2. Klassificering genom jämförelse av histogram I detta fall undersöktes fördelningen av tecken hos de olika språken. Inläsningen av en exempeltext för vart och ett av de fem språken görs i Matlab-programmet language_train. Ett histogram ritas för vart och ett av de fem språken (se figur 2) och förekomsten av alla ASCIItecken representerat som en vektor, normerad med antalet tecken i den inlästa texten, räknas ut för varje språk. De fem genererade vektorerna används som typexempel för fördelningen för bokstäverna i respektive språk. Då programmet körs skrivs även de fem vanligaste tecknen för varje språk ut (se figur 3). Figur 2: Histogram för de fem valda språken 5
Figur 3: Körning av language_train.m För att ta reda på vilket språk en text är skriven på används sedan programmet language_test, där en text läses in och en histogram-vektor genereras på samma sätt som i language_train. Vektorn jämförs sedan med typvektorerna för de fem språken som genererades i language_train och språket klassificeras som det språk där typvektorn är mest lik vektorn för texten skriven på det okända språket (där medelvärdet av det absoluta felet hos vektorerna är minst). Utskriften vid körning av language_test visas i figur 4 nedan. Figur 4: Körning av language_test.m 6
Diskussion Klassificering av språk med hjälp av den ganska primitiva metoden att leta efter speciella bokstäver och ord fungerar förvånansvärt bra; för de bilder med text vi har genererat har språket blivit korrekt klassificerat alla gånger. Då antalet kännetecken för de olika språken ökas kan troligen klassificeringen bli ännu säkrare men programmet kommer då också att bli mer tidskrävande. En nackdel med denna metod är att den bygger på att vissa speciella tecken och ord används i texten, annars är metoden värdelös, men å andra sidan är det i princip omöjligt att skriva en text utan att använda ord som att, i, och (på respektive språk) och liknande. Metoden med histogram fungerar inte fullt så bra, men klarar att klassificera de flesta texter rätt. Denna metod skulle med största säkerhet kunna förbättras avsevärt genom att läsa in längre (och kanske mer typiska) träningstexter. Ett sätt att göra klassificeringen ännu bättre skulle vara att även titta på förekomsten av bokstavsföljder, vilket gör att metoden alltmer liknar den tidigare beskrivna metoden med kännetecken, men med fördelen att man inte själv behöver genererar dessa kännetecken. 7