• No results found

Lingvistik och användbarhet i sökmotorer

N/A
N/A
Protected

Academic year: 2021

Share "Lingvistik och användbarhet i sökmotorer"

Copied!
63
0
0

Loading.... (view fulltext now)

Full text

(1)

UPTEC IT 10 004

Examensarbete 30 hp

Januari 2010

Lingvistik och användbarhet

i sökmotorer

(2)
(3)

Teknisk- naturvetenskaplig fakultet UTH-enheten Besöksadress: Ångströmlaboratoriet Lägerhyddsvägen 1 Hus 4, Plan 0 Postadress: Box 536 751 21 Uppsala Telefon: 018 – 471 30 03 Telefax: 018 – 471 30 00 Hemsida: http://www.teknat.uu.se/student

Abstract

Linguistics and Usability of Search Engines

Sven Vidén

This is a master thesis from Uppsala University in collaboration with B Locket AB (more known as www.blocket.se). B Locket AB is a large ad-company from Sweden, located in Stockholm.

Search engines on the market today are becoming more and more complex. When they were first introduced, they only had one function and that was to produce search results containing the string that the user had typed. Today, users want it to be able to spellcheck, produce more results and sort search results on specific fields as well. Preferably, all these features should not affect the performance as a whole. The reason to why these demands have come up is that users are getting more and more used to internet services as a whole and they want everything to be as easy as possible.

The user ability has become a substantially more important area in the computer industry and this needs to be taken into account when it comes to B Locket AB and its search engine. This is one of the reasons to why this report has been made, another one is that B Locket AB:s search engine is a bit outdated and lacks some of the new features.

This report is a further development and a small evaluation of a search engine at B Locket AB. The search engine was evaluated in cooperation with B Locket AB:s head-developer and the person responsible for new features on the site. Further development was only done in consultation with both of them.

The evaluation showed flaws in B Locket AB:s search engine. These flaws were the reports key issues when starting the development of an improved model. The key issues were autocomplete, spelling and stemming. The final result was a prototype with these features implemented.

Examinator: Anders Jansson

(4)
(5)

Sammanfattning

Detta ¨ar ett examensarbete f¨or Uppsala Univestitet i samarbete med B Locket AB1. B

Locket AB ¨ar ett stort annonsf¨oretag i Sverige. De tillhandah˚aller en tj¨anst d¨ar anv¨andare l¨agger in annonser och kan ta kontakt med andra annons¨orer f¨or att p˚a s˚a s¨att k¨opa och s¨alja begagnade saker.

S¨okmotorer ¨ar n˚agot som f˚ar h¨ogre och h¨ogre krav p˚a sig fr˚an anv¨andarna idag. Tidi-gare var kravet enbart ett s¨okf¨alt och resultat som inneh¨oll den efters¨okta s¨oktermen, idag vill anv¨andaren att s¨okmotorn ska hj¨alpa denna att s¨oka, stava och sortera s¨okresultaten. Dessutom ska allt detta fortfarande ske precis lika snabbt som tidigare och det f˚ar inte p˚averka anv¨andaren negativt.

Anledningen till alla dessa krav ¨ar att anv¨andarv¨anligheten har blivit en allt st¨orre aspekt inom IT-branschen. I stort sett all ny mjukvara har genomg˚att en ganska stor pro-cess d¨ar en kontroll av anv¨andbarheten hos just den produkten gjorts. Detta kan g¨oras p˚a olika s¨att, t.ex genom att l˚ata vanliga anv¨andare testa produkten och d¨arefter s¨aga vad de tyckte eller bara helt enkelt att utvecklarna g˚ar igenom och testar anv¨andarv¨anligheten. Detta examensarbete ¨ar en vidareutveckling och en mindre utv¨ardering av en s¨okmotor p˚a B Locket AB. S¨okmotorn utv¨arderades tillsammans med B Locket AB:s chefsutveck-lare och publiceringsansvarig. Vidareutvecklingen skedde endast i samr˚ad med dessa.

Resultatet av utv¨arderingen visade brister hos B Locket AB:s nuvarande s¨okmotor. Dessa brister blev fokus-fr˚agorna i vidareutvecklingen av den nya s¨okmotorn. De tydli-gaste bristerna var att s¨okmotorn inte klarade av r¨attstavning, autocomplete och att den hade problem med stemming2. I slutet gjordes d¨arf¨or en prototyp med dessa delar och andra f¨orb¨attringar av den redan existerande s¨okmotorn implementerade.

1Mer k¨ant som www.blocket.se 2

(6)
(7)

Inneh˚

all

1 Introduktion och bakgrund 4

1.1 Problembeskrivning . . . 5

1.2 Syfte och fr˚agest¨allningar . . . 6

(8)

2.7.4 Utv¨ardering . . . 24

2.7.5 Gr¨anssnitt . . . 24

2.7.6 Krav p˚a s¨okmotorn . . . 24

3 Resultat och utv¨ardering 25 3.1 R¨attstavning . . . 25

3.2 S¨arskrivning . . . 28

3.3 Stemming och Lemmatization . . . 28

3.4 Synonymer . . . 29

3.5 Autocomplete . . . 30

4 Slutsats, diskussion och framtida arbete 33 4.1 Slutsats och Diskussion . . . 33

4.2 Framtida arbete . . . 36 Litteraturf¨orteckning 37 Appendix 41 A Autos.java 41 B Auto.java 44 C main.c 47

D Mailkonversation med Martin Hassel p˚a KTH:s spr˚akvetenskapliga

in-stitution 54

E Resultat av r¨attstavningsj¨amf¨orelse 56

(9)

Kapitel 1

Introduktion och bakgrund

B Locket AB ¨ar ett f¨oretag inom annonsbranschen. Aff¨arsid´en g˚ar ut p˚a att s¨alja annons-platser till privatpersoner och f¨oretag p˚a n¨atet. All f¨ors¨aljning sker ¨over n¨atet genom dessa annonser och B Locket AB:s kunder anv¨ander p˚a s˚a vis enbart en webtj¨anst. Kunderna sk¨oter allts˚a sj¨alva kontakten mellan annons¨or och k¨opare.

Tj¨ansten som B Locket AB tillhandah˚aller fungerar genom att anv¨andaren matar in s¨okord och f˚ar d˚a upp annonser som inneh˚aller dessa s¨okord. Resultatet ¨ar annonser inneh˚allande s¨okordet anv¨andaren ¨ar intresserad av. Annonserna presenteras i form av bilder och text, samt annons¨orens kontaktinformation. Denna tj¨anst finns inte bara i Sverige utan i mer ¨an tio l¨ander, d¨ar marknadsf¨or sig B Locket AB p˚a ungef¨ar samma s¨att som i Sverige men med andra f¨oretagsnamn.

F¨or att hitta de annonser anv¨andaren ¨ar intresserad av finns en s¨okmotor. Denna ska hj¨alpa anv¨andaren att hitta information s˚a fort som m¨ojligt, men ¨aven precis den information som anv¨andaren faktiskt ¨ar ute efter. Det vill s¨aga, anv¨andaren ska f˚a resultat som ¨ar s˚a precisa som m¨ojligt utefter hans s¨okning. Detta helst utan att beh¨ova vara en expert p˚a s¨okning via s¨okmotorer.

S¨okmotorer har ¨anda sedan de uppfanns anv¨ants f¨or att hitta information ˚at anv¨andaren, n˚agot som har utvecklats mer och mer, speciellt under de senaste ˚aren. Med andra ord s˚a blir s¨okmotorerna mer och mer anv¨andarv¨anliga, men samtidigt mer avancerade. De har blivit snabbare efter hand som nya s¨okalgoritmer har uppfunnits och mer anv¨andarv¨anliga efter hand som MDI1 har blivit viktigare och viktigare inom IT-branschen.

Den s¨okmotor som anv¨ands p˚a www.blocket.se idag ¨ar dock n˚agot f¨or˚aldrad och kan definitivt f¨or¨andras till det b¨attre. I dagsl¨aget klarar s¨okmotorn inte av att hj¨alpa

(10)

anv¨andaren s¨arskilt mycket, vilket i l¨angden g¨or att anv¨andaren inte hittar de annonser han eller hon letar efter, ˚atminstone inte lika fort och enkelt. Detta ¨ar n˚agot som skulle kunna p˚averka B Locket AB:s framg˚ang.

I dagsl¨aget n¨ar n˚agon n¨amner ordet ”s¨okmotor” t¨anker de flesta p˚a www.google.com2.

Denna s¨okmotor har blivit v¨arldsledande under de senaste ˚aren, till stor del p˚a grund av dess enorma enkelhet och anv¨andarv¨anliga gr¨anssnitt. Oavsett vad anv¨andaren s¨oker p˚a f¨ors¨oker den peka denne i r¨att riktning. Det h¨ar g¨or att oavsett hur d˚alig anv¨andaren ¨ar p˚a att anv¨anda s¨okmotorn s˚a kommer tr¨affar fortfarande att visas inom det omr˚ade som s¨okningen gjorts p˚a. Det ¨ar dessa funktionaliteter som g¨or dagens s¨okmotorer bra och anv¨andarv¨anliga. M˚anga f¨oretag inklusive B Locket AB str¨avar efter att uppn˚a liknande funktionalitet i sina s¨okmotorer.

www.blocket.se har haft ett s¨arskilt t¨ank med sin design ¨anda sedan starten 1996. Detta t¨ank ¨ar att allt ska vara s˚a enkelt som m¨ojligt och det ska inte finnas n˚agra speciella finesser som kan p˚averka anv¨andaren negativt. M˚alet med detta ¨ar att de ska kunna n˚a ut till alla, gamla som unga, varf¨or denna rapport speglats av detta t¨ank p˚a enkelhet. Hur kan anv¨andarna f˚a s˚a mycket hj¨alp som m¨ojligt utan att p˚averka dem negativt med nya h¨aftiga funktioner?

1.1

Problembeskrivning

Som sagts tidigare s˚a ¨ar www.blocket.se:s s¨okmotor n˚agot f¨or˚aldrad och klarar inte av en del anv¨andarv¨anliga krav som f¨oretaget har satt upp. De krav som B Locket AB vill att s¨okmotorn ska klara av i framtiden ¨ar:

• R¨attstavning och s¨arskrivning • Synonyms¨okning

• En f¨orb¨attrad form av ordstamss¨okning • Autocomplete

Om anv¨andaren f˚ar mycket hj¨alp kommer annonserna bli enklare att hitta och an-nons¨orerna kommer att f˚a fler intresseanm¨alningar p˚a sina annonser. Det g¨or att upp-levelsen p˚a www.blocket.se blir b¨attre och anv¨andaren slipper frustrationen ¨over att inte hitta det som efters¨oks. Tyv¨arr finns v¨aldigt lite information om dessa omr˚aden i f¨oretaget. D¨arf¨or ska de unders¨okas och analyseras f¨or att till slut ge en klar bild ¨over vad som kan anses vara anv¨andarv¨anligt i B Locket AB:s fall.

2

(11)

1.2

Syfte och fr˚

agest¨

allningar

Syftet med detta projekt var att ta reda p˚a vilka delar som beh¨ovs f¨or att g¨ora B Locket AB:s s¨okmotor mer anv¨andarv¨anlig och effektiv. Dessutom ska en prototyp visas upp med de funktionaliteter som efterfr˚agats. Denna prototyp ska vara v¨aldigt enkel d˚a huvudsyftet med den ¨ar att visa de nya funktionaliteterna och inte en snygg design.

Tv˚a huvudfr˚agor genomsyrade projektet. • Vad g¨or att anv¨andaren p˚averkas negativt?

• P˚a vilka s¨att kan anv¨andaren f˚a hj¨alp genom att enbart titta p˚a s¨okf¨altet?

Anv¨andaren ska allts˚a inte beh¨ova t¨anka p˚a att stava r¨att eller om det finns annonser inneh˚allandes den s¨oktermen och allts˚a k¨anna sig s¨aker p˚a det som matats in. Anv¨andaren ska ocks˚a kunna anv¨anda f¨orkortningar p˚a diverse produkter som kan t¨ankas finnas i annonserna. Om anv¨andaren hittar fler annonser som st¨ammer in p˚a s¨okningen s˚a ¨ar ocks˚a sannolikheten st¨orre att tj¨ansten anv¨ands mer frekvent.

Syftet med projektet var som sagt att f˚a fram en fungerande prototyp som han-terar s¨okfr˚agor p˚a ett anv¨andarv¨anligt vis med hj¨alp av lingvistik. Detta genom olika hj¨alpmedel som unders¨okts under arbetets g˚ang. De hj¨alpmedel som unders¨okts ¨overv¨agdes noggrant d˚a de var tvungna att vara de b¨asta i sin kategori f¨or att sedan kunna imple-menteras i den nya s¨okmototrn.

1.3

Metod

Tillsammans med handledare och publiceringsanvsarig p˚a B Locket AB har en lista p˚a specifika ¨onskem˚al fr˚an anv¨andare och anst¨allda p˚a B Locket AB tagits fram. Denna lista anv¨ands f¨or att unders¨oka de olika delar som pekats ut som bristf¨alliga eller som saknas helt.

Varje punkt p˚a denna lista g˚as igenom noggrant och varje ¨amne studeras genom att l¨asa vetenskapliga artiklar, s¨oka information p˚a internet och studera litteratur inom de intressanta omr˚adena. Detta g¨ors f¨or att ett beslut ska kunna tas om vilken metod som b¨ast l¨oser varje delproblem. N¨ar informationen insamlats och behandlats fattas ett beslut tillsammans med handledare och publiceringsansvarig.

(12)

lilla prototypen kommer de att g˚a vidare till en stor implementation in i ett helt system d¨ar alla delproblem ska finnas representerade.

Varje del i den slutgiltiga prototyputvecklingen sker enligt den agila metoden ”XP”[6]3. Detta inneb¨ar kortfattat att de problem som implementationen inneb¨ar delas upp i mind-re delar. Varje problem blir en lapp p˚a en tavla, detta problem delas sedan upp i mindre delproblem som ocks˚a ¨ar representerade p˚a lappar. N¨ar alla delproblem ¨ar l¨osta ska allts˚a huvudproblemet var l¨ost. F¨or att detta ska fungera smidigt estimeras hur l˚ang tid varje lapp kommer att ta, angivet i mantimmar. P˚a s˚a s¨att f˚as en tydligare ¨overblick och au-tomatiskt, en deadline att f¨olja. Om prototypen uppfyller de krav som handledaren satt upp kan lappen bockas av och arbetet kan forts¨atta p˚a n¨asta lapp. Anledningen till att metoden anv¨andes var fr¨amst f¨or att B Locket AB redan arbetar utefter denna. Detta gjorde att handledaren snabbt kunde se hur arbetet fortgick och kunde ge tips inom de omr˚aden d¨ar arbetet faktiskt befann sig just d˚a.

Alla bibliotek som anv¨andes i prototypen var utvecklade enligt Open-Source4 d˚a B Locket AB ville ha m¨ojlighet att kunna modifiera s˚a mycket som m¨ojligt efter eget tycke. Den st¨orsta anledningen var dock att de inte ville k¨opa n˚agon f¨ardig produkt utan utveckla st¨orre delen f¨or egen maskin. Under tiden som arbetet med sj¨alva s¨okmotorn fortgick

Figur 1.1: www.blocket.se idag. F¨or mer information se www.blocket.se

3Extreme Programming, en arbetsmetod f¨or mjukvaruutveckling.

(13)

skrevs denna rapport. ˚Atminstone en dag i veckan f¨or att minska arbetsb¨ordan i slutet p˚a projektterminen. Rapporten kom sedan att presenteras del f¨or del f¨or ¨amnnesgranskaren p˚a Uppsala Universitet och f¨or B Locket AB, detta f¨or att s¨akerst¨alla att rapporten fortfarande hade bra struktur och se till s˚a att r¨att delar togs med i rapporten.

1.4

Begr¨

ansningar

(14)

Kapitel 2

Analys

Allm¨an information om olika delar som ber¨orts inom denna rapport och en djupare be-skrivning av de omr˚aden som B Locket AB velat ha mer information om. En j¨amf¨orelse mellan olika l¨osningar inom samma omr˚ade g¨ors h¨ar f¨or att kunna dra en slutsats om vilken som ¨ar b¨ast anpassad till detta problem. Det ing˚ar ¨aven en del information om vilka bibliotek som anv¨ants i utvecklandet av prototypen.

2.1

En s¨

okmotors uppbyggnad

En s¨okmotor[26] ¨ar ett verktyg som hj¨alper anv¨andaren att hitta det han eller hon s¨oker. En webbs¨okmotor som detta projekt innefattar s¨oker igenom webbsidor f¨or att presen-tera sitt resultat. Dessa resultat kallas f¨or tr¨affar och sorteras vanligtvis i en lista som presenteras f¨or anv¨andaren.

Dagens s¨okmotorer[34] arbetar i tre steg. N¨amligen: • Spindling, insamlande av data

• Indexering, strukturering av data • F¨orfr˚agning, h¨amta resultat fr˚an index

2.1.1

Spindling

(15)

blir sedan den information som s¨okmotorn anv¨ander sig av f¨or att hitta det anv¨andaren ¨

ar ute efter. Efter att spindeln har samlat in dessa l¨ankar g˚ar den igenom sin lista f¨or att h¨amta hem den information som finns p˚a varje webbplats. Informationen kan vara vanlig text, HTML-taggar eller l¨ankar m.m. Hur informationen ser ut och anv¨ands beror lite p˚a vad s¨okmotorn anv¨ands i f¨or system. Det som beskrevs tidigare ¨ar typiskt f¨or en webbs¨okmotor, t.ex. Google.

I Blockets fall d¨aremot spindlas inte informationen in. N¨ar en anv¨andare skapar sin annons s˚a l¨aggs informationen automatiskt in i databasen. Den data som l¨aggs in i da-tabasen ¨ar ren text, men denna ¨ar f¨orst˚as uppdelad i olika f¨alt, s˚asom ”Rubrik”, ”Pris” och ”Information”. Ett undantag till all text ¨ar om anv¨andarna l¨agger in bilder till sina annonser. Det stora steget f¨or s¨okmotorn blir d¨arf¨or indexeringen[10].

2.1.2

Indexering

Detta steg inneb¨ar att informationen som samlats in m˚aste indexeras. H¨ar m˚aste, p˚a ett smart s¨att, datan f˚a en sorts nyckel, f¨or att snabbare kunna hitta r¨att information. Nyckeln i det h¨ar fallet motsvarar vad sj¨alva s¨okmotorn sedan kommer att s¨oka p˚a, detta f¨or att undvika s¨okningar p˚a hela webbplatser vilket skulle ta oerh¨ort mycket l¨angre tid. Indexering g¨or allts˚a att datam¨angden som ska s¨okas igenom blir n˚agot mindre. Den allra vanligaste metoden inom indexering ¨ar hashing[7]. H¨ar anv¨ands en hashfunktion f¨or att indexera datam¨angden. Med hj¨alp av samma hashfunktion f˚as sedan resultatet ur tabellen n¨ar detta fr˚agas efter av anv¨andaren. De allra viktigaste punkterna att ha i ˚atanke f¨or att indexeringen ska fungera s˚a bra som m¨ojligt ¨ar:

• Sammanslagningsfaktorer, hur den nya datan matas in i det befintliga indexet. • Lagringstekniker, hur indexet ska sparas, dvs. om informationen ska vara

kompri-merad1 eller filtrerad2.

• Indexets storlek, hur mycket utrymme beh¨ovs egentligen f¨or att lagra all data. • Snabbhet, hur snabbt ett v¨arde kan hittas, detta ¨ar den viktigaste delen f¨or en

s¨okmotor.

• Underh˚all, hur indexet uppdateras ¨over tid.

1

Inneb¨ar att datan omkodas s˚a att mindre utrymme kr¨avs f¨or att lagra samma information.

(16)

• Feltolerans, hur viktigt det ¨ar f¨or tj¨ansten att inte ge m˚anga fel.

Blocket ˚a andra sidan anv¨ander sig av ett par taggar som best¨ams n¨ar varje ny annons skapas. Varje annons ¨ar kategoriserad, tillh¨or ett visst l¨an och en viss ort. Detta anv¨ands vid indexeringen och informationen om detta hittas i deras databas. B Locket AB har sju huvudkategorier och flera underkategorier i varje huvudkategori.

2.1.3

orfr˚

agningar

Det sista steget ¨ar helt enkelt sj¨alva s¨okningen. Skillnaden mot att sl˚a mot en helt vanlig databas ¨ar i stort sett storleken. De vanligaste s¨okningarna som en anv¨andare g¨or kan sammanfattas i dessa tre olika sorters f¨orfr˚agningar[35]:

• Informationsf¨orfr˚agningar, fr˚agor som t¨acker in ett v¨aldigt brett omr˚ade, h¨ar kan det finnas massor med relevanta resultat.

• Navigerbara f¨orfr˚agningar, fr˚agor som riktar sig till en specifik webbplats, i www. blocket.se:s fall kan det vara kategori.

• Aff¨arsbesluts-f¨orfr˚agningar, fr˚agor som anv¨andaren anv¨ander sig av f¨or att fatta aff¨arsbeslut, k¨opa bil eller liknande.

Det ¨ar fortfarande vanliga SQL-fr˚agor till den stora databasen som skapats av all den information som spindeln samlat in. Detta ger anv¨andaren dess resultat. Fr˚agan mot databasen bildas d˚a anv¨andaren sl˚ar in sina s¨okord. H¨ar letar s¨okmotorn med hj¨alp av sitt index igenom hela datam¨angden f¨or att till slut visa sitt resultat f¨or anv¨andaren. F¨or Blocket ¨ar dock detta n˚agot annorlunda. De personer som anv¨ander www.blocket.se tar inte s¨okf¨altet till s˚a mycket hj¨alp. Detta beror p˚a att Blocket redan har delat in alla annonser i kategorier som ¨ar v¨aldigt detaljerade. Anv¨andaren klickar sig vanligtvis vidare genom att v¨alja kategori och under-kategori. Detta ¨ar allts˚a f¨orinst¨allda fr˚agor mot databasen vilket g¨or att anv¨andaren upplever det som att s¨okning p˚a det h¨ar s¨attet g˚ar fortare. Eftersom dessa fr˚agor redan har st¨allts mot databasen ¨ar det ocks˚a ett snabbare s¨att att f˚a fram information p˚a.

(17)

2.2

attstavning

Det ¨ar allm¨ant k¨ant att s¨arskrivning och felstavning ¨ar v¨aldigt stora problem i dagens samh¨alle. Vi ¨ar helt enkelt f¨or vana vid att datorer r¨attar oss n¨ar vi skriver fel. Om alla ordbehandlare hanterar stavfel och s¨arskrivningar ˚at anv¨andarna, vilket de flesta faktiskt g¨or, s˚a ¨ar det givet att ocks˚a s¨okmotorerna ska klara av denna uppgift. I dagsl¨aget ¨ar det tyv¨arr bara n˚agra enstaka s¨okmotorer som har lyckats l¨osa denna uppgift(exempelvis Googles s¨okmotor).

Datorerna har inte bara medf¨ort att vi stavar fel p˚a grund av f¨or mycket hj¨alpmedel, ¨

aven tangentbordet g¨or att orden kan bli felaktiga. Det ¨ar n¨amligen v¨aldigt enkelt att tryc-ka p˚a fel tangent. De fyra vanligaste felen som f¨orekommer vid s¨okningar p˚a s¨okmotorer och i texter som skrivs i ordbehandlare ¨ar:

1. Att en bokstav har f¨orsvunnit.

2. Att det har kommit till en extra bokstav. 3. Att en bokstav har bytts ut mot en annan. 4. Att tv˚a bokst¨aver har bytt plats i ordet.

Dessa felstavningar kan faktiskt hittas i ¨anda upp till 80 procent av alla felstavade ord. Detta har pressat utvecklare och andra att f¨ors¨oka komma fram till olika s¨att att l¨osa problemen p˚a. Anledningen till att www.blocket.se vill ha denna funktionalitet ¨ar f¨or att hj¨alpa anv¨andaren att f˚a fler tr¨affar p˚a sina s¨okord. Detta kommer g¨ora annonser mer l¨attillg¨angliga och f¨orhoppningsvis blir annons¨orerna och k¨oparna mer n¨ojda d˚a an-nons¨orernas annonser visas mer, respektive att k¨oparen faktiskt hittar fler annonser. R¨attstavningen kommer att ske utan att anv¨andaren beh¨over fundera p˚a om han eller hon faktiskt stavat r¨att ifall f˚a annonser skulle visas, det kommer att visas ett f¨orslag till annan stavning om det skulle finnas ett annat alternativ som ¨ar b¨attre.

2.2.1

Algoritmer

I dagsl¨aget finns det massor med olika alternativ f¨or att kontrollera om ett ord ¨ar r¨att stavat eller inte. Ett antal av dessa kommer att f¨orklaras h¨ar nedan. N˚agra av de alternativ som finns idag f¨or att hantera problemet med felstavning ¨ar:

(18)

• Edit-distance algoritmer • Bloom-filter

• Jaro-Winkler Fonetiska algoritmer

Fonetiska algoritmer[30] ger varje ord en viss kod, denna kod motsvarar ordets fonetiska skrift. Detta inneb¨ar att flera ord kan ha samma kod d˚a vissa uttal ¨ar v¨aldigt lika, eftersom uttal ¨ar den enda faktorn kan detta bli en v¨aldigt stor begr¨ansning.

F¨or att denna variant ska fungera m˚aste algoritmen ha tillg˚ang till en ordlista, denna ¨

ar indexerad enligt algoritmens koder f¨or fonetisk skrift. Efter att ha matchat det inma-tade och felstavade ordets kod med n˚agon kod i den indexerade ordlistan f˚as ett antal alternativ p˚a vilket ord anv¨andaren kunde menat egentligen. Denna algoritm ger oftast inte ett enda alternativ allts˚a. Det h¨ar inneb¨ar att enbart denna variant inte r¨acker f¨or att klara av en ”Menade du”-implementation3.

N-grams

N-grams[24] delar upp ord i n stora delar, algoritmen indexerar ¨aven sin ordlista enligt denna metod. N¨ar en anv¨andare skriver sitt ord delar n-gram algoritmen upp detta i delar av n storlek. Dessa delar j¨amf¨ors sedan med orden i ordlistan. Desto fler delar som det inmatade ordet har gemensamt med n˚agot ord i ordlistan desto st¨orre sannolikhet ¨ar det att det inmatade ordet faktiskt ¨ar ordet i ordlistan. Ett exempel ¨ar ordet ”hund” som d˚a blir uppdelat i ”hu”, ”un” och ”nd”, detta f¨orutsatt att 2-grams anv¨ands.

N-grams anv¨ands ofta f¨or att f¨oresl˚a ord inom r¨attstavning, framf¨orallt anv¨ander ordbehandlare sig av denna teknik f¨or att indexera sin ordlista. Precis som f¨oreg˚aende algoritm kan inte heller denna f¨oresl˚a ett enda ord f¨or anv¨andaren utan plockar ut ett visst antal ord som inneh˚aller n antal delar N-grams av det inmatade ordet.

Edit-distance algoritmerna

Edit-distance algoritmerna[18] anv¨ander sig av att r¨akna p˚a avst˚andet mellan tv˚a ord. Med avst˚andet menas hur m˚anga operationer som kr¨avs f¨or att ord1 ska bli ord2. Opera-tionerna kan vara borttagning av och inf¨orande av, samt utbyte av bokstav eller bokst¨aver.

(19)

Precis som f¨oreg˚aende algoritmer s˚a anv¨ands ocks˚a h¨ar en ordlista f¨or j¨amf¨orelse. P˚a se-nare tid har ¨aven algoritmer av denna sort utvecklats till att klara av transposition4 av tv˚a bokst¨aver. Operationerna har olika v¨arden beroende p˚a hur tunga de ¨ar, kostnaden ¨

ar enligt f¨oljande:

• Kopiering av bokstav fr˚an ord1 till ord2 har kostnad 0 • Borttagning av bokstav fr˚an ord1 till ord2 har kostnad 1 • Till¨agg av bokstav fr˚an ord1 till ord2 har kostnad 1 • Utbyte av bokstav fr˚an ord1 till ord2 har kostnad 1

Edit-distance algoritmerna ¨ar de som ¨ar vanligast bland r¨attstavningsimplementationer enligt KTH5:s spr˚akvetenskapliga avdelning[16]. Den stora anledningen till detta ¨ar att den ¨ar v¨aldigt snabb, v¨al dokumenterad och har funnits under l˚ang tid, vilket inneb¨ar att den ¨ar v¨al testad och v¨al anv¨and. F¨ordelen ¨ar ocks˚a att den klarar av att hitta ett specifikt ord i en ordlista och har m¨ojlighet att bara ge ett alternativ till det felstavade ordet.

Jaro-Winkler distance

Jaro-Winkler[13] ¨ar en variant p˚a edit-distance. Precis som f¨oreg˚aende algoritm r¨aknar Jaro-Winkler ut avst˚andet mellan tv˚a ord f¨or att till slut hitta ett bra f¨orslag p˚a vad anv¨andaren matat in. Skillnaden dem emellan ¨ar att ju h¨ogre v¨arde i Jaro-Winkler desto n¨armre ¨ar orden varandra i likhet, men i den vanligare varianten av edit-distance ¨ar det ett s˚a l˚agt v¨arde som m¨ojligt mellan tv˚a ord som anger likhet. Avst˚andet mellan tv˚a ord ges av formel 2.1. Ytterligare delar som denna algoritm kan anv¨anda sig av ¨ar att

dj = 1 3  m |s1| + m |s2| + m − t m  (2.1)

Tabell 2.1: m = antal matchande bokst¨aver i s1 och s2, s1 = ord1, s2 = ord2, t = antalet

transpositioner, dj = avst˚and mellan s1 och s2

ranka str¨angar som matchar p˚a prefix h¨ogre ¨an de som matchar senare. Detta kan vara en f¨ordel vid exempelvis namnuppslagning men kan ocks˚a vara en nackdel n¨ar det g¨aller produkter eller andra str¨angar som inneh˚aller n˚agot slumpm¨assiga teckenf¨oljder.

(20)

Jaro-Winkler ¨ar anpassad f¨or att hantera kortare str¨angar eftersom den inte ¨ar riktigt lika snabb som edit-distance. dj som var avst˚andet mellan tv˚a ord anges mellan 0 och 1

i flyttal, d¨ar 0 anger ingen likhet och 1 s¨ager att de ¨ar exakt lika. Bloom-filter

Bloom-filter[3] anv¨ands f¨or att detektera delelement i st¨orre element, till exempel inom lingvistik s˚a kan man se om ett specifikt ord tillh¨or ett annat st¨orre ord. Precis som flera av de tidigare algoritmerna anv¨ander ocks˚a Bloom-filter en ordlista. N¨ar ordlistans storlek ¨okar s˚a finns risken att ord som skulle markerats som felaktiga faktiskt tolkas som r¨att, dock s˚a ger den aldrig felaktiga svar p˚a de ord som faktiskt ¨ar fel.

Detta ¨ar dock en metod som kan vara sv˚ar att implementera i en s¨okmotor, med tanke p˚a att den faktiskt ger fler fel n¨ar ordlistan blir st¨orre. Eftersom ordlistan kommer vara ganska stor i www.blocket.se:s fall s˚a kan detta g¨ora att s¨okningarna blir helt felaktiga i l¨angden vilket kommer att resultera i en uppsj¨o av arga kunder, dessutom blir det sv˚art att bygga en ordlista av annonser med denna metod.

2.2.2

Lucene

Lucene[19] ¨ar en s¨okmotor som helt ¨ar uppbygd enligt Open-source-principen. Det g˚ar allts˚a att anv¨anda denna s¨okmotor i vilket projekt som helst.

Inom omr˚adet r¨attstavning finns det en hel del f¨ardiga komponenter[20] till denna s¨okmotor vilket g¨or den till en intressant kandidat f¨or att sk¨ota denna uppgift p˚a www. blocket.se. Den anv¨ander sig av edit-distance-algoritmer f¨or att kontrollera vilket ord som kan t¨ankas vara det r¨atta. Det finns ¨aven till¨agg f¨or att anv¨anda Jaro-Winkler-algoritmen. F¨or att snabbare hitta de ord i ordlistan som byggs upp av annonserna anv¨ander sig Lucene av N-grams f¨or att indexera hela denna lista. Nackdelen med just denna variant ¨ar att den ¨ar n˚agot anpassad f¨or det engelska spr˚aket, vilket g¨or att den inte kan hantera s¨arskrivningar.

(21)

2.2.3

Hunspell

Hunspell ¨ar ett bibliotek6 som ¨ar byggt f¨or att utf¨ora bland annat r¨attstavning. Detta

bibliotek anv¨ands i m˚anga ordbehandlare och ¨aven webbl¨asare f¨or just r¨attstavning. Hun-spell anv¨ander sig av edit-distance-algoritmer f¨or att kontrollera likhet mellan ord och N-grams f¨or att indexera sin ordlista, allts˚a liknande algoritmer som Lucene anv¨ander sig av. Den stora skillnaden ¨ar att Hunspell har utvecklats under en l¨angre period samt att det ¨ar utvecklat enbart f¨or lingvistik och har st¨od f¨or v¨aldigt m˚anga spr˚ak, samt att det klarar av s¨arskrivning.

2.2.4

Utv¨

ardering

En kombination av edit-distance och N-grams ¨ar de vanligaste som finns implementerade i dagens ordbehandlare[25]. Ordbehandlare beh¨over dock inte t¨anka p˚a prestanda lika mycket som s¨okmotorer d˚a de inte beh¨over vara fullt s˚a snabba, samt att de inte har lika stor datam¨angd att hantera.

Vad g¨aller ordlistor s˚a ¨ar detta ett alternativ som anv¨ands mest i ordbehandlare. Anledningen till detta ¨ar f¨or att det mest handlar om skriftspr˚ak n¨ar dessa anv¨ands. Ordlistorna som finns idag ¨ar uppbyggda manuellt och uppdateras n˚agra g˚anger per ˚ar, detta g¨or att de kan bli n˚agot f¨orlegade n¨ar de anv¨ands under l˚ang tid och i en s¨okmotors v¨arld beh¨over de uppdateras v¨aldigt frekvent.

S¨okmotorer i allm¨anhet anv¨ander inte ordlistor i samma utstr¨ackning, detta eftersom de ska klara av talspr˚ak p˚a ett helt annat s¨att. I B Locket AB:s fall ¨ar det dock lite speciellt eftersom annonser inneh˚aller lite av b˚ada delar, d¨arf¨or kommer fokus att ligga p˚a b˚ade skriftspr˚ak och talspr˚ak.

2.3

arskrivning

S¨arskrivning ¨ar n¨ar ett ord skrivs som tv˚a, denna del innefattar ¨aven det l¨aget som ¨ar tv¨artom, allts˚a d¨ar tv˚a ord skrivs som ett.

Vad g¨aller s¨arskrivning s˚a ¨ar detta ett ¨amne som ¨ar betydligt mycket sv˚arare att l¨osa. I dagsl¨aget finns ingen algoritm som ¨ar v¨alk¨and f¨or att l¨osa detta fenomen. Det beror delvis p˚a att ordbehandlare med mera, fr¨amst utvecklas f¨or det engelska spr˚aket, d¨ar s¨arskrivningar inte f¨orekommer i s¨arskilt stor utstr¨ackning. Samt att m˚anga l¨osningar ¨ar patenterade och v¨aldigt sv˚ara att hitta information om.

(22)

N˚agra av de bibliotek som finns i dag anv¨ander sig av edit-distance algoritmen f¨or att l¨osa ¨aven s¨arskrivningar. Ett antagande g¨ors om att det har inf¨orts ett extra tecken, i detta fall ett mellanslag, n¨ar detta tas bort f˚as en tr¨aff p˚a ett helt ord i ordlistan. Tyv¨arr fungerar inte detta om ¨aven det s¨arskrivna ordet finns i ordlistan, vilket ¨ar fallet i denna rapport d˚a ordlistan kan inneh˚alla felstavade ord.

De algoritmer som l¨oser s¨arskrivningen p˚a b¨attre s¨att anv¨ander sig ist¨allet av mor-fologisk analys[22]. H¨ar specificeras speciella regler f¨or vad som ¨ar en s¨arskrivning och inte.[37]

2.3.1

Morfologisk analys

Morfologisk analys inneb¨ar att ordens struktur tas fram, form och b¨ojning. En morfologisk analys tittar p˚a hur stor del av ordet som kan passa ihop med ett annat ord i ordlistan, vilket leder till att de f¨oresl˚ar en sammans¨attning av tv˚a ord ist¨allet f¨or den s¨arskrivna formen.

F¨or att detta ska fungera anv¨ands en ordlista med samtliga ord taggade enligt svenska spr˚akets regler f¨or r¨attstavning. De ord som kan f¨orekomma i en sammans¨attning av tv˚a ord f˚ar en tagg f¨or detta, det specificeras ¨aven om de kan vara en b¨orjan p˚a en sammans¨attning eller ett slut p˚a den. N¨ar anv¨andaren matar in sitt ord s¨arskrivet tittar allts˚a r¨attstavaren i sin ordlista efter ord som kan f¨orekomma i sammans¨attningar. Om den hittar ord som liknar det anv¨andaren har matat in fast sammansatt s˚a f¨oresl˚ar den det ordet ist¨allet.

Denna metod ¨ar allts˚a s¨akrare ¨an att g¨ora antagandet att mellanslaget ¨ar en felaktig bokstav. Finns s¨arskrivningen i ordlistan kan problem uppst˚a, vilket kommer att vara fallet f¨or B Locket AB och deras ordlista. En l¨osning p˚a detta kan vara att varje ord i ordlistan rangordnas och n¨ar f¨orslag ska tas fram kontrolleras vilket av dem som rankas h¨ogst, det ord som d˚a rankas h¨ogst kommer att f¨oresl˚as som det r¨att stavade.

2.4

Stemming

(23)

omr˚ade som det han eller hon s¨okt p˚a. Detta fungerar eftersom ordets stam tas fram och inte tv¨artom, dvs. f¨ors¨oker skapa nya ord. Denna funktionalitet finns redan p˚a www. blocket.se men fungerar inte fullt ut, d¨arf¨or ska en unders¨okning g¨oras p˚a det alternativ som anv¨ands idag och se ifall det finns n˚agot som ¨ar b¨attre, eller om den funktion som redan finns kan f¨orb¨attras p˚a annat s¨att.

2.4.1

Algoritmer

De tv˚a olika varianterna som unders¨okts i denna rapport ¨ar en algoritm utan ordlista och en variant med ordlista. Dessa varianter ¨ar egentligen tv˚a bibliotek f¨or programmerings-spr˚aket C, n¨amligen Snowball som klarar sig utan ordlista och Hunspell som anv¨ander en ordlista. Anledningen till att det bara ¨ar tv˚a varianter som unders¨okts ¨ar f¨or att ett av B Locket AB:s grundl¨aggande krav var att de f¨ardiga delar som skulle anv¨andas var gratis och helst Open-source alternativ. Den fr¨amsta anledningen till att detta krav kom upp ¨ar f¨or att f¨oretaget vill undvika on¨odiga kostnader till andra f¨oretag.

De tv˚a algoritmerna beskrivs h¨ar nedan.

Snowball

Detta ¨ar den variant som inte anv¨ander n˚agon ordlista f¨or att lista ut ordens stam. H¨ar tittar algoritmen helt enkelt p˚a ordet och ser vad det slutar p˚a, vilket betyder att denna ”stemmer” utan ordlista enbart tittar p˚a suffix. Detta ¨ar en begr¨ansning som kan inneb¨ara vissa felaktigheter i s¨okresultaten.

I denna variant m˚aste regler deklareras f¨or hur varje ord f˚ar ¨andras, vilka ¨andelser som kan tas bort och p˚a vilket s¨att detta ska g¨oras. Detta g¨or att det ganska snart blir en v¨aldigt komplex och stor lista med regler, dessutom oavsett hur mycket regler som inf¨ors s˚a blir det n¨astan om¨ojligt att t¨acka alla fall.

F¨ordelarna med de algoritmer som inte anv¨ander ordlistor ¨ar att de ¨ar v¨aldigt snabba och kr¨aver v¨aldigt lite utrymme, de kan allts˚a vara bra vid fall d¨ar prestanda ¨ar viktigare ¨

an precisa resultat och framf¨orallt n¨ar prestandan ¨ar begr¨ansad. Nackdelen ¨ar dock att de kan ta bort f¨or stor del av ordet s˚a att det f˚ar en helt annan betydelse7, men ¨aven att

ett ord som inte finns uppkommer. Om detta intr¨affar s˚a ¨ar stemmingen helt bortkastad, anv¨andaren kommer att f˚a tr¨affar p˚a helt andra saker ¨an det han faktiskt s¨okt p˚a, eller inga alls, vilket kan leda till en allvarlig bugg.

Det Open-Source alternativ som finns f¨or den h¨ar sortens stemming heter Snowball[28].

(24)

Hunspell

Hunspell[9] anv¨ander sig av en ordlista uppbyggd med hj¨alp av morfologisk analys f¨or att ta reda p˚a ordets morfem8.

Med hj¨alp av den morfologiska analysen hittas allts˚a den minsta gemensamma n¨amnaren mellan orden i ordlistan och det anv¨andaren har matat in. Ordets stam, som blir resul-tatet, ¨ar det som den totala s¨okningen baseras p˚a f¨or att f˚a fler tr¨affar, precis som sagts tidigare.

Den morfologiska analysen utf¨ors p˚a ordlistan vid indexeringstillf¨allet, ordlistan byggs d˚a upp med s˚a kallade taggar. Varje ord f˚ar en taggning som beskriver vilken ordklass det tillh¨or, hur det kan b¨ojas och ¨aven dess struktur. H¨ar kopplas ord samman med varandra om de tillh¨or samma grundform, detta med hj¨alp av de regler som satts upp av den affix-fil programmet anv¨ander. En affix-fil inneh˚aller regler p˚a hur ord kan kortas ner, detta baserat p˚a spr˚akets vanliga prefix och suffix.

Nackdelen med dessa affix-filer och ordlistor ¨ar att de byggs upp manuellt, anledningen till detta ¨ar att det blir oerh¨ort sv˚art att bygga detta automatiskt eftersom lingvistiken ¨

ar s˚a oerh¨ort komplex. Andra alternativ som kan st¨allas in i en affix-fil ¨ar bland annat: • Hur m˚anga bokst¨aver varje ord som ing˚ar i en sammans¨attning m˚aste ha

• Om programmet ska ge f¨orslag p˚a tv˚a separata ord som en sammans¨attning • Vilka ord som kan ing˚a i en sammans¨attning

• Vilken ordklass varje ord tillh¨or. . .

2.4.2

Utv¨

ardering

Stemming utan ordlista hittar ordets stam men g¨or v¨aldigt ofta fel, Hunspell d¨aremot hittar ordets korrekta stam betydligt mer frekvent. Om anv¨andaren matar in ordet ”ka-jakerna” s˚a lyckas den med ordlista att f˚a fram ordet ”kajak” som d˚a ¨ar ordets stam. Detta skulle stemming utan ordlista f˚a fram ordet ”kajaker” utav, om ordet hade varit mindre komplext hade ¨aven denna metod lyckats hitta r¨att ordstam.

Hunspell ¨ar inte lika snabb som stemming utan ordlista men ger betydligt f¨arre fel, dessutom ¨ar sammanfl¨atning inte alls lika vanligt, detta g¨or att anv¨andaren f˚ar mer precisa resultat och framf¨orallt r¨att resultat.

(25)

2.5

Lemmatization

Denna metod liknar stemming som n¨amnts tidigare i 2.4. Den stora skillnaden ¨ar att ist¨allet f¨or att hitta ordets stam hittas ordets lemma. Lemma ¨ar ordets grundform, t.ex. ”s¨amre” som har grundformen ”d˚alig”. F¨or att best¨amma ordets lemma beh¨over algo-ritmen veta vilket spr˚ak det ¨ar och i vilket sammanhang ordet anv¨ands. En nackdel h¨ar ¨

ar allts˚a att vissa ord faktiskt har flera betydelser vilket kan leda till v¨aldigt komplexa operationer. De komplexa operationerna g¨or att det kan bli stora p˚afrestningar p˚a den maskin som utf¨or dem och sj¨alva systemet kan upplevas som segt, dessutom fungerar denna metod b¨ast n¨ar ordet s¨atts i ett sammanhang, vilket s¨allan ¨ar fallet i en s¨okterm. F¨ordelen ¨ar att Lemmatization[17] ¨overvinner problemet med att liknande, ickerele-vanta ord h¨amtas. Det h¨ar problemet uppkommer d¨aremot ofta vid stemming.

Lemmatization ¨ar fortfarande en v¨aldigt bra metod f¨or att hj¨alpa anv¨andaren hitta vad han eller hon letar efter. Antalet fel ¨ar v¨aldigt sm˚a i f¨orh˚allande till vad som skulle kunna h¨anda med stemming och den ¨ar framf¨orallt v¨aldigt exakt.

2.6

Synonymer

F¨or att en s¨okmotor ska bli riktigt bra m˚aste den klara av att f¨orst˚a synonymer. Synony-mer ¨ar ord som har samma betydelse som ett specifikt annat ord. I s¨okmotorns fall inneb¨ar detta att anv¨andaren kan f˚a fler tr¨affar, om han eller hon t.ex. s¨oker p˚a ”rullbr¨ada” s˚a ska tr¨affar ¨aven ges p˚a ordet ”skateboard” och andra synonymer. www.blocket.se har i dagsl¨aget inte n˚agon s˚adan implementation och n¨ar det g¨aller annonser ¨ar denna funk-tion v¨aldigt viktig. Anledningen till detta ¨ar f¨or att B Locket AB anv¨ands av s˚a skilda ˚aldersgrupper, d¨arf¨or kan de skriva v¨aldigt olika ord men faktiskt mena exakt samma

sak. Vad finns det d˚a f¨or alternativ som g¨or detta?

Vad g¨aller Open-source alternativ finns det bara ett som ¨ar vanligt och ordentligt beskrivet, detta heter MyThes och anv¨ands i bland annat OpenOffice9.

MyThes[23] anv¨ander sig av tv˚a filer f¨or att kontrollera ord och dess synonymer. Huvudfilen ¨ar uppbyggd enligt denna struktur:

Ord — antal betydelser

betydelse1 — syn1 — syn2 . . . .

.

(26)

.

betydelseX — syn1 — syn2 ...

Ord – ordet som matats in och som finns i ordlistan

Antal betydelser – hur m˚anga olika sorters betydelser det ordet kan ha

Varje rad som f¨oljer denna inneh˚aller en betydelse och den har i sin tur sina synonymer efter sig enligt denna ordning:

1. betydelse – specifik betydelse f¨or ordet

2. syn1 – synonym nummer ett f¨or den specifika betydelsen 3. syn2 – synonym nummer tv˚a f¨or samma betydelse osv.

Den andra filen byggs upp med hj¨alp av denna huvudfil genom att enbart ta med antal synonymer totalt och siffran p˚a detta i toppen av filen, samt var i huvudfilen som orden kan hittas. Denna fil kan ses som en indexfil och totala antalet synonymer inneb¨ar alla synonymer som ing˚ar i databasen.

N¨ar ett ord matas in i s¨okf¨altet av anv¨andaren kontrollerar programmet i sin indexfil var den kan hitta andra betydelser av det inmatade ordet i sin synonymordlista. Om den hittar n˚agra synonymer matas dessa ut enligt betydelse och med dess synonymer uppradade, detta kan anv¨andas f¨or att anv¨andaren ska f˚a fler tr¨affar inom samma omr˚ade och ¨aven f¨or att hitta det som kan vara lite sv˚arare att lokalisera.

2.7

Autocomplete

Autocomplete[15] hj¨alper anv¨andaren genom att f¨oresl˚a ord f¨or denne, dessa ord baseras p˚a vad anv¨andaren har slagit in f¨or bokst¨aver i s¨okf¨altet, exempel p˚a hur detta kan se ut kan ses i figur 2.1.

Denna metod ¨ar framf¨orallt v¨aldigt effektiv n¨ar det ¨ar enkelt att gissa vad anv¨andaren vill skriva. De fall n¨ar det blir enkelt ¨ar n¨ar antalet m¨ojliga f¨orslag ¨ar begr¨ansade eller att datam¨angden inte ¨ar s˚a stor, med andra ord, desto fler ord anv¨andaren matar in i s¨okf¨altet desto f¨arre alternativ finns det att v¨alja bland och s¨okningen g˚ar snabbare.

(27)

Figur 2.1: Ett exempel p˚a autocompletion i ett textf¨alt fr˚an den f¨orsta prototypen som gjordes.

s˚a enkelt som m¨ojligt p˚a hela sidan. Den f¨orslagslista som dyker upp f¨or anv¨andaren kommer att sorteras enligt de specifikationer som utvecklaren best¨ammer. B Locket AB:s id´e ¨ar att titta p˚a alla annonsrubriker och implementera autocomplete med hj¨alp av dessa. N¨ar anv¨andaren matar in bokst¨aver i s¨okf¨altet f˚ar denne allts˚a f¨orslag p˚a olika annonsrubriker inneh˚allandes den str¨ang anv¨andaren matat in, n˚agra andra exempel p˚a vilken data f¨orslagslistan kan skapas av ¨ar:

• Historiska s¨okningar, dessa loggas av s¨okmotorn och presenteras f¨or anv¨andaren i fallande ordning baserat p˚a hur m˚anga g˚anger de gjorts.

• Personliga historiska s¨okningar, sorterade p˚a antal g˚anger de gjorts f¨or just den anv¨andaren, sv˚art med datam¨angd.

• Nyligen gjorda s¨okningar, mindre datam¨angd

Hur detta ska sorteras baseras p˚a vilken sorts applikation det ¨ar som ska anv¨anda tj¨ansten, men f¨or att f˚a den s˚a snabb som m¨ojligt ¨ar det bra att basera det p˚a en s˚a liten datam¨angd som m¨ojligt, den f˚ar dock inte vara f¨or liten eftersom det kan leda till d˚aliga f¨orslag eller inga alls.

Den andra delen av f¨orslagslistan ¨ar sj¨alva ordningen p˚a den. Hur detta ska ordnas best¨ams ocks˚a av utvecklaren men ¨aven h¨ar finns ett antal olika f¨orslag.

• Ber¨aknad sannolikhet, t.ex. Hur ofta s¨okningen gjorts historiskt sett. • Senast f¨orfr˚agningen gjordes, Om det ¨ar intressant ur historisk synpunkt.

(28)

Normalt uppdateras f¨orslagslistan efter varje tangenttryckning, vilket leder till en ganska kostsam operation f¨or servern. Om ett s˚ant h¨ar anrop ska g¨oras f¨or varje anv¨andare flera g˚anger under en kort period s˚a ¨ar det stor risk att den maskin som hanterar f¨orfr˚agningarna blir ¨overanstr¨angd. F¨or att undvika att detta problem uppst˚ar anv¨ands submission throttling[33] och cache[5].

2.7.1

Submission throttling

Submission throttling inneb¨ar att ist¨allet f¨or att l˚ata Autocomplete-metoden anropa ser-vern vid varje tangenttryckning s˚a sker anropen med ett visst tidsintervall. Anropen sker allts˚a mer s¨allan och problemet med att de anv¨andare som skriver v¨aldigt snabbt f˚ar konstiga f¨orslag undviks. De konstiga f¨orslagen uppkommer helt enkelt eftersom servern inte hinner med att hantera varje anrop. Om fokus ist¨allet l¨aggs p˚a cache f¨or att f¨ors¨oka ¨

oka snabbheten s˚a kan detta g¨oras med olika metoder, tex Browser-side-cache[4] eller memcache[21].

2.7.2

Browser-side-cache

Browser-side-cache anv¨ander sig av cache-minnet som finns i webbl¨asaren, nackdelen med detta ¨ar att denna cache begr¨ansas till en viss storlek, ju mer data som cachas desto l¨angre tid tar det f¨or webbl¨asaren att visa sidan. Detta kan p˚averka anv¨andarens surfupplevelse, speciellt om han eller hon har en ¨aldre dator, det h¨ar ¨ar allts˚a ett typiskt exempel p˚a hur anv¨andaren kan p˚averkas negativt ¨aven om m˚alet ¨ar att g¨ora sidan mer anv¨andarv¨anlig, d¨arf¨or ¨ar inte detta att rekommendera om datam¨angden ¨ar stor.

Hur l¨ange cachen ska sparas beror helt p˚a utvecklaren, detta d˚a han kan s¨atta specifika villkor p˚a hur l¨ange cachen ska h˚allas kvar lokalt hos anv¨andaren. Det kan g¨oras med bland annat b¨ast f¨ore datum eller med senast ¨andrad taggar. Utvecklaren f˚ar dock inte s¨atta vilka villkor som helst f¨or denna cache, vissa lagar m˚aste f¨oljas och dessa finns specificerade i HTTP:s-specifikation[8].

2.7.3

Memcache

(29)

anv¨andare som utnyttjar tj¨ansten, men ¨aven hur mycket data som m˚aste behandlas. Detta kan vara ett aktuellt alternativ i B Locket AB:s fall.

2.7.4

Utv¨

ardering

Oavsett metod s˚a ¨ar sj¨alva id´en med cache att minska antalet f¨orfr˚agningar till servern, detta dels f¨or att snabba upp systemet men ¨aven f¨or att minska p˚afrestningen p˚a den. Cache fungerar p˚a s˚a vis att det har en lista p˚a de ord, som exempelvis s¨oks p˚a oftast, sparad. F¨or att undvika att denna lista v¨axer till o¨andlighet, vilket skulle leda till ett lika sl¨ott system som utan cache, m˚aste det d˚a och d˚a kastas ut ord. Detta kan exempelvis g¨oras genom att de ord som s¨okts p˚a mindre ¨an andra kastas ut, ord som f¨orekommer mindre frekvent ¨an andra knuffas helt enkelt ner˚at i listan. F¨or att undvika att listan bli inaktuell m˚aste denna uppdateras ganska frekvent.

N¨ar anv¨andaren b¨orjar mata in sitt s¨okord kommer allts˚a den f¨orsta f¨orfr˚agningen att ske mot cachen och om ord som liknar anv¨andarens finns d¨ar kommer dessa att visas i f¨orslagslistan, om s˚a inte skulle vara fallet kommer en f¨orfr˚agning ske mot servern direkt. Det kommer d˚a att ta n˚agot l¨angre tid att f˚a fram listan p˚a f¨orslag men f¨orslaget kommer fortfarande att visas.

2.7.5

Gr¨

anssnitt

Det finns flera bibliotek som klarar av autocompletion, de flesta skrivna i javascript[14] eller AJAX[1]. De fungerar p˚a liknande s¨att allihopa, n˚agra exempel p˚a bibliotek f¨or autocompletion ¨ar, scriptaculous[27] och jquery[15]. Valet f¨oll p˚a jQuery enbart f¨or att B Locket AB redan anv¨ander det och s˚aledes utf¨ordes ingen analys p˚a dessa delar.

2.7.6

Krav p˚

a s¨

okmotorn

(30)

Kapitel 3

Resultat och utv¨

ardering

H¨ar beskrivs varje del f¨or sig samt vilka resultat som uppn˚atts inom varje omr˚ade, ¨aven hur dessa delar har implementerats eller inte i den slutgiltiga prototypen.

3.1

attstavning

Efter att ha v¨agt de olika algoritmerna mot varandra kunde en slutsats dras om att en kombination mellan edit-distance och N-grams var det b¨asta alternativet f¨or denna typ av problem, detta f¨or att N-grams ¨ar en v¨aldigt snabb algoritm som ger v¨aldigt f˚a fel och edit-distance ¨ar v¨aldokumenterad.

I den h¨ar rapporten anv¨ands N-grams f¨or att indexera ordlistan, detta g¨or att orden kan lokaliseras snabbare ¨an om enbart edit-distance hade anv¨ants. Edit-distance anv¨ands ist¨allet f¨or att kontrollera de ord som N-grams plockar fram och ser vilket som ¨ar mest likt det ord anv¨andaren redan matat in. Anledningen till att edit-distance valdes ¨ar f¨or att den ¨ar specialkonstruerad f¨or att j¨amf¨ora tv˚a ord och skillnaden dem emellan, just den valda varianten klarar av transposition ocks˚a, vilket ¨ar lite mer effektivt och g¨or den ¨

annu b¨attre.

F¨or att minska arbetsb¨ordan, men ocks˚a f¨or att det var sv˚art att uppn˚a n˚agot lika bra, valdes ett bibliotek med dessa egenskaper f¨or r¨attstavning kallat Hunspell och en separat s¨okmotor kallad Lucene ut. Hunspell anv¨ands vanligen i de flesta Open-Source1 -projekten som beh¨over r¨attstavning. Lucene ˚a andra sidan anv¨ands fr¨amst n¨ar det beh¨ovs en s¨okmotor med stor funktionalitet och enkel utbyggnad.

Ordlistan som Lucene och Hunspell anv¨ander byggs nu upp av blockets

(31)

ker, den sorteras enligt hur ofta varje ord f¨orekommer i fallande ordning.

N¨ar anv¨andaren matar in sitt ord i s¨okf¨altet kontrolleras ordet mot ordlistan. Om ordet inte finns med i ordlistan kommer en s¨okning att genomf¨oras p˚a anv¨andarens felstavade ord, men han kommer ¨aven att f˚a upp ett f¨orslag p˚a vad han kan ha menat egentligen. Det f¨orslag som anv¨andaren f˚ar upp ¨ar baserat p˚a hur m˚anga g˚anger det f¨orekommer i alla annonser och hur pass likt det ¨ar ordet anv¨andaren matade in. St¨orst vikt l¨aggs p˚a hur pass likt ordet ¨ar det inmatade ordet. F¨or att best¨amma vilket av de tv˚a alternativen som

Figur 3.1: P˚a detta s¨att kommer ordlistan att byggas upp n¨ar Hunspell implementeras i det f¨ardiga systemet.

(32)

klarar av m˚anga spr˚ak ¨ar att detta ska kunna lanseras i fler l¨ander ¨an Sverige.

Det finns dock vissa problem med Hunspell, speciellt n¨ar ordlistan inneh˚aller felsta-vade ord, ordlistan ¨ar n¨amligen lag f¨or Hunspell. Detta betyder att ordlistan inte f˚ar inneh˚alla n˚agra felstavade ord eller ˚atminstone s˚a f˚a felstavade ord som m¨ojligt, d˚a det inte ser s¨arskilt bra ut n¨ar ett felstavat ord visas f¨or anv¨andaren. Anledningen till att detta problem uppst˚ar ¨ar f¨or att ordlistan skapas av alla annonser. En l¨osning ¨ar dock att Hunspell v¨aljer det ord som rankas h¨ogst beroende p˚a frekvens i alla annonser, p˚a s˚a vis undviks detta problem.

Det viktigaste med denna funktion ¨ar att den blir snabb och att resultatet syns tydligt f¨or anv¨andaren. Implementationen g¨or att anv¨andaren kan s¨oka och f˚a tr¨affar ¨aven om han eller hon har sv˚art med stavning. Dessutom eftersom en fels¨okning aldrig korrigeras kommer de annonser som stavats fel ocks˚a att visas. En stor aspekt i detta problem ¨ar att det m˚aste se s˚a enkelt ut som m¨ojligt f¨or anv¨andaren, som sagts tidigare ¨ar B Locket AB:s filosofi att allt ska se s˚a enkelt ut som m¨ojligt. D¨arf¨or har det lagts stor vikt vid designen av detta, det ¨ar ocks˚a n˚agot som kommer att vidareutvecklas ¨aven efter detta projekt.

F¨or att ge en bild ¨over hur det skulle kunna se ut ges ett exempel i figur 3.2. I detta projekt togs designbesluten i diskussion med handledare och de ansvariga f¨or designen p˚a siten. Eftersom f¨oretaget vill ha sitt att s¨aga till om blev designen inte helt fullst¨andig under projektets g˚ang.

(33)

3.2

arskrivning

Den implementation som testats av Hunspell klarar av s¨arskrivning v¨aldigt bra f¨orutsatt att ordlistan inneh˚aller det r¨atta ordet. Nackdelen med Hunspell i det h¨ar l¨aget ¨ar att den inte klarar av att skilja p˚a s¨arskrivning och tv˚a helt skilda ord. T.ex om s¨oktermen ”volvo v70” matas in ger Hunspell f¨orslaget ”volvo”, vilket i det h¨ar fallet ¨ar helt fel eftersom anv¨andaren faktiskt var ute efter den specifika modellen ”v70”. Kan detta f¨orhindras p˚a n˚agot s¨att och hur kan Hunspell tvingas till att f¨oresl˚a r¨att ord?

S¨attet att l¨osa detta problem blev att varje mening delas in i ordpar och s˚a vidare, t.ex ”volvo v70’ blir ”volvo”, ”volvo v70” och ”v70”. Det h¨ar tvingar Hunspell att v¨alja ”volvo v70”, f¨orutsatt att det alternativet finns och ¨ar h¨ogt prioriterat. Tyv¨arr har inte denna l¨osning implementerats i den riktiga prototypen vilket g¨or att s¨arskrivningar kan accepteras som godk¨anda s¨oktermer. Anledningen till att detta inte implementerats var f¨or att tiden blev f¨or knapp.

3.3

Stemming och Lemmatization

De alternativ som fanns var stemming utan ordlista eller med ordlista, samt lemmatiza-tion. De tester som utf¨orts visade ganska snart att stemming utan ordlista inte fungerar eftersom den plockar ut s˚a pass m˚anga felaktiga ordstammar. Hade denna anv¨ants ha-de anv¨andaren kunnat f˚a v¨aldigt konstiga tr¨affar och framf¨orallt f˚att tr¨affar p˚a andra omr˚aden ¨an det han eller hon var ute efter (se appendix F).

(34)

ger f¨arre felaktiga ordstammar. Denna metod ¨ar allts˚a b¨attre och eftersom skillnaden i hastighet dem emellan ¨ar s˚a pass l˚ag finns det ingen anledning till att inte v¨alja den metod som ger l¨agre antal fel.

F¨or att stemming ska fungera s˚a bra som m¨ojligt m˚aste konstanta uppdateringar av ordlistan ske, tyv¨arr kommer m˚anga av dessa att beh¨ova ske manuellt, d˚a det kan vara sv˚art att t¨acka in precis alla fall. ¨Aven den svenska ordlistan uppdateras idag manuellt eftersom det hela tiden l¨aggs till nya ord i det svenska spr˚aket.

Stemming ¨ar n˚agot som redan ing˚ar i dagens s¨okmotor p˚a www.blocket.se och ¨aven i de flesta moderna s¨okmotorer p˚a marknaden. Med denna rapport tillkommer dock en f¨orb¨attring av den redan existerande varianten av stemming med Hunspell.

Det stora problemet som fanns tidigare var att ord kunde sammanfl¨atas och vissa ord kunde kortas ner f¨or l˚angt s˚a att de inte l¨angre hade n˚agon betydelse, detta l¨ostes i och med att ordlistan fick en konstant uppdatering. Nackdelen ¨ar att det tar lite tid att uppdatera ordlistan och det kan vara sv˚art att se vilka ord som kortas ner felaktigt, men n¨ar uppdateringarna g¨ors kommer ocks˚a f¨orb¨attringen vilket g¨or att tiden som l¨aggs ner p˚a uppdatering tas igen i effektivitet.

Den h¨ar f¨orb¨attringen av s¨okmotorn ¨ar inget som anv¨andaren kommer att se men det g¨or att tr¨affarna han eller hon f˚ar blir fler. Stemming g¨or allts˚a s¨okmotorn f¨orb¨attrad i fr˚aga om att presentera fler relevanta resultat f¨or anv¨andaren, vilket i sin tur g¨or att fler annonser kommer synas och fler personer f˚ar m¨ojlighet att s¨alja sina begagnade prylar.

3.4

Synonymer

Synonymerna anv¨ands f¨or att l˚ata anv¨andaren f˚a fler tr¨affar. Det kommer framf¨orallt att anv¨andas f¨or produkter som kan ben¨amnas p˚a flera olika s¨att. T.ex. ”playstation 3”2 och ”ps3”. Detta kommer att anv¨andas varje g˚ang en s¨okning g¨ors.

N¨ar anv¨andaren har matat in sin s¨okterm skickas den termen till synonymbehand-laren. H¨ar kommer s¨oktermen att j¨amf¨oras mot synonymordlistan, d¨arefter plockas dess synonymer ut och anv¨ands i den totala s¨okningen. Den stora nackdelen med implementa-tionen ¨ar att synonymordlistan m˚aste byggas upp fr˚an noll. Den kommer allts˚a att byggas upp manuellt och varje ord som finns i ordlistan har d˚a kontrollerats av en utvecklare. Tyv¨arr blir detta n˚agot omst¨andigt men samtidigt uppn˚as en v¨aldig kontroll p˚a vilka ord som faktiskt ska ing˚a och f¨orhoppningsvis kommer det att minska antalet fel.

Synonymimplementationen leder till en breddad s¨okning d¨ar varje synonym och den

(35)

ursprungliga s¨oktermen kommer anv¨andas f¨or att g¨ora f¨orfr˚agningar mot databasen. I f¨orl¨angningen kan det h¨ar g¨ora att s¨okmotorn blir n˚agot mer belastad men det ska inte p˚averka den s˚a mycket att det inte ¨ar m¨ojligt att genomf¨ora, detta har tagits i beaktande av B Locket AB innan valet f¨oll p˚a att det faktiskt skulle implementeras.

3.5

Autocomplete

Eftersom s¨okmotorn som anv¨ands idag inte klarar av de delar som beh¨ovs f¨or att utf¨ora autocomplete p˚a det s¨att som B Locket AB vill, byggdes en egen utefter en Open-source-s¨okmotor kallad Lucene. Denna s¨okmotor ¨ar anpassad f¨or just texts¨okning i stora sy-stem och med stora datam¨angder. F¨or att kunna utnyttja denna s¨okmotor p˚a b¨asta s¨att anv¨ands en s¨okserver kallad Solr[29], Solr ¨ar anpassad till Lucene och har m˚anga redan f¨ardigbyggda komponenter f¨or att b˚ade indexera och s¨oka med hj¨alp av Lucene. S¨attet som autocomplete l¨osts p˚a ¨ar att s¨okmotorn enbart indexerar alla annonsrubriker.

(36)

unikt f¨or alla entiteter)som anv¨ands vid uppslagning i index, skillnaden mot att inte spa-ra datan kan ses i figur 3.3. Beroende p˚a hur mycket data som inneh˚aller den efters¨okta termen desto l¨angre tid tar det att f˚a f¨orslagen.

Varje annonsrubrik best˚ar av max 40 tecken vilket specificerats av B Locket AB som d¨armed vill begr¨ansa anv¨andarna f¨or att rubriken ska vara s˚a kort och koncis som m¨ojligt. Annonsrubriken ska helt enkelt bara inneh˚alla n¨odv¨andig information om produkten. Vid indexeringstillf¨allet ses varje ord i varje rubrik som ett N-gram, vilket inneb¨ar att varje rubrik indexeras ord f¨or ord. Detta ger m˚anga fler platser i indexet, vilket kan g¨ora s¨okningen seg, men detta l¨oses genom n˚agot som liknar memcache. S˚a stora delar som m¨ojligt av datan sparas i RAM-minnet, vilket g¨or att den ¨ar mer l¨attillg¨anglig och d¨arf¨or g˚ar snabbare att sl˚a upp. Ett exempel p˚a hur denna uppdelning fungerar ¨ar rubriken ”volvo v40 2,0” som efter indexering ser ut enligt f¨oljande:

volvo volvo v40 volvo v40 2,0 v40 v40 2,0

2,0

Denna mening f˚ar allts˚a 6 platser i indexet. Anledningen till att rubrikerna delas upp p˚a detta s¨att ¨ar f¨or att anv¨andaren ska f˚a f¨orslag p˚a just det ord han eller hon b¨orjar skriva och inte en hel rubrik p˚a en g˚ang.

N¨ar anv¨andaren b¨orjar mata in sin s¨okterm kommer ett anrop ske mot sj¨alva autocomplete-delen. H¨ar kontrolleras sedan vilka ord som kan passa ihop med det anv¨andaren redan har skrivit.

Varje annonsrubrik har indexerats enligt tidigare f¨orklarat s¨att, detta kallas inverted index3[11, 12].

De bokst¨aver anv¨andaren slagit in matchas mot alla rubriker, d¨armed h¨amtas de rubri-ker ut som inneh˚aller den textstr¨ang anv¨andaren matat in. N¨asta steg ¨ar att anv¨andaren f˚ar upp en f¨orslagslista med ett specifikt antal ord och ordpar som inneh˚aller just den str¨ang han eller hon matat in, dessa f¨orslag ¨ar allts˚a delar av annonsrubriker som in-neh˚aller den str¨ang anv¨andaren matat in. Hur m˚anga ord och ordpar som ska visas i denna f¨orslagslista kan enkelt st¨allas in genom att ¨andra p˚a en variabel.

F¨ordelen med denna teknik ¨ar att anv¨andaren snabbare kommer fram till vad han eller hon vill s¨oka efter och eftersom f¨orslagen ¨ar rubriker p˚a annonser kommer tr¨affarna att vara mer exakta. Dessutom kommer anv¨andaren att f˚a n˚agra fler alternativ om listan presenteras p˚a detta s¨att, vilket i sin tur g¨or att fler annonser kommer f˚a uppm¨arksamhet. B Locket AB str¨avar n¨amligen efter att alla annonser ska f˚a lika mycket utrymme eftersom

(37)

alla betalar samma pris inom samma kategori, enligt f¨oretaget sj¨alvt str¨avar de efter att uppn˚a n˚agot som liknar allemansr¨atten[2].

Det stora problemet med denna implementation f¨orutom hur sj¨alva f¨orslagslistan skul-le skapas var att f˚a designen att se s˚a enkel ut som m¨ojligt p˚a www.blocket.se. Just att det ska se enkelt ut ¨ar n˚agot som B Locket AB verkligen st˚ar f¨or och jobbar h˚art f¨or. Ett f¨orslag p˚a hur autocomplete kan se ut p˚a www.blocket.se kan ses i figur 3.4.

(38)

Kapitel 4

Slutsats, diskussion och framtida

arbete

Vilka f¨orb¨attringar har skett och vad kan g¨oras f¨or att f¨orb¨attra dem ytterligare?

4.1

Slutsats och Diskussion

(39)

AB. Med hj¨alp av Lucene:s API och dess redan fungerande komponenter var det relativt

Figur 4.1: P˚a det h¨ar s¨attet skulle alla delar kopplas samman i slutprototypen om lite mer tid funnits att tillg˚a.

(40)

anv¨andaren hade f˚att upp helt meningsl¨osa f¨orslag. Annonsrubriker anv¨andes ist¨allet f¨or hela annonser eftersom en s˚a liten men fortfarande relevant datam¨angd skulle anv¨andas. P˚a samma s¨att skapas ordlistan f¨or r¨attstavning, tyv¨arr ¨ar inte den slutgiltiga l¨osningen f¨or r¨attstavning implementerad i prototypen eftersom denna kom till f¨orst i slutet av projektet. Versionen av r¨attstavning som ¨ar implementerad i prototypen ¨ar inte helt felfri d˚a den ibland kan ge konstiga f¨orslag, men sj¨alva grundid´en finns d¨ar och den kommer vidareutvecklas av B Locket AB under detta ˚ar. De st¨orsta delarna som tar hand om autocomplete i prototypen kan ses i bilaga A och bilaga B.

Det stora problemet inom r¨attstavning ¨ar framf¨orallt s¨arskrivning. Hunspell borde l¨osa detta n¨ar det implementeras, men det ¨ar v¨aldigt viktigt att ordlistan som skapas uppdateras frekvent eftersom annonser kommer och g˚ar ofta. Hunspell l¨oste detta problem n¨ar det utf¨ordes tester p˚a sm˚a datam¨angder, risken ¨ar dock att den blir f¨or l˚angsam n¨ar datam¨angden ¨okar. F¨or att se ungef¨ar hur det fungerar idag kan bilaga C vara intressant. Ett f¨orslag ¨ar att ordlistan skapas samtidigt som indexeringen sker, mest f¨or att mins-ka antalet tillf¨allen som s˚a tunga operationer g¨ors. Slutsatsen som kan dras av hela r¨attstavningsimplementationen ¨ar att det egentligen inte ¨ar en r¨attstavare. Det ¨ar mer korrekt sagt, en f¨orslagsgivare som ger f¨orslag p˚a vad det ¨ar anv¨andaren kan ha menat som s¨okord, d¨ar f¨orslaget ger fler tr¨affar.

Om Hunspell blir f¨or kr¨avande ¨ar v¨aldigt sv˚art att svara p˚a i dagsl¨aget. Det h¨ar beror p˚a att en modifikation har gjorts av sj¨alva biblioteket d¨ar det blir en slags f¨orslagsgivare ist¨allet f¨or en r¨attstavare som det ¨ar i grunden. Det kan dock inte fattas ett slutgiltigt beslut om det ¨ar f¨or kr¨avande eller ej f¨orr¨an det faktiskt testats fullt ut, vilket tyv¨arr inte tidsramen till¨at.

P˚a relativt sm˚a datam¨angder (ca 100 000 ord) klarar Hunspell av att leverera ett f¨orslag inom en tillfredsst¨allande tid, n¨amligen under 0,5 sekunder.

Autocomplete d¨aremot var n˚agot som den nuvarande s¨okmotorn inte hade klarat av att implementera enligt B Locket AB:s krav. Detta eftersom den inte klarar av att indexera s˚a att ord kopplas till ord, anledningen till att den inte klarar detta ¨ar f¨or att den enbart beh¨ovde kunna s¨oka i stora textm¨angder tidigare. Lucene d¨aremot har denna funktionalitet och d¨arf¨or anv¨andes denna.

Lucene ¨ar v¨aldigt enkelt och har ett v¨aldigt tydligt API1, vilket gjorde att det gick betydligt snabbare att implementera autocomplete-funktionaliteten ¨an om en s¨okmotor skulle byggts fr˚an grunden. Autocomplete fungerar s˚a pass bra att den skulle kunna

(41)

implementeras n¨astan p˚a en g˚ang, anledningen till detta ¨ar f¨or att den testats med www.blocket.se:s alla annonser redan och ger d˚a svar inom 0-100ms, vilket ¨ar en till-fredsst¨allande tid enligt B Locket AB.

4.2

Framtida arbete

Vad kan g¨oras f¨or att f¨orb¨attra de unders¨okta delarna i framtiden? Autocomplete

Om annonsm¨angden blir st¨orre kan denna funktionalitet beh¨ova f˚a sig en omstrukturering, ifall effektiviteten skulle p˚averkas avsev¨art vill s¨aga.

Eftersom autocomplete m˚aste vara en snabb tj¨anst ¨ar det bra om datam¨angden h˚alls nere, anledningen till kravet p˚a snabbhet ¨ar f¨or att det ska vara ett hj¨alpmedel och inte ett st¨orande moment i anv¨andarens upplevelse av bes¨oket p˚a www.blocket.se. Detta skulle till exempel kunna g¨oras genom att indexeringen sker enligt huvudkategori eller till och med kategori. P˚a s˚a vis minskar datam¨angden, men samtidigt visas enbart funk-tionaliteten n¨ar huvudkategori eller som i andra fallet kategori valts, vilket kan vara en nackdel.

F¨or att undvika autocomplete f¨orst nere i kategoril¨age beh¨over applikationen testas med st¨orre datam¨angd och se ifall det p˚averkar snabbheten avsev¨art eller om det fortfa-rande r¨or sig inom ungef¨ar samma tidsram. Dessutom m˚aste denna funktionalitet testas p˚a www.blocket.se f¨or att f˚a reda p˚a om det kommer att fungera i verkligheten, med verkligheten menas att flera personer anv¨ander tj¨ansten samtidigt.

Efter diskussion med personal p˚a B Locket AB kom en l¨osning fram som inneb¨ar att sorteringen sker p˚a l¨an, kategori och underkategori. Om detta sen blir den slutgiltiga versionen kommer autocomplete att finnas i alla steg och dessutom ge mer relevanta f¨orslag till anv¨andaren.

R¨attstavning

(42)

me-ning delas upp i ordpar och rangordnas efter hur m˚anga g˚anger varje ord eller ordpar f¨orekommer. Detta g¨or att s¨arskrivningar undviks till st¨orsta delen ¨aven om det finns en liten risk f¨or att det kan h¨anda att en s¨arskrivning kommer som f¨orslag ¨and˚a. Detta skulle kunna f¨orb¨attras enbart om algoritmerna som finns idag hanterade s¨arskrivning p˚a andra s¨att. Med andra ord beh¨over det testas nya s¨att att komma runt detta problem. Synonymer

H¨ar m˚aste det g¨oras en ordentlig lista p˚a vilka ord som ¨ar synonymer till vilka f¨or att f˚a s˚a m˚anga tr¨affar som m¨ojligt. Detta skall ocks˚a implementeras i B Locket AB:s nuvarande s¨okmotor, vilket inte gjorts under detta projekt.

Stemming

(43)

Litteraturf¨

orteckning

[1] Ajax, kontrollerad senast 20100104. http://en.wikipedia.org/wiki/Ajax_ (programming).

[2] Allemansr¨atten, kontrollerad senast 20100104. http://www.sverigeturism.se/ smorgasbord/smorgasbord/natrecspo/nature/every.html.

[3] Bloomfilter f¨or r¨attstavning, kontrollerad senast 20100104. http://en.wikipedia. org/wiki/Bloom_filter.

[4] Browser-side-cache, kontrollerad senast 20100104. http://ajaxpatterns.org/ Browser-Side_Cache.

[5] Cache, kontrollerad senast 20100104. http://en.wikipedia.org/wiki/Cache. [6] Extreme programming, the agile method, kontrollerad senast 20100104. http://

www.extremeprogramming.org/.

[7] Hashing, functions and tables, kontrollerad senast 20100104. http://www.itl. nist.gov/div897/sqg/dads/HTML/hash.html.

[8] HTTP och dess specifikationer, kontrollerad senast 20100104. http://www.w3.org/ Protocols/rfc2616/rfc2616.html.

[9] Hunspell, spellchecking, stemming and morphological analysis, kontrollerad senast 20100104. http://hunspell.sourceforge.net/.

[10] Indexering, kontrollerad senast 20100104. http://en.wikipedia.org/wiki/Index_ (search_engine).

[11] Inverted index, kontrollerad senast 20100104. http://www.itl.nist.gov/div897/ sqg/dads/HTML/invertedIndex.html.

(44)

[13] Jaro-winkler, algoritm f¨or avst˚andsm¨atning mellan ord, kontrollerad senast 20100104. http://www.itl.nist.gov/div897/sqg/dads/HTML/jaroWinkler. html, http://en.wikipedia.org/wiki/Jaro-Winkler_distance.

[14] Javascript kontrollerad senast 20100104. http://en.wikipedia.org/wiki/ JavaScript.

[15] jquery autocompletion, kontrollerad senast 20100104. http://plugins.jquery. com/project/auto-complete.

[16] Kth:s spr˚akvetenskapliga avdelning, implementering av en r¨attstavningsalgoritm, kontrollerad senast 20100104. ftp://ftp.nada.kth.se/pub/documents/Theory/ Viggo-Kann/TRITA-NA-9813.pdf.

[17] Lemmatization, kontrollerad senast 20100104. http://www.diegesis.co.uk/ glossary.html#L.

[18] Levenshteins distance algorithm for comparison between strings, kontrollerad senast 20100104. http://en.wikipedia.org/wiki/Levenshtein_distance.

[19] Lucene search engine, kontrollerad senast 20100104. http://lucene.apache.org/ java/docs/.

[20] Lucenes r¨attstavningsimplementation, kontrollerad senast 20100104. http://wiki. apache.org/jakarta-lucene/SpellChecker.

[21] Memcached, ett s¨att att f¨ordela belastningen, kontrollerad senast 20100104. http: //www.danga.com/memcached/.

[22] Morphological analysis, kontrollerad senast 20100104. www.cl.ut.ee/yllitised/ smugri_toolbox_2001.rtf.

[23] Mythes, a method for synonym fetching, kontrollerad senast 20100104. http:// lingucomponent.openoffice.org/thesaurus.html.

[24] N-grams, kontrollerad senast 20100104. http://www.w3.org/TR/ngram-spec/. [25] Open-office, open-source alternative to microsofts office package, kontrollerad senast

20100104. http://www.openoffice.org/.

(45)

[27] Scriptaculous autocompletion, kontrollerad senast 20100104. http://wiki.github. com/madrobby/scriptaculous/ajax-autocompleter.

[28] Snowball stemming, a library for stemmingalgorithms, kontrollerad senast 20100104. http://snowball.tartarus.org/.

[29] Solr search platform, kontrollerad senast 20100104. http://lucene.apache.org/ solr/#intro.

[30] Soundex, kontrollerad senast 20100104. http://www.creativyst.com/Doc/ Articles/SoundEx1/SoundEx1.htm.

[31] Spider in search engines, also called web crawling, kontrollerad senast 20100104. http://en.wikipedia.org/wiki/Web_crawling.

[32] Stemming, kontrollerad senast 20100104. http://people.dsv.su.se/~hercules/ papers/karlgrendalianisjongejan-LREC2008_final.pdf.

[33] Submission-throttling, kontrollerad senast 20100104. http://ajaxpatterns.org/ Submission_Throttling.

[34] S¨okmotorns beskrivning, kontrollerad senast 20100104. http://en.wikipedia.org/ wiki/Web_search_engine.

[35] S¨okstr¨ang, kontrollerad senast 20100104. http://en.wikipedia.org/wiki/Web_ search_query.

[36] Bart Jongejan Jussi Karlgren, Hercules Dalianis. Experiments to investigate the connection between case distribution and topical relevance of search terms in an information retrieval setting, kontrollerad senast 20100104. http://people.dsv. su.se/~hercules/papers/karlgrendalianisjongejan-LREC2008_final.pdf. [37] Johan Carlberger Viggo Kann Rickard Domeij, Ola Knutsson. Granska - ett effektivt

(46)

Bilaga A

Autos.java

Spellchecking code for Lucene/Solr. 1 import j a v a . i o . I OE x ce pt i on ; 2 import j a v a . i o . P r i n t W r i t e r ; 3 4 import j a v a x . s e r v l e t . S e r v l e t E x c e p t i o n ; 5 import j a v a x . s e r v l e t . h t t p . H t t p S e r v l e t ; 6 import j a v a x . s e r v l e t . h t t p . H t t p S e r v l e t R e q u e s t ; 7 import j a v a x . s e r v l e t . h t t p . H t t p S e r v l e t R e s p o n s e ; 8 9 import o r g . apache . s o l r . c l i e n t . s o l r j . S o l r Q u e r y ; 10 import o r g . apache . s o l r . c l i e n t . s o l r j . S o l r S e r v e r E x c e p t i o n ;

11 import o r g . apache . s o l r . c l i e n t . s o l r j . i m p l . CommonsHttpSolrServer ; 12 import o r g . apache . s o l r . c l i e n t . s o l r j . r e s p o n s e . S p e l l C h e c k R e s p o n s e ; 13 import o r g . apache . s o l r . common . params . M o d i f i a b l e S o l r P a r a m s ;

14 15 /∗ ∗

16 ∗ S e r v l e t i m p l e m e n t a t i o n c l a s s Autos 17 ∗ Handles t h e ” Did You Mean : ” r e q u e s t s 18 ∗/

19 public c l a s s Autos extends H t t p S e r v l e t {

20 private s t a t i c f i n a l long s e r i a l V e r s i o n U I D = 1L ; 21

(47)

24 private S t r i n g q u e r y ( S t r i n g q ) { 25 S t r i n g sugg = n u l l ; 26 CommonsHttpSolrServer s e r v e r = n u l l ; 27 28 try { 29 s e r v e r = new CommonsHttpSolrServer ( ” h t t p : / / l o c a l h o s t : 8 9 8 3 / s o l r ” ) ; 30 } catch ( E x c e p t i o n e ) { e . p r i n t S t a c k T r a c e ( ) ; } 31 32 // e s c a p e s p e c i a l c h a r a c t e r s 33 M o d i f i a b l e S o l r P a r a m s params = new M o d i f i a b l e S o l r P a r a m s ( ) ; 34 S o l r Q u e r y q u e r y = new S o l r Q u e r y ( ) ; 35 params . s e t ( ” q t ” , ” / s p e l l ” ) ; 36 params . s e t ( ” s p e l l c h e c k ” , ” t r u e ” ) ; 37 params . s e t ( ” s p e l l c h e c k . onlyMorePopular ” , ” t r u e ” ) ; 38 params . s e t ( ” s p e l l c h e c k . c o l l a t e ” , ” t r u e ” ) ; 39 params . s e t ( ” s p e l l c h e c k . q” , q ) ; 40 q u e r y . add ( params ) ; 41 q u e r y . s e t Q u e r y ( ” ∗ : ∗ ” ) ; 42 43 try { 44 S p e l l C h e c k R e s p o n s e q r = s e r v e r . q u e r y ( q u e r y ) . g e t S p e l l C h e c k R e s p o n s e ( ) ; 45 i f ( q r != n u l l ) { 46 s ugg = q r . g e t C o l l a t e d R e s u l t ( ) ; 47 } 48 } catch ( S o l r S e r v e r E x c e p t i o n e ) { 49 50 } 51 52 return sugg ; 53 } 54

References

Related documents

Detta g¨aller alla tal vars dyadiska utveckling ¨ar ¨andlig; man beh¨over inte kasta fler kast ¨an vad som anges av den position d¨ar sista ettan finns i utvecklingen.. Det betyder

Till exempel fick jag inte med n˚ agot Ljus- och Optikland i f¨ orsta f¨ ors¨ oket, och pilen mot Kosmologi, som ligger utanf¨ or den h¨ ar kartan, borde peka mer upp˚ at,

B˚ ada tv˚ a anv¨ands och ¨ar viktiga i moderna ekonomier, men penningpolitiken anv¨ands f¨or b˚ ada finjustering och grov- styrningen, medan finanspolitiken justeras p˚ a

L˚ at y(t) vara andelen av populationen som ¨ar smittad efter tiden t dygn, r¨aknad fr˚ an uppt¨ack- ten... Observera att ¨amnets koncentration ¨ar samma som m¨angden av

Rutinen som anv¨ands f¨ or att definiera operatorn, kan ha antingen ett eller tv˚ a argument, men eftersom funktionen normalt definieras i samma modul som inneh˚

[r]

Antalet kunder som bes¨ oker de tv˚ a aff¨ arerna en timme kan beskrivas med Poissonf¨ ordelningar.. Det genomsnittliga antalet kunder som bes¨ oker de tv˚ a aff¨ arerna ¨ ar

Vid bed¨ omningen av l¨ osningarna av uppgifterna i del 2 l¨ aggs stor vikt vid hur l¨ osningarna ¨ ar motiverade och redovisade. T¨ ank p˚ a att noga redovisa inf¨ orda