Genomgång och utvärdering av algoritmer för fonetisk sökning efter svenska efternamn JOHAN SPAEDT KE Examensarbete Stockholm, Sverige 2011
Genomgång och utvärdering av algoritmer för fonetisk sökning efter svenska efternamn JOHAN SPAEDT KE Examensarbete i datalogi om 30 högskolepoäng vid Programmet för teknisk fysik Kungliga Tekniska Högskolan år 2011 Handledare på CSC var Lars Kjelldahl Examinator var Lars Kjelldahl TRITA-CSC-E 2011:076 ISRN-KTH/CSC/E--11/076--SE ISSN-1653-5715 Kungliga tekniska högskolan Skolan för datavetenskap och kommunikation KTH CSC 100 44 Stockholm URL: www.kth.se/csc
Genomgång och utvärdering av algoritmer för fonetisk sökning efter svenska efternamn Sammanfattning Detta arbete syftar till att göra en genomgång av de metoder som finns för för fonetisk sökning efter svenska namn. Målet är att hitta en algoritm som har både bra täckning och precision samtidigt som den inte är för långsam och skalar bra med mängden namn i databasen. Fokus ligger på algoritmer som skapar nycklar för indexering men även ett par andra metoder kommer beröras. Algoritmerna som undersöks kan grovt delas in i tre huvudgrupper. Algoritmer för strängjämförelse, algoritmer som använder sig av fonetisk kodning av enskilda tecken i namnet och algoritmer som bygger på mer komplexa regler. Då jämförelsen av algoritmernas prestanda ska göras utifrån deras förmåga att hitta fonetiskt lika strängar har ett större antal personer involverats i framtagandet av testdata för att få en så objektiv bild som möjligt av vad som kan anses vara snarlikt uttal. Detta har lett till en något vidare definition av uttalslikhet än vad som använts i många andra arbeten. Resultatet från undersökningen är väldigt skiftande och måste tolkas utifrån enskilda användningsfall. Allmänt kan dock sägas att algoritmer för strängjämförelse lämpar sig dåligt för användning på större datamängder medan i stort sett alla tecken- och grafemkodande algoritmer alla är relativt snabba och går att konstruera så att de antingen får en hög precision eller en hög täckning allt efter behov. Review and evaluation of algorithms for phonetic search for Swedish family names Abstract The aim of this work is to conduct a review of the methods available for phonetic search for Swedish family names. The goal is to find an algorithm that has good precision and recall but that isn t to slow and ideally it should scale well with the amount of names in the database. The focus will be on algorithms that generate keys for indexing but a few other algorithms will be considered as well. The algorithms in this work can roughly be placed in three main groups; algorithms for string comparison, algorithms that make use of phonetic encoding on a character basis and algorithms that use more complex linguistic rules. The performance of the algorithms is to be measured with regard to their ability to find phonetically similar strings and therefore I involved a rather large group of people in the development of the test data to obtain as objective a picture as possible of what can be considered a similar pronunciation. This led to a definition of pronunciation similarity that was somewhat broader then the definitions used in similar works. The results are very diverse and must be interpreted for different use cases to be really meaningful although some general conclusions can be drawn. Algorithms for string comparison are not very well suited for larger data sets but all other algorithms could be useful in different scenarios since they are relatively quick and can be designed so that they either get a high precision or a high recall, as required.
Innehållsförteckning Inledning... 1 Bakgrund...1 Fonetisk sökning...1 Hur fungerar fonetisk sökning... 1 Begränsningar...2 Svårigheter med fonetisk sökning på svenska namn... 2 Algoritmer för strängjämförelse... 4 Inledning...4 Användbarhet för fonetisk sökning...4 Redigeringsavstånd...4 Hammingavstånd... 4 Levenshtein- och Damerauavstånd... 4 Jaroavstånd... 5 Jaro-Winkleravstånd... 6 N-gram förfaranden...6 Val av N... 7 Utfyllnadstecken... 7 Algoritmer för fonetisk sökning... 8 Inledning...8 Teckenkodande...8 Konsonantkodning... 8 Soundex... 8 Grafemkodande... 10 NYSIIS... 10 Phonix... 10 Metaphone... 11 DoubleMetaphone... 11 Wåhlinkodning... 12 Patent och Registreringsverkets algoritm... 12 Datainsammling...13 Namnstatistik... 13 Jämförelse av algoritmerna...14 Teori... 14 Tidigare arbeten... 15 Utvärdering... 16 Resultat... 17 Inledande undersökningar... 17 Precision och Täckning... 17 F-värde... 18 Antal söksvar... 19 Söktid... 22 Diskussion...23
Strängdistansalgoritmer... 23 Fonetiska algoritmer... 23 Teckenkodande algoritmer... 24 Grafemkodande algoritmer... 24 Slutsats...25 Rekommendationer... 25 Förbättringsförslag... 25 Kombination av olika algoritmer... 25 Namnlängd och antal stavelser... 26 Använda sig av vokalerna... 26 Viktat Levenshteinavstånd... 26 Litteraturförteckning...27 Appendix I...29 Detaljerade beskrivningar av algoritmerna som utvärderats... 29 Regelnotation... 29 AmericanSoundex... 29 NYSIIS... 30 Metaphone... 31 Phonix... 32 PhonixSoundex... 34 Wåhlin... 34
Inledning Bakgrund Att slå upp personnamn i olika typer av informationssystem är en väldigt vanlig operation. Det kan röra sig om databaser över kunder, en telefonkatalog eller en passagerarlista. Att hitta exakt det namn som användaren matar in i sökfältet är enkelt, ofta är dock fallet att namnet som matas in är felstavat av olika anledningar. Antingen har användaren helt enkelt stavat fel men det kan även vara så att det finns flera likvärdiga stavningar för namnet eller att personen som ska söka har hört fel och söker efter ett namn som låter snarlikt till det som han vill hitta. Därför finns det ett behov av att kunna hitta approximativa matchningar till ett namn i en databas. Detta sökförfarande kallas omväxlande luddig, approximativ eller fonetisk sökning i litteraturen. Hädanefter kommer jag hålla mig till fonetisk med få undantag. Syftet med detta examensarbete har varit att undersöka möjligheterna som finns för fonetisk sökning anpassad för svenska namn. Med fonetisk sökning menas här en algoritm som för ett givet namn returnerar de namn i databasen som i någon mening uttalas lika dant. Arbetet har utförts på Sunstone Systems AB. De använder idag sökplattformen Solr i sin verksamhet. Solr erbjuder ett flertal metoder för approximativ eller fonetisk sökning men då programmet ursprungligen är utvecklat med fokus på en engelskspråkig marknad är de flesta av metoderna skräddarsydda för det engelska språket. Fonetisk sökning Med fonetisk sökning menas en sökning som hittar de teckenkedjor som kodar för samma eller liknande uttal som söksträngen för ett givet likhetsmått. Ordet fonetisk syftar på att algoritmen implicit använder sig av fonetisk och/eller fonologisk kunskap vad gäller uttalet av nämnda teckenkedjor. När man vill söka efter ett namn vars uttal är känt men ej den exakta stavningen är fonetisk sökning ett användbart hjälpmedel. Som beskrivet i kapitlet ovan är detta ofta fallet med namn och då speciellt med efternamn. En fonetisk algoritm måste alltså kunna hantera de tvetydigheter som finns i fråga om ords uttal och detta görs vanligtvis genom att utnyttja olika heuristiker gällande kopplingen mellan grafem och fonem. Detta innebär ofta att namnen transformeras enligt givna regler som avlägsnar så många tvetydigheter som möjligt och sedan jämförs de transformerade namnen för att se om de är lika. Detta innebär att en fonetisk sökning kan liknas vid en translitteration från ingångsalfabetet till ett relativt onoggrant fonetiskt alfabet. Hur fungerar fonetisk sökning Algoritmer för fonetisk sökning kan liknas med hashningalgoritmer. En vanlig ansats för en fonetisk sökalgoritm är att generera en eller flera nycklar för varje indatanamn som på något sätt representerar namnets uttal. När en databas används för att lagra efternamnen beräknas oftast dessa nycklar när namnet läggs till i databasen och sedan utförs den fonetiska sökningen mot fältet innehållande den fonetiska nyckeln. De flesta fonetiska algoritmer är korta enkla algoritmer som försöker använda en heuristik med så få regler som möjligt. Detta gör att algoritmerna ofta är enkla att implementera i olika typer av system. Indata är en teckenkedja som svarar mot en ortografisk representation av ett efternamn och utdata är oftast en nyckel bestående av siffror och/eller bokstäver. Siffrorna kodar ofta för fonetiska grupper härledda ur uttalslikheter. Vissa algoritmer försöker modellera tvetydigheter i uttal genom att generera flera nycklar för ett enskilt indata men detta hör till ovanligheterna. Då målet med de flesta fonetiska sökalgoritmer är att mappa ortografier med liknande uttal på samma nyckel går det sällan att ranka de förslag som returneras. Det finns dock två möjliga vägar för att ranka resultaten av en fonetisk sökning. Det ena är att ranka de förslag som 1
returneras från en fonetisk sökning med hjälp av andra metoder, exempelvis någon av de algoritmer för strängjämförelse som beskrivs nedan. En annan metod är att konstruera nyckeln som den fonetiska algoritmen returnerar på ett sådant sätt att de blir sorterbara efter likhet. En del sådana försök har gjorts (1) men de har inte visat några bra resultat. En perfekt algoritm för fonetisk sökning vore en algoritm som genererade samma nyckel för ord som uttalades exakt lika, nycklar som bara avvek lite för ord som uttalas snarlikt och helt skilda nycklar för ord som inte har någon uttalslikhet. Det vore även önskvärt om nycklarna vore sorterbara på uttalslikhet då man skulle kunna tillåta att fler resultat returnerades om de mest relevanta garanterat var högst upp i listan. Med tanke på hur långt ifrån målet även de mest sofistikerade algoritmerna är idag talar mycket för att detta är ett ouppnåeligt mål. Ytterligare ett problem uppstår i och med att de flesta språk har olika ortografier och det därför skulle vara nödvändigt med språkigenkänning för att kunna göra jämförelser av namn från olika språkbakgrund. Även om man begränsar sig till svenska finns det gott om tvetydigheter i uttal. Dels varierar språket kraftigt när det gäller olika dialekter men i dagens mångkulturella samhälle så lånas det även in namn från andra kulturer i den svenska namnmängden och uttalet av dessa ord försvenskas sedan medan stavningen i många fall behålls vilket leder till ytterligare undantag från gängse språkregler. Med andra ord är ett rimligare delmål att utveckla en algoritm som fungerar så bra som möjligt för ett språk. En algoritm som fungerar för ett stort antal språkkontexter skulle troligtvis kräva en inte oansenlig forskningsinsats. Begränsningar Jag kommer att begränsa mig till att enbart undersöka algoritmernas prestanda när det gäller sökning efter svenska efternamn. Anledningen till att jag valt bort förnamn är i huvudsak att mängden efternamn är mer statisk och även att det är mer befogat att tala om svenska efternamn än om svenska förnamn. Enligt SCB (2) är topp 100 listan över de vanligaste efternamnen i Sverige i stort sett oförändrad de senaste åren och enbart en handfull namn på listan är namn som inte kommer ur en svensk språktradition. Förnamnen är betydligt mer modebetonade och kommer i betydligt högre utsträckning från andra språkfamiljer. Ytterligare en anledning till att jag valt att fokusera på efternamn är att de erbjuder en betydligt större mängd stavningsvarianter, homonymer, vilket gör dem intressanta att undersöka. Detta är framförallt fallet med vanliga efternamn då människor behåller uttalet men ändrar stavningen särskilja sig. Den situation som då uppstår är precis den som fonetiska sökalgoritmer är konstruerade för att lösa. Då jag valt att fokusera på svenska efternamn har jag valt att begränsa de tecken som indata kan bestå av till följande A, À, Á, Â, Ã, B, C, Ç, D, Ð, Þ, E, É, È, Ê, Ë, F, G, H, I, Ì, Í, Î, Ï, J, K, L, M, N, Ñ, O, Õ, Ó, Ô, Õ, P, Q, R, S, Š, ß, T, U, Ø, Ö,, Ü, V, W, X, Y, Ý, Ÿ, Z, Ž, Å, Ä, Æ, Ö, Ø, Œ samt följande skiljetecken ', -,., :,. En tredje begränsning har varit att fokus har legat på funktionalitet så även om en del av utvärderingen visserligen varit algoritmernas snabbhet så har inget extra arbete lagts på att optimera algoritmerna när de väl varit implementerade. Svårigheter med fonetisk sökning på svenska namn Teckenkodning De flesta fonetiska sökalgoritmer som utvärderats härstammar från engelskspråkiga länder och tar enbart hänsyn till de bokstäver som ingår i det engelska alfabetet (A-Z). Då det i det svenska alfabetet även finns bokstäverna Å, Ä och Ö och jag utöver detta antagit att ett namn kan innehålla även ett stort antal andra tecken så har jag stått inför valet att antingen göra alla algoritmer kapabla att hantera alla ovan nämnda tecken eller normera orden innan de skickas till algoritmen. Jag valde det senare och normerade alla tecken som algoritmen inte specificerade regler för själv. 2
Dubbelnamn Ingen av de algoritmer jag stött på behandlar explicit dubbelnamn. Med dubbelnamn menar jag namn som består av två eller flera delar åtskilda av något av följande tecken ', -,., :,. Dessa tecken ignoreras i alla algoritmer. I vissa fall får de algoritmen att krascha och i andra ignoreras de enbart. Om detta blir ett problem eller inte beror på från fall till fall. Några tänkbara frågeställnningar rörande dubbelnamn skulle kunna vara följande. Är det för applikationen viktigt att kunna särskilja Lundberg från Lund-Berg eller anser man att det är samma namn? Vill man att det ska vara möjligt att hitta Lundberg när man söker på Lund eller Berg? Tvärtom? Exakt hur dubbelnamn ska behandlas får bestämmas från implementation till implementation, hur jag valde att hantera dubbelnamn finns beskrivet i kapitlet om korpusen nedan. 3
Algoritmer för strängjämförelse Inledning Fonetisk sökning kan anses vara ett underproblem till det mer generella problemet att matcha strängar som har varit ett aktivt forskningsområde minst sedan 50-talet (3). Forskningen har främst fokuserat på självkorrigerande kod och automatisk stavfelsrättning. Att hitta vilka strängar i en databas som relaterar fonetiskt till varandra påminner om att hitta rättstavningsförslag till ett givet ord. De algoritmer som beskrivs nedan skiljer sig alla från algoritmerna i nästkommande kapitel genom att de ej tar hänsyn till några språkliga stavningsregler eller någon fonetisk kunskap. De baseras istället helt och hållet på olika typer av likhetsmått mellan strängar och är applicerbara även på exempelvis binära strängar. Användbarhet för fonetisk sökning Namn som uttalas mer eller mindre lika representeras i ett och samma språk ofta av strängar som är lika varandra. Av denna anledning kan man förmoda att algoritmer för strängjämförelse skulle kunna fungera relativt bra för fonetisk sökning. Skulle det visa sig att algoritmerna presterar bra skulle detta ha den föredelen att strängavståndsalgoritmerna är relativt språkoberoende så en algoritm som fungerar för svenska skulle med stor sannolikhet kunna användas även för andra språk med liknande ortografi. Redigeringsavstånd Hammingavstånd Introducerades av Richard Hamming 1950 (3). Hammingavstånd är den enklaste formen av editeringsavstånd för strängar. Hammingavstånd jämför endast strängar av samma längd och man räknar antalet substitutioner som krävs för att transformera den ena strängen till den andra. Exempel på Hammingavstånd Levenshtein- och Damerauavstånd Avståndsmåtten Levenshteinavstånd och Damerauavstånd är väldigt lika. De beskrevs av Levenshtein 1966 (4) och Damerau 1964 (5). Båda kan, till skillnad mot hammingavstånd, även jämföra strängar av olika längd detta åstadkoms genom att man tillåter två nya operationer på strängen, nämligen insättning och brottagning av en bokstav. Skillnaden mellan Levenshteinavstånd och Damerauavstånd är att man enligt det senare likställer en transposition av två intilliggande bokstäver med operationerna insättning, borttagning och substitution. Två olika implementationer av Levenshteinavstånd och en implementation av Damerauavstånd ingår i undersökningen. Anledningen till detta är att två olika implementationer av Levenshteinavstånd redan fanns i Sunstones system i dagsläget. Implementationerna kräver bägge att man anger ett tal och sedan två strängar, söksträngen s 1 och teststrängen s 2. Den första implementationen returnerar alla strängar s 2 som är på Levenshteinavstånd från söksträngen. Denna implementation har jag valt att kalla ~x nedan efter sättet som algoritmen anropas i Solr idag. 4
Den andra implementationen beräknar först Levenshteinavståndet och returnerar sedan alla strängar s 2 där mellan strängarna Jag har val att kalla denna implementation Lx nedan. I båda implementationerna betecknar längden på strängen Damerauavståndet är implementerat på samma sätt som den andra implementationen av Levenshteinavstånd med skillnaden att beräknas istället för. Denna algoritm har jag valt att kalla Dx nedan. Exempel på Levenshtein- och Damerauavstånd Jaroavstånd Introducerades av Matthew A. Jaro 1985 och beskrivs i detalj bl.a. av Winkler 1990 (6). Detta mått utvecklades från början för att beräkna likheten mellan längre texter men arbetar på ordnivå och beräknar avståndet mellan varje ord till motsvarande ord i den andra texten för att på så sätt hitta totala avståndet mellan texterna. Avståndet mellan två strängar definieras som W Där är vikten associerad med i: te strängen är vikten associerad med transpositioner är antalet matchande bokstäver är antalet transpositioner är längden på i: te ordet Definition Två bokstäver från strängarna och anses matcha om deras position inte skiljer sig mer åt än Definition Om två bokstäver från strängarna och matchar men kommer i olika ordning så finns det en halv transposition i strängen Definition Definition Enligt Winkler är det lämpligt om W och i hans arbete har han godtyckligt valt W. Jag valde att behålla detta värde så definitionen för Jaroavståndet i min implementation är 5
Tröskelvärdet för vilka strängar som ska returneras är det som har varierats i undersökningen. Om tröskelvärdet satts till x har enbart de strängar med returnerats. Jaroavståndet betecknas nedan med Jx för olika värden på x. Exempel på Jaroavstånd Jaro-Winkleravstånd Introducerades av William E. Winkler 1990 (6). Det är en variant på Jaroavstånd som premierar strängar som har ett identisk startprefix v en viss längd. Jaro-Winkleravståndet definieras enligt Där är Jaroavståndet mellan och. är längden på matchande prefix. är maxlängden för matchande prefix. Winkler har valt a till 4 utan närmare motivering. är en skalfaktor. I Winklers orginalarbete är den satt till 0,1. Jag valde att använda samma numeriska värden som Winkler även om det troligtvis går att optimera. Optimala värden för och beror troligtvis på den genomsnittliga längden hos orden som ska matchas detta är dock inget som jag undersökt. Tröskelvärdet x för Jaro-Winkleravståndet har varierats på samma sätt som för Jaroavståndet och betecknas ned med JWx. Exempel på Jaro-Winkleravstånd Som synes påverkas inte resultatet för två strängar som inte har något gemensamt prefix, Johansson-Andersson, medan två strängar som har ett långt gemensamt prefix får ett högre värde, Johansson-Johanzon. N-gram förfaranden N-gram är att man delar upp ordet i delar besående av n bokstäver och sedan jämför antalet lika delsträngar. För att kunna jämföra två strängar behövs även här ett likhetsmått,. Det enklaste måttet är att helt enkelt räkna antalet N-gram som förekommer i de bägge strängarna. För lite mer avancerade mått kan man antingen använda sig av ett mått beskrivet av Ukkonen 1992 (7). Eller så kan man använda ett mått beskrivet av Pfeifer et al. 1995 (8). Där är mängden av alla N-gram i sträng. 6
Ett problem med alla dessa mått är att de förlorar information om N-gramens position i strängen och de tar inte heller hänsyn till eventuella dubbletter av N-gram inom namnet. Enligt (9) är dock upprepade bi- och trigram väldigt sällsynta. Val av N Du (10) hänvisar till en undersökning av Salton 1988 som tyder på att bi- och trigram skulle vara bäst lämpade för fonetisk sökning. Unigram har enligt den undersökningen för låg precision och N-gram med har för dålig täckning. Mina egna undersökningar med uni-, bi-, tri- och 4-gram pekar åt samma håll. Trots detta har jag valt att inkludera bi-, tri- och 4- gram i utvärderingen för att se om resultaten stämmer även för större datamängder. Utfyllnadstecken Pfeifer et al. (8) föreslår att man i början och/eller slutet av orden sätter utfyllnadstecken innan man beräknar N-gramlikheten för att förbättra sökresultatet. Om utfyllnadstecknen används ökar antalet involverade N-gram vilket troligtvis ökar precisionen utan att inverka särskilt mycket på täckningen. Jag har endast utvärderat med utfyllnadstecken på bägge sidor och har valt att testa alla möjliga värden på. Vid utvärderingen av N-gramanalys har följande parametrar varierats N, k och tröskelvärdet x. Enbart strängar som gett har returnerats. De olika parameteruppsättningarna har nedan namngivits knx. Exempel på N-gramavstånd med avståndmått enligt Pfeifer et al. N(Johansson, Jansson) N(Johansson, Jonasen) N(Johansson, Johanzon) N(Johansson,Andersson) Bigram, k=0 Bigram, k=1 Trigram, k=0 Trigram, k=1 Trigram, k=2 Exempel på N-gramavstånd med avståndmått enligt Ukkonen. Bigram, k=0 Bigram, k=1 Trigram, k=0 Trigram, k=1 Trigram, k=2 N(Johansson, Jansson) N(Johansson, Jonasen) N(Johansson, Johanzon) N(Johansson,Andersson) 7
Algoritmer för fonetisk sökning Inledning Både de teckenkodande och de grafemkodande algoritmerna har alla ganska långa listor på ersättningsregler som gör sig dåligt i löpande text. I de fall där jag bedömt att ersättningsreglerna har ett intresse men är för långa för att stå med i texten så har regeluppsättning förpassats till Appendix där en detaljerad beskrivning eller noggranna källor finns att hitta för alla utvärderade algoritmer. Förutom de algoritmer som nämns nedan finns det ett väldigt stort antal fonetiska sökalgoritmer som jag valt att inte ta med. Dessa algoritmer har ej tagits med då de varit anpassade för et tspecifikt språk och då troligtvis lämpar sig sämre för sökning på svenska namn. De engelskspråkiga fonetiska sökalgoritmer jag valt att ta med finns antingen i dagsläget implementerade i Solr (Metaphone, DoubleMetaphone, Soundex) eller har någon form av anspråk på att fungera i en internationell kontext (Phonix, Soundex). Det finns dock flera andra algoritmer som är tänkta för sökning på engelska namn bl.a. ipadist (9), caverphone (11), ONCA (12) och Synoname (13). Även för tyska finns det ett flertal, däribland Kölner Phonetics (14) (15), Daitch-Mokotoff soundex (16), Phonem (17) och Chamer Phonetik (18). Teckenkodande Dessa algoritmer ser enbart till varje enskilt tecken i namnet och bryr sig inte alls om tecknens kontext. De blir av denna anledning tämligen grova men väldigt snabba och enkla att implementera. Konsonantkodning Ser man till skrivet språk så märker man väldigt tydligt att uttalet till stor del styrs av de ingående konsonanterna medan vokalerna är av underordnad betydelse. De flesta algoritmer för fonetisk sökning utgår, som tidigare nämnts, från detta och väljer att helt eller delvis ignorera vokalerna i orden. Soundexalgoritmen nedan är ett väldigt tydligt exempel på detta då den helt ignorerar vokalerna och enbart använder sig av fonetisk kunskap gällande konsonanterna. För att se vilka effekter den fonetiska kodningen fick så implementerade jag även en väldigt naiv konsonantkodning som endast avlägsnade alla vokaler ur namnet. Nedan kallas algoritmen för Kkodning Exempel på Konsonantkodning Johansson Andersson Lindgren Kkodning JHNSSN NDRSSN LNDGRN Soundex Soundex är den äldsta metoden för fonetisk indexering och patenterades redan 1918 av Robert C. Russel (19). Metoden användes i omgångar för folkräkning i USA i lite olika utföranden åtminstone fram till 1950talet (20). Soundex bygger på fonetisk likhet mellan vissa bokstäver, framförallt för engelskt uttal, men grupperna stämmer relativt bra även för svenska. Då den använts för folkbokföring i USA samt är en principiellt enkel algoritm har den fått en enorm spridning jämfört med övriga algoritmer och är idag den mest använda fonetiska sökalgoritmen. 8
Algoritmen är som sagt relativt enkel och bygger på att den första bokstaven i ordet blir den första bokstaven i nyckeln. Nyckelns byggs sedan upp genom att de konsonanter som ingår i ordet tilldelas ett siffervärde enligt givna regler och denna siffra förs till nyckeln. Algoritmen är snabb och enkel men har i originalutförande ett par nackdelar. Den är bland annat beroende av den första bokstaven vilket kommer att göra att namn som Jus och Ljus får olika nycklar, J200 och L220 respektive, och de kommer då inte anses lika. Den är även ganska bred och kommer ge väldigt olika namn som Svensson och Zupanic samma nyckel, S152, och de kommer då anses lika. Ett tredje problem med de flesta soundeximplementationer som finns är att de inte klarar av att hantera hela det svenska alfabetet. Detta är dock inget större problem då de flesta implementationer behandlar okända tecken som vokaler och ignorerar dem. Soundexalgoritmen kan varieras på ett flertal sätt. De fonetiska ekvivalensgrupper som används för konsonanterna kan varieras, koden behöver ej trunkeras till fyra tecken, även den bokstav som står först i nyckeln kan kodas eller så kan hänsyn tas till vokalerna. Jag har valt att implementera en del av dessa ändringar i olika kombinationer för att försöka se hur det skulle påverka algoritmen. Här nedan kommer jag presentera de varianter på soundexalgoritmen som jag valt att utvärdera. American Soundex/Miracode Den mest använda grupperingen av bokstäver utvecklades på 1930 talet och går under benämningen American Soundex eller Miracode. Jag valde att implementera denna istället för någon av de tidigare versionerna då det är den senast utvecklade för myndighetsbruk och därför troligtvis mest genomtänkt. Specifikationer tillhandahålls av US National Archives på webben (21) men jag har valt att ha dem även i Appendix. Nedan kallas algoritmen för ASoundex. PhonixSoundex Phonix är en algoritm för fonetisk sökning som kommer beskrivas i mer detalj nedan. Ett steg i algoritmen är dock att koda nyckeln med en soundexliknande algoritm där dock ekvivalensklasserna är något modifierade. Då jag ville undersöka hur mycket ekvivalensklasserna påverkade Soundexalgoritmen och dessa, utvecklades i slutet på 80-talet, var de modernaste jag lyckats hitta valde jag dem för att se om och hur mycket de påverkade originalet. De exakta ekvivalensklasserna finns i appendix. Nedan kallas algoritmen för PSoundex. FösrstaBokstavenKodadSoundex Då det visade sig att olika implementationer av Soundexalgoritmen genomgående gav bäst resultat då ekvivalensklasserna från PhonixSoundex användes har endast dessa implementationer tagits med i den slutgiltiga utvärderingen. Reglerna som använts i denna implementation är samma som i PhonixSoundex med den extra regeln att även den första bokstaven kodas Nedan kallas algoritmen för FSoundex. OändligSoundex Reglerna som använts i denna implementation är samma som i PhonixSoundex men utan begränsningen på en maximalt fyra symboler lång kod Nedan kallas algoritmen för OSoundex. OändligFörstaBokstavenKodadSoundex Reglerna som använts i denna implementation är samma som i OändligSoundex med den extra regeln att även den första bokstaven kodas Nedan kallas algoritmen för OFSoundex. 9
OändligVokalSoundex Reglerna som använts i denna implementation är samma som i OändligSoundex men med skillnaden att istället för att ignorera vokaler, H och W så ersätts dessa med symbolen v och med regeln att dubbletter av v ersätts med ett v. Nedan kallas algoritmen för OVSoundex. Exempel på hur nycklarna kan se ut för de olika Soundeximplementationerna ASoundex PSoundex FSoundex OSoundex OFSoundex OVSoundex Johansson J525 J585 2585 J585 2585 Jv58v5 Andersson A536 A536 v536 A53685 v53685 A53v68v5 Lindgren L532 L532 4532 L53265 453265 Lv5326v5 Grafemkodande Dessa algoritmer ser till större delar av ordet och innehåller regler för hur grupper av bokstäver ska hanteras. På så sätt kan de hantera situationer där en viss sammansättning av bokstäver kodar för ett specifikt ljud. Exempel på dessa sammansättningar skulle kunna vara <lj> som uttalas /j/ eller <stj> och <ch> som uttalas /ɧ/. De blir dock på grund av dessa regler betydligt mer spårberoende och även något mer komplicerade att implementera. I många fall blir de även långsammare än de enklare teckenkodande algoritmerna. NYSIIS NYSIISalgoritmen togs fram i USA på 1970 talet då man var missnöjd med de implementationer av Soundex som användes då de hade för dålig precision. Algoritmen beskrivs av (22). Algoritmen transformerar innamnet med hjälp av ett tiotal regler till ett namn med normerad stavning och genererar till skillnad mot Soundex en uttalbar nyckel. I originalutförande trunkeras nyckeln sedan till sex tecken. Algoritmen kallas nedan för NYSIIS TrunkeradNysiis För att se hur mycket trunkeringen påverkade implementerades även en version som alltid returnerade en sex tecken lång nyckel. Kallas nedan för TNYSIIS Exempel på nycklarnas utseende för de olika NYSIIS implementationerna NYSIIS TNYSIIS Johansson JAHANSAN JAHANS Andersson ANDARSAN ANDARS Lindgren LANDGRAN LANDGR Reglerna för alla tre algoritmer finns i Appendix. Phonix Phonix beskrivs översiktligt av Gadd 1988 (23) och i detalj Gadd 1990 (24). Algoritmen är framtagen för att användas i ett bibliotekssystem som ska säljas över hela världen. Phonix är egentligen inte enbart en algoritm utan ett helt system för fonetisk sökning på boktitlar och författarnamn som tillåter att man utökar sökningarna och även rankar resultaten. Den del av Phonix som jag har implementerat och utvärderat är enbart själva indexeringen. Den består första av ett hundratal regler för att transformera indataordet till ett ord med normerad stavning. 10
Detta namn kodas sedan med en soundexliknande algoritm. Reglerna är ganska specifika för det engelska språket men i artikeln talar Gadd om användning med andra språk än engelska. Av denna anledning ansåg jag att det var motiverat att implementera Phonix. Algoritmen kallas nedan för Phonix. Exempel på Phonix Johansson Andersson Lindgren Phonix J2585 v5385 L45265 Metaphone Metaphone är en av de algoritmer som idag finns implementerad i det system som Sunstone använder. Det är den algoritm som näst efter Soundex har störst spridning. Algoritmen utvecklades av Lawrence Philips 1990 och koden publicerades i decemberutgåvan av Computer Language 1990. Den artikeln går inte att få tag på, men open source-projektet Aspell säger sig ha originalbasic-koden på webben (25). Jag har ej implementerat en egen version utan nöjt mig med att se till att den som finns implementerad i Solr stämmer överens med den kod som anges som originalkoden i källan ovan. Algoritmen använder sig av ett femtiotal regler för att normera stavningen. Algoritmen kallas nedan för Meta. Exempel på Meta Johansson Andersson Lindgren Meta JHNS ANTR LNTK DoubleMetaphone DoubleMetaphone finns i dagsläget implementerad i Solr så jag har därför ej implementerat den själv. Algoritmen utvecklades av Lawrence Philips 2000 och publicerades första gången i juniutgåvan av C/C++ Users Journal samma år. Då jag ej lyckats uppbringa originalkoden har jag enbart jämfört versionen implementerad i Solr med andra implementationer jag funnit på nätet, bland annat den version som finns i Aspell (25), för att se om och hur de skiljer sig åt. Slutsatsen var att skillnaderna var väldigt små och då originalkoden ej gått att finna anser jag att den version som finns i Solr kan anses vara representativ för algoritmen som utvecklades av Lawrence Philips. Denna algoritm är betydligt mer komplicerad än Metaphone och har ett hundratal regler som används. I vissa utföranden genererar algoritmen alternativa nycklar så att ord med tvetydigt uttal ges två nycklar, detta för att öka täckningen. Algoritmen kallas nedan för DMeta. Exempel på DMeta Johansson Andersson Lindgren DMeta JHNSN eller AHNSN ANTRSN LNTKRN 11
Wåhlinkodning I en arbetsrapport från 1977 beskriver Staffan Wåhlin en metod för att generera variantstavningar av svenska släktnamn (26). Med hjälp av ca. 30 regler transformeras indata till ett namn med normerad stavning. Det finns en del oklarheter i rapporten gällande exakt hur reglerna ska implementeras så jag har valt att nöja mig med att min implementation genererar samma normerade stavning som Wåhlins implementation på de ca 200 exempel som finns bifogade i arbetsrapporten. Algoritmen kallas nedan för Wåhlin. Exempel på Wåhlinkodning Johansson Andersson Lindgren Wåhlin JOHANSON ANDERSON LINDGREN Patent och Registreringsverkets algoritm Patent och registreringsverket (PRV) måste utföra fonetiska sökningar på namn som personer vill byta till. Sunstone har utvecklat det program som idag används på PRV så jag fick möjlighet att testa även det och på så sätt kunna jämföra de algoritmer jag hittat mot vad som förmodligen är ett av de mest sofistikerade systemen för fonetisk sökning på svenska. PRV:s system bestå av två delar. Först en indexeringsdel som är väldigt lik Wåhlinkodningen och sedan en frågegenereringsdel där det för en given sökfråga genererar uppemot hundra sökfrågor som sedan alla söks efter i databasen. Jag har valt att implementera bägge och indexeringsdelen kallas nedan för PRV. Hela systemet med den utökade sökningen kallas nedan för PRVhel. Exempel på PRV Johansson Andersson Lindgren Wåhlin JOHANSO ANDERSO LINDGRE 12
Datainsammling För att göra en korrekt undersökning ansåg jag att det var viktigt att ta fram en så stor databas som möjligt. Den största tänkbara gällande svenska efternamn är SCB:s lista över alla svenska efternamn. Av någon anledning är denna lista inte tillgänglig annat än för företag. Däremot finns det ett flertal hemsidor som erbjuder olika typer av namnstatistik. En av dessa är Svenska namn (27), de har SCB:s lista från 2010 upplagd på sin hemsida och man kan bläddra i den. Tyvärr får man bara se 15 namn åt gången och då listan är 477045 namn lång så var det allt för jobbigt att gå igenom listan för hand och kopiera ut relevant information. Ett litet program sattes ihop som sparade ner alla namn tillsammans med antalet gånger de förekommer i Sverige. Av hänsyn till företaget så sattes en paus på några sekunder in efter varje sökning vilket ledde till att det tog närmare åtta timmar att genomföra sökningen men Svenska namns hemsida utsattes inte för onödig belastning. Namnstatistik För att få en uppfattning om hur korpusen såg ut och för att kunna jämföra korpusen med de som använts i andra liknande undersökningar så gjordes en del undersökningar rörande datamängdens beskaffenhet. Som tidigare nämnts så fanns det 477045 unika efternamn i Sverige 2010. Medelantalet personer som delade på ett efternamn var lite drygt 19 medan medianen var 2. Med andra ord var det en ganska skev fördelning över hur många personer som delade på efternamnen. Ser man till de 100 vanligaste efternamnen så bärs de av 32,6% av befolkningen och hela 54,8% har något av de 1000 vanligaste efternamnen. Utifrån dessa siffror valde jag att välja de namn som skulle ingå i utvärderingsarbetet från de 1000 vanligaste. Detta då människor när de antingen hör ett ovanligt namn eller missuppfattar ett godtyckligt namn med stor sannolikhet söker efter något av dessa 1000 första då dessa troligtvis är namn som de har hört förr och känner igen. Även dubbelnamnen undersöktes närmare. I kapitlet för fonetisk sökning nämns en del av de problem som hör samman med dubbelnamn och för att göra det enkelt för mig själv tänkte jag i stort sett ignorera problematiken med dubbelnamn genom att anse att alla som innehöll ', -,., : och var dubbelnamn. För att se vad detta skulle få för konsekvenser undersöktes dubbelnamnen noggrannare. Det visade sig att 23,4% av namnen var dubbelnamn enligt definitionen ovan men denna definition inkluderar även bl.a. alla adelsnamn innehållande von, de, à osv. Men även son och dotternamn ur andra språkfamiljer som exempelvis arabiska eller keltiska drabbas då dessa namn här betecknas med olika typer av ord exempelvis Al, Bin, Ibn, Nic mm. och dessa namn får då samma struktur som ett dubbelnamn. Adelsnamnen och son/dotternamnen står dock för enbart ca. 2%. Då det med andra ord blir relativt få felaktigt behandlade ord och majoriteten av dessa är ganska ovanliga eller hör till andra språkfamiljer ansåg jag att det var rättfärdigat att behandla dubbelnamnen på detta sätt. För att generera den slutgiltiga korpusen delades alla dubbelnamn upp vid alla skiljetecken och delarna återinfördes sedan i listan över namn. Dubbletter sorterades ut ur listan och detta resulterade i en lista med 383696 unika namn. 13
Jämförelse av algoritmerna Teori Enligt van Rijsbergen (28) finns det potentiellt sex olika aspekter av ett informationssökningssystem som kan utvärderas. 1. Innehållet, hur mycket relevant data innehåller systemet 2. Söktiden, den genomsnittliga tiden mellan det att sökningen gjordes och svaret presenterades 3. Presentationen, hur presenteras resultaten för användaren 4. Ansträngning, hur svåranvänt är systemet 5. Täckning, hur stor del av det relevanta materialet returneras av en sökning 6. Precision, hur stor del av de returnerade resultaten är relevanta Intressant för detta arbete har varit punkterna 1, 2, 5 och 6. Användbarhetsaspekterna enligt punkt 3 och 4 är av framförallt av intresse först när ett faktiskt system har byggts medan denna rapport enbart syftar till att utvärdera algoritmerna. Innehållet i systemet har varit så komplett som möjligt då alla svenska efternamn har använts. Söktiden är endast av underordnat intresse då algoritmerna ej optimerats så de siffror på söktid som jag fått fram är enbart en fingervisning. Precision och täckning är däremot två relevanta mått på en söknings effektivitet. Med en söknings effektivitet menas systemets förmåga att returnera så många relevanta resultat som möjligt samtidigt som mängden icke relevanta resultat hålls till ett minimum. Precision och täckning illustreras grafiskt i figuren nedan Utifrån figuren ovan kan precision definieras som Täckning definieras som Detta gäller för varje sökning som görs. För att kunna jämföra algoritmernas prestation överlag beräknades medelvärdet av precisionen och täckningen för ett stort antal sökningar enligt Precision och täckning beskriver dock två olika aspekter av en sökalgoritm. För att beskriva dess totala effektivitet har ett flertal mått föreslagits under åren. Ett av de mest använda är F- värde. F-värdet räknas ut utifrån precisionen och täckningen och är konstruerat så att det mäter sökningens effektivitet då användaren lägger β gånger större vikt vid täckning än vid precision (28) 14
F 1 -värdet som beskriver den situationen att användaren lägger lika stor vikt vid täckning som vid precision var länge det vanligaste måttet men även F 2 och F 0,5 är vanligt förekommande. Jag har tagit med alla tre i utvärderingen för att se om någon algoritm utmärker sig överlag. Tidigare arbeten Ett flertal olika studier av fonetiska sökalgoritmers effektivitet har genomförts. De flesta studier rör engelska eller tyska efternamn men följande fyra behandlar svenska namn eller svenska ord. Approximate Swedish Name Matching - Survey And Test Of Different Algorithms Erikson 1997 (29) Erikson går igenom en stor mängd algoritmer för både fonetisk sökning och strängjämförelse och gör sedan en jämförelse mellan Soundex, N-gramavstånd och viktat Damerauavstånd. Erikson använder en strikt definition på likhet i sina undersökningar och enbart strängar som kodar för exakt samma uttal anses lika. Databasen som användes för undersökningarna bestod av drygt 5000 namn och de korrekta träffarna identifierades genom att databasen gicks igenom manuellt för varje sökfråga. Fonetisk distansmätning av ord i lexikon Wache 1999 (15) Wache använder en modifierad variant av Levenshteinavstånd för att beräkna likhet mellan svenska ord som är fonetiskt transkriberade till SAMPA-notation (30). Resultaten är endast kvalitativa men hans förslag på algoritm verkar lovande om man skulle kunna generera SAMPA-notationen automatiskt. Approximate Name Matching Du 2005 (10) Du använder sig av en databas med knappt 5000 namn. Namnen är medvetet valda från flera olika språkbakgrunder men svenska namn är en delmängd av de undersökta namnen. Du undersöker ASoundex, FSoundex, N-gramanalys med bi- och trigram samt levenshteinavstånd Likhetsmåttet som används är att strängar som kodar för samma eller snarlikt uttal eller strängar med snarlikt utseende anses lika. Likhetsbedömmningen gjordes av två personer i samråd dock utan att närmare specificera vad som menas med snarlikt. För att finna alla relevanta träffar i databasen gicks den igenom manuellt för varje sökfråga. En större databas med över 100000 namn användes också dock enbart för att testa algoritmernas snabbhet. Soundex-algoritmer: Hur bra fungerar de på svenska namn? Hansson 2008 (31) Hansson gör i detta arbete en undersökning av åtta olika grafem och teckenkodande algoritmer och levenshteinavstånd. Databasen som används är en databas över moderna svenska namn och deras historiska stavningsvarianter. Databasen innehöll ca. 17000 unika efternamn med stavningsvarianter, totalt ca. 50000 namn. Hansson definierar inget explicit likhetsmått utan en träff anses relevant om den finns med i listan över söksträngens historiska stavningsvarianter. Dessa fyra undersökningar har jobbat med väldigt skiftande likhetsmått och alla har jobbat med relativt små datamängder. Resultaten från dem är väldigt skiftande för de algoritmer som finns med i flera av undersökningarna vilket belyser det faktum att uttalslikhet är någonting väldigt subjektivt och beroende på vad som anses lika av de som genomför undersökningarna så presterar algoritmer väldigt olika. Gemenamt för undersökningar är dock resultatet att ingen algoritm klarar av att leverera både en hög precision och en hög täckning utan det blir alltid en kompromiss. 15
Utvärdering För att kunna utvärdera algoritmernas prestanda med avseende på de ovan beskrivna måtten behövdes först ett facit tas fram. För detta valdes först valdes 50 namn slumpmässigt bland de 1000 första. Sedan behövdes definition på likhet. Som beskrivits ovan så har de liknande arbetena haft ganska skilda definitioner på likhet. Då Eriksons arbete (29) är väldigt uttömmande vad gäller strängar med exakt samma uttal valde jag att fokusera på en bredare definition av likhet. Min definition av likhet blev följande Om två ord uttalas såpass lika att människor i allmänhet anser att det finns en risk för sammanblandning kan de anses vara lika. Utifrån denna definition på likhet skulle jag sedan finna alla relevanta objekt i databasen för mina testfrågor. Då det i definition av likhet fanns inbakat människor i allmänhet var jag tvungen att på något sätt få reda på vad denna allmänhet ansåg var lika uttal för att kunna avgöra vilka namn som var relevanta svar för varje given sökfråga och vilka som inte var det. Att, som i tidigare arbeten, låta en eller flera personer gå igenom hela listan med namn för varje sökfråga för att finna alla relevanta namn var inte möjligt på grund av den stora mängden namn. Istället gjordes en sökning mot databasen med alla algoritmer beskrivna i kapitlen ovan för att på så sätt förhoppningsvis få en täckning på 100 % då alla algoritmerna modellerar något olika tvetydigheter i språket. Precisionen på denna sökning blev dock oerhört låg och metoden resulterade i mellan 200 och 4000 potentiellt relevanta namn för varje testfråga. Jag gjorde sedan en väldigt grov sållning och tog bort de ord som uppenbarligen inte var korrekta träffar och lämnade enbart sådant som eventuellt skulle kunna uttals lika dant. Exempel på ordpar som inte sorterades bort är Ekstrand-Eckestav, Lundholm-Landhammar och Peterson-Partazyan. Efter denna sållning fanns 2500 ordpar kvar vilket svara mot cirka 50 potentiella träffar för var och en av sökfrågorna. Uttalslikhet är dock, som tidigare nämnt, någonting väldigt subjektivt så även om jag nu hade en begränsad ängd namn att gå igenom så skulle en ranking av uttalslikhet utförd av enbart mig knappast uppfylla definitionen. Inspirerad av Folkets synonymlexikon (32) skapades en hemsida som lät personer ranka dessa grovsållade ordpar på en fyrgradig skala som sträckte sig från Uttalas inte likadant till Har exakt samma uttal. Länken till hemsidan spreds sedan till släkt och vänner med uppmaningen att sprida den vidare. De som gick in på hemsidan presenterades med ett ordpar och ombads ranka det på nämnda fyrgradiga skala. Det är svårt att uppskatta hur många personer som bidrog till rankandet men strax under 8000 röster har fåtts in och jag tror att ca 20-50 människor har varit inne och klickat utifrån de kommentarer jag fått från vänner och bekanta. De 2500 ordpar som fanns på hemsidan har alla fått mellan 1 och 10 röster med medel och median på ca 5 så jag anser att detta kan anses vara en allmän uppfattning. Då det visade sig gå väldigt snabbt att få in data för dessa 50 frågor valde jag att utöka mängden sökfrågor med ytterligare 50 till totalt 100. Med samma metod som ovan togs potentiellt relevanta träffar fram även för dessa 50. Det visade sig dock att folks intresse för att ranka uttalslikheter hade falnat betydligt efter de första 50 orden. För att trots detta kunna utöka mängden sökfrågor rankade jag själv alla de första 50 orden för att se hur långt från den allmänna uppfattningen min egen uppfattning var och överensstämmelsen var ca 98 %. För att arbetet skulle kunna fortsätta valde jag då att låta de resterande 50 enbart rankas av mig själv och ytterligare en person och medelvärdet av våra åsikter ansågs sedan tillräckligt likt den allmänna uppfattningen för att vara användbart. När sedan ett facit hade tagits fram beräknades den genomsnittliga precisionen, täckningen, söktiden och de olika F-värdena för alla algoritmer enligt ekvationerna ovan. 16
Unika nycklar Antal tecken Resultat Inledande undersökningar Medan det ovan beskrivna facit togs fram genom omröstning på hemsidan gjordes en del inledande undersökningar av algoritmerna för att se om några slutsatser sedan kunde dras utifrån dessa enkla tester. Detta för att se om algoritmer eventuellt skulle kunna förkastas efter dessa enkla tester för att på så sätt undvika att de mer utförliga testerna skulle behöva göras vid framtida undersökningar. De undersökningar som gjordes var att se på de genererade nycklarnas längd och deras antal. Medellängd på de genererade nycklarna 8 7 6 5 4 3 2 1 0 Figur 1: Den genomsnittliga längden på de nycklar som genereras av respektive algoritm. Namn är medellängden på namnen i databasen. Antal genererade nycklar 450000 400000 350000 300000 250000 200000 150000 100000 50000 0 Figur 2: Antalet unika nycklar som de fonetiska sökalgoritmerna genererar vid indexeringen. Namn är antalet unika namn i databasen. Precision och Täckning De algoritmer som testats är antingen fonetiska sökalgoritmer eller algoritmer för beräkning av strängavstånd. Algoritmerna för fonetisk sökning har inga parametrar att ställa in utan enbart en 17
uppsättning regler. Däremot finns det ett flertal parametrar till var och en av algoritmerna för beräkning av strängavstånd. Ett mycket stort antal parameteruppsättningar för var och en av algoritmerna har undersökts men enbart de parameteruppsättningar som fått högst F -värde för de tre undersökta värdena på finns representerade i resultaten. 1,2 1 0,8 0,6 0,4 0,2 0 Precision och täckning för de fonetiska sökalgoritmerna Precission Täckning Figur 3: Här visas precision och täckning för de tecken- och grafemkodande algoritmerna sorterade på stigande precision. 1,2 1 0,8 0,6 0,4 0,2 0 Precission och täckning för strängdistansalgoritmerna Precission Täckning Figur 4: Precision och täckning för de olika strängdistansalgoritmerna sorterade på stigande precision. F-värde Tre olika F -värden har undersökts. F 1 som innebär att användaren lägger lika stor vikt vid täckning som vid precision, F 2 som innebär att användaren lägger dubbelt så stor vikt vid vid täckning som vid precision samt F 0,5 som innebär att användaren lägger hälften så stor vikt vid vid täckning som vid precision. 18
Fonetiska Sökalgoritmer 0,8 0,7 0,6 0,5 0,4 0,3 0,2 0,1 0 F1 F0,5 F2 Figur 5: F 1 -, F 2 - och F 0,5 -värden för de tecken- och grafemkodande algoritmerna sorterat på stigande F 1 -värde. 0,7 0,6 0,5 0,4 0,3 0,2 0,1 0 Strängdistansalgoritmer F1 F0,5 F2 Figur 6: F 1 -, F 2 - och F 0,5 -värden för strängdistansalgoritmerna sorterat på stigande F 1 -värde. Antal söksvar För att kunna analysera algoritmerna något noggrannare undersöktes även antalet resultat som en sökning gav i medeltal och detta jämfördes sedan med antalet varianter som fanns för varje sökfråga. Som jämförelse finns även medelvärdet av antalet korrekta alternativ med. I medeltal fanns det 12 korrekta svar för en sökfråga, antalet varierade dock mellan tre och 35. Dessa grafer visar ganska snabbt att de strängdistansalgoritmer som har högst precision i stort sett är värdelösa då de i medeltal returnerar endast lite drygt ett svar per sökfråga. De returnerar med andra ord enbart söksträngen självt och är av väldigt lite intresse. 19
512 256 128 64 32 16 8 4 2 1 Medelvärde antal söksvar Figur 7: Medelvärdet av antalet söksvar som de tecken- och grafemkodande algoritmerna returnerade för alla sökfrågor. Antalnära är medelvärdet av antalet relevanta träffar söksträngarna hade. 50 45 40 35 30 25 20 15 10 5 0 Medelvärde antal söksvar Figur 8: Medelvärdet av antalet söksvar som strängdistansalgoritmerna returnerade för alla sökfrågor. Antalnära är medelvärdet av antalet relevanta träffar söksträngarna hade. Nedan följer tre grafer, en för var och en av de algoritmer som fick högst F 1 -värde i sin kategori. Graferna visar antalet resultat som returnerades av algoritmen för varje sökfråga. Sökfrågorna är den horisontella axeln och de är sorterade efter stigande antal relevanta poster i databasen. Punkten längst till vänster på den horisontella axeln svarar exempelvis mot Hildingsson som enbart har tre strängar i databasen med snarlikt uttal. Längst till höger återfinns sedan Carlson med som har 35 strängar med liknande uttal i databasen. 20