DIGITL KORTKTLOG MED FRITEXTSÖKNING OCH NVÄNDRMEDVERKN Beställare: Uppsala universitetsbibliotek i samarbete med Umeå Universitetsbibliotek (och Göteborgs universitetsbibliotek).
DEVO IT B KRISTIN JÖRG DTUM 2 1 OCR-TOLKNING... 3 2 NY SÖKMOTOR ELSTIC SERCH... 3 2.1 OPTIONELL FÄLT... 3 3 IPC KONFIGURTION... 5 3.1 NY FÄLT I IPC.PROPERTIES... 5 4 ELSTIC SERCH KONFIGURTION... 6 4.1 INSTLLTION... 6 4.2 KONFIGURTION FÖR INTEGRTION MED IPC... 6 4.3 ELSTIC SERCH MPPNING... 8 5 IMPORT... 9 5.1 FILFORMT FÖR INDTFIL... 9 5.2 EXEMPEL PÅ INDTFIL... 10 6 EXPORT... 10 7 SÖKNING I IPC... 11 8 TRÄFFLISTN... 12 9 KTLOGVISNING... 12 10 RÄTTNING V OCR TEXT (NVÄNDRMEDVERKN)... 13 10.1 CPTCH/DMINLOGIN... 13 10.2 RÄTTNINGSFORMULÄR... 14 10.3 RESULTT... 14 10.4 E-POSTMEDDELNDE TILL MODERTOR FÖR GODKÄNNDE... 14 10.5 MLL FÖR E-POSTMEDDELNDE... 15 10.6 MODERERINGSLIST... 15 10.7 MODERERINGS GODKÄNNDE/REFUSERING... 16 10.8 SLÄPP MODERTORLÅS... 16 11 FELRPPORT/MEDDELNDE... 17 11.1 FELRPPORTFORMULÄR... 18 11.2 MEDDELNDEKONFIRMERING... 18 11.3 EPOSTMEDDELNDE TILL DMINISTRTÖREN... 19 11.4 MLL FÖR E-POSTMEDDELNDET... 19 12 SYNKRONISERING MED IPCS INDEX... 19 12.1 KONVERTERING V UTF-8 TILL ISO-8859-1... 19 13 SPRÅKTEXTER... 19 14 SITEMPS... 19 14.1 GENERERDE FILER... 20 14.2 SÖKMOTORPUBLICERING... 20 15 WEBDESIGN OCH W3C-VLIDERING... 21 16 STNDLONE-MODUL... 21
DEVO IT B KRISTIN JÖRG DTUM 3 1 OCR-tolkning Projektet bygger på att de skannade bilderna från katalogen OCR-tolkas för att på så vis ge underlag för fritextsökning på hela katalogen. OCR-tolkningen görs externt från applikationen och resultatet av tolkningen laddas in via en importfunktion i ett webbaserat formulär. 2 Ny sökmotor Elastic Search Sökmotorn baseras på en Open Source-baserad produkt, Elastic Search: http://www.elasticsearch.org/ Elastic Searach i sig bygger på Lucene, en javabaerad sökprogramvarar som har funnits och vidareutvecklats i drygt 10 år. Lucene har ett antal underprojekt knutna till sig där Elastic Search bara är ett. tt det här projektet dock valde Elastic Search beror på att den uppfyller ett antal punkter: Open Source. Enkelt att ta ner källkod, modifiera och vidareutveckla (vilket har skett) Förberedd för klustring. För framtida större indexeringar så står den här tekniken redo för att sättas i drift Förberedd för att kunna köra i molnet (cloud computing) Körs som en egen servertjänst och fungerar i Windows, Linux m.fl. Javabaserad Fungerar som en webservice (RESTful) med protokollet JSON. Mycket enkelt att anropa och sätta upp nya söktjänster runt. Stödjer flera PI-er: o JSON o Java o Groovy Har fler klienter för o Phyton o PHP o Perl o Ruby o Erlang o.net client Mycket enkel att konfigurera och administrera Stödjer dynamisk indexering. Indexera vad som helst och sök i det. Ett mycket aktivt community, och bra support. Mer bakgrundsinfo om Lucene och Elastic Search finns här. http://en.wikipedia.org/wiki/lucene Elastic Search kommer härefter i dokumentet att refereras till som ES. 2.1 Optionella fält IPC har traditionellt stöd för ett fält i sitt index, huvuduppslag. Med introduktionen av ES så ges möjlighet att utöka antalet fält efter behov, exempelvis författare, titel och ISBN. För att utöka fältantalet så behöver detta konfigureras på tre ställen: 1. EsDynamicFields i ipac.properties 2. ES mappningsfil 3. Indatafilen för import (om data ska importeras. Det går att manuellt indexera varje post i redigeringsformuläret inifrån IPC och där fylla i alla värden manuellt). lla dessa gås genom i mer detalj nedan. lla optionella fält som tillkommer blir automatiskt sökbara.
DEVO IT B KRISTIN JÖRG DTUM 4
DEVO IT B KRISTIN JÖRG DTUM 5 3 IPC konfiguration 3.1 Nya fält i ipac.properties Värde Beskrivning Normalvärde EnableFullSearch Kopplar på/av den nya false funktionaliteten EsIndex Namn på indexet ipac EsType Namn på typen (t.ex card katalognamn) EsModeratingIndex Namn på kön med poster att moderera EsDynamicFields Kommaseparerad lista på extra fält EsSortOrder Sorteringsordning i indextext.sorted träfflista (för alfabetisk sortering) EsResultFields Vilka fält som ska visas i indextext träflistan SitemapPingUrls Vilka urlar som anropas för sitemappublicering. Nedanstående sitemapindexfil appendas till urlen. http://www.google.com/webmasters/tools/pin g?sitemap=,http://www.bing.com/webmaster/ ping.aspx?sitemap=,http://search.yahooapis.co m/siteexplorerservice/v1/ping?sitemap=,http:/ /submissions.ask.com/ping?sitemap= SitemapIndexFile Filnamn på den sitemapindex.xml genererade sitemapfilen EmaildminFrom E-postadress för avsändaren för modereringsmeddelandet EmaildminRecipient E-postadress för mottagaren för modereringsmeddelandet
DEVO IT B KRISTIN JÖRG DTUM 6 4 Elastic Search konfiguration 4.1 Installation ES laddas ner och installeras enligt instruktionerna här: http://www.elasticsearch.org/guide/reference/setup/installation.html 4.2 Konfiguration för integration med IPC http://www.elasticsearch.org/guide/reference/setup/configuration.html För att integreras med IPC så finns några inställningar som behöver göras i filen <ES_HOME>/config/elasticsearch.yml. Notera att denna fil måste redigeras i en editor som klarar UTF-8 (exempelvis EditPad Lite): # Cluster Settings cluster: name: escluster # Gateway Settings #gateway: # recover_after_nodes: 1 # recover_after_time: 5m # expected_nodes: 2 # index : analysis : analyzer : mycollation : type : custom tokenizer : keyword filter : [mycollator] entrynalyzer : type: custom tokenizer: standard filter: [standard, lowercase, asciifolding, replacechars] textnalyzer : type: custom tokenizer: standard filter: [standard, lowercase, mystop, snowball_stemming] filter : mycollator : type : icu_collation language : sv_se snowball_stemming: type: snowball language: Swedish asciifolding: type: se.devo.elasticsearch.filter.configurablesciifoldingtokenfilterfactory ignore_chars : åäöåäö replacechars: type: se.devo.elasticsearch.filter.replacechartokenfilterfactory
DEVO IT B KRISTIN JÖRG DTUM 7 char_pairs : [i,j, v,w] mystop: type: stop stopwords: [och,det,att,i,en,jag,hon,som,han,på,den,med,var,sig,för,så,till,är,men,ett,om,hade,de,av,icke,mig,du,henne,då,sin,nu,har,inte,hans,honom,skulle,hennes,där,min,man,ej,vid,ku nde,något,från,ut,när,efter,upp,vi,dem,vara,vad,över,än,dig,kan,sina,här,ha,mot,alla,un der,någon,allt,mycket,sedan,ju,denna,själv,detta,åt,utan,varit,hur,ingen,mitt,ni,bli,blev, oss,din,dessa,några,deras,blir,mina,samma,vilken,er,sådan,vår,blivit,dess,inom,mellan, sådant,varför,varje,vilka,ditt,vem,vilket,sitta,sådana,vart,dina,vars,vårt,våra,ert,era,vilk as] 4.2.1 Förklaringar Cluster name: Det namn som instanser av samma kluster ska ges (för IPCs del räcker normalt en instans, dvs inget kluster. nalyzers är den del som normaliserar indexet (och sökfrågan). För IPC:s konfigureras följande analyzers: mycollation för sortering enligt svensk standard i träfflistan (alfabetisk sortering) entryanalyzer analyzer för huvuduppslaget som förutom standardhantering och lowercasing gör asciifolding vilket är speciell normalisering som tar bort alla diakriter och specialtecken förutom de i åäöåäö. Normaliseringen kör också replacechars vilket kan konfigureras för kataloger där vissa tecken ska hanteras likvärdigt i sökningen. T.ex w=w, i=j etc. textnalyzer analyzern för ocr-texten. Gör en standardfiltrering och lowercasing samt tar bort stoppord, ord som inte har betydelse för sökningen, ex och, att, eller osv. nalyzern gör också en filtrering på stemming, vilket betyder att orden analyseras enligt svensk grammatik och bryts ner till sin grundform. Ex. jobbar indexeras som jobb och matchar jobb, jobbar, jobbade, jobbat etc. Med denna teknik behöver man inte skriva sökordet exakt utan det ger träff ändå.
DEVO IT B KRISTIN JÖRG DTUM 8 4.3 Elastic Search mappning http://www.elasticsearch.org/guide/reference/mapping/ För att ES ska hantera de olika fälten i indexet korrekt behöver den ha en mappningsfil för de fält som ingår. Mappningsfilen läggs i <ES_HOME>/config/mappings/<index>/<type>.json <index> motsvarar värdet EsIndex i ipac.properties (se ovan). <type> motsvarar värdet EsType i ipac.properties (se ovan). Om man har flera kataloger så delar man upp dessa i ES m.h.a. type-värdet. Exempel: <ES_HOME>/config/mappings/ipac/alfen.json: { "alfen" : { "properties" : { "imageid" : {"type" : "integer"}, "text" : {"type" : "string", "analyzer" : "textnalyzer"}, indextext" : { "type" : "multi_field", "fields" : { "indextext" : {"type" : "string", analyzer" : "entrynalyzer", "boost" : "2.0" }, "sorted" : {"type" : "string", "analyzer" : "mycollation"} } } } } } Fältens typ och analyzers definieras under properties imageid bildnummer text - ocr texten, speciell analyzer = textnalyzer indextext definieras som multi_field för att dels tolkas som indextext med analyzern entrynalyzer, dels kunna sorteras alfabetiskt med mycollation Genom att konfigurera boost så kan man ge olika fält olika ranking. 4.3.1 Extra mappningar för optionella fält Notera att ES har en default-mappning för fält som tillkommer i indexet baserat på en tolkning av dess innehåll. Dvs fält som ser ut som siffror tolkas som integer, datumfält som datum osv. Och om man definierar en default-analyzer i elasticsearch.yml kommer denna användas för dessa fält helt utan att mappning behövs. Om man dock vill ha lite kontroll på vad som händer och hur fälten ska hanteras i ES så rekommenderas att man skapar en explicit mappning för dom. Exempel för tillägg av några extrafält: { "alfen" : { "properties" : { (existerande fält) "author" : {"type" : "string", "no_analyze"}, "title" : {"type" : "string", "analyzer" : "textnalyzer"}, "isbn" : {"type" : "string, no_analyze } }
DEVO IT B KRISTIN JÖRG DTUM 9 } } 5 Import Laddning av OCR-tolkat data görs via importfunktionen. Om det finns en existerande indexering i databasen (MySQL) så kommer de indexpunkterna att injiceras i ES-indexet och skriva över de eventuella huvudupslag som anges i indatafilen. Detta p.g.a att det kan antas att den manuella indexering som tidigare gjorts håller en högre kvalitet än vad en automatisk ocr-tolkning kan ge. Finns dock inget index i databasen så används det som angivits i indatafilen. Mapp med ocr-textfiler. Rotmappen där alla filer ligger. Måste vara åtkomligt från servern. Indatafilnamn. Semikolonseparerad fil med indexeringsinformation. Kan lämnas tom om ocrfilerna följer ipacs standardkatalogstruktur för bilddatat. Skriv över. Raderar gamla indexet och skriver om från nytt. Uppdatera. Om indatafilen beskriver en delmängd av indexet så kan man uppdatera denna del. Kan användas i kombination med kryssrutorna för val av indatafält att läsa (se nedan). Läs indextext, Läs OCR-fil + optionella fält. Här listas alla indatafält som kryssrutor och man kan filtrera bort data som man ev. inte vill läsa in i indexet. Encoding. Vilken encoding indatafilen har. UTF-8 eller ISO-8859-1 stöds. Internt i ES hanteras dock fullt UTF-8. 5.1 Filformat för indatafil Indatafilen är semikolonseparerad och har följande format: <bildnr>;<ocrtext-filnamn>;[<huvuduppslag>][;<opt-1>;<opt-2> <opt-n>] Bildnr är bildens nummer och motsvarar imageid i IPC Ocrtext-filnamn är filnamnet för ocrtexten t.ex 00000103.txt. Filnamnet tolkas relativt rotmappen som anges i formuläret. Huvuduppslag är den extraherade del av texten som utgör huvuduppslag. Den här texten, om den anges används i indexlistan i IPC (vid visningsläget) och har en högre ranking i sökningen än övrig text och träffar på texten hamnar högre i träfflistan. Huvuduppslaget kan utelämnas.
DEVO IT B KRISTIN JÖRG DTUM 10 Opt-1, opn-2...opt-n är optionella dynamiska fält för att utöka indexet med nya sökbara fält. Se mer ovan om optionella fält. 5.2 Exempel på indatafil 00000001;00000001.txt;albeck Jensen, Erik 00000002;00000002.txt;Jensen, Erik albaeck 00000003;00000003.txt; 00000004;00000004.txt; 00000005;00000005.txt;anrud, Hans 00000006;00000006.txt; 00000007;00000007.txt; 00000008;00000008.txt; 00000009;00000009.txt; 00000010;00000010.txt;arhus 6 Export Data exporteras till samma filstruktur som IPCs bilddata, dvs textfilerna namnges med 8-ställigt nollutfyllt nummer efter bildnummret. Varje bildfil läggs i en mapp med tre teckens nollutfyllt nummer. En mapp per tusental bilder. llt enligt IPCs konfiguration i ipac.properties. Utdatafil skapas i csv-format. llt läggs i en utpekad rotmapp. Encoding är alltid UTF-8. Ex: datafil.csv 000/00000001.txt 000/00000002.txt 001/00001000.txt 001/00001001.txt... Exporten kan användas för backup av katalogens indexering
DEVO IT B KRISTIN JÖRG DTUM 11 7 Sökning i IPC Sökformuläret ser exakt likadant oavsett om man konfigurerat för fritextsökningen med Elastic Search eller ej. Här kan man söka på allt innehåll i alla indexet via sökrutan. Sökspråket som går att använda i ES bygger på Lucene och den fulla dokumentationen om alla möjligheter hittas här: http://lucene.apache.org/java/3_0_3/queryparsersyntax.html Några exempel: strindberg - hittar allt om olika Strindberg strindberg august - hittar träffar Strindberg och eller ugust ingår. Träffar där både Strindberg och ugust ingår får dock en högre ranking och listas tidigare i listan +strindberg +august - hittar bara träffar där Strindberg och ugust båda är med i samma dokument strindberg +august -pjäs - Hittar träffar som nämner ugust Strindberg, men sorterar bort träffar som hadlar om. Wildcards stöds. "* " matchar noll eller flera tecken, "?" matchar 0 eller 1 tecken.
DEVO IT B KRISTIN JÖRG DTUM 12 8 Träfflistan Träfflistan listar alla träffar som Elastic Search har hittat. Listan innehåller följande delar: Bildnr. Huvuduppslag. OCR text. Kataloglapp. Länk in i katalogvisningen på vald träff Huvuduppslaget för träffen Den highlightade delen av dokumentet som innehåller träffen Förhandsvisning av kataloglappen när man hovrar musen över länken. Optionella fält visas också i tabellen om fältet EsResultFields i ipac.properties inkluderar dessa. 9 Katalogvisning Då fritextsökningsfunktionaliteten aktiverats får IPC följande utseende. Det som tillkommer är ramen längst ner till vänster i fönstret. Där visas OCR-texten tillsammans med en länk till ett formulär för rättning. Vid bläddring mellan kataloglapparna uppdateras ocr-textfönstret löpande.
DEVO IT B KRISTIN JÖRG DTUM 13 10 Rättning av OCR text (användarmedverkan) 10.1 Captcha/dminlogin Vid klick på länken för rättning tas man först till ett formulär som beskriver vad som kommer att göras och användaren får en Captcha-fråga att fylla i. Detta är för att förhindra automatiserade spam-botar o.dyl att komma vidare. Som alternativ kan de adminstratörer som har dminkonto klicka på den länken och logga in. nvändare som redan en gång under sessionen svarat på Captchan eller är inloggade som administratörer går direkt till redigeringsformuläret och skippar alltså över denna sida.
DEVO IT B KRISTIN JÖRG DTUM 14 10.2 Rättningsformulär Här får användaren rätta texten och klicka Spara. 10.3 Resultat Denna sida visas för vanliga användare. Rättningen lagras i en speciell kö för godkännade (moderering) av administratör innan rättningen godkänns. För inloggade adminsitratörer så behövs ej godkännade utan ändringen aktiveras omedelbart. 10.4 E-postmeddelande till moderator för godkännade Ett e-postmeddelande skickas till EmaildminRecipient (ipac.properties) med följande innehåll: OCR text för moderering
DEVO IT B KRISTIN JÖRG DTUM 15 Följande text har senast rättats av en användare Bild Nr: 00000870 IndexText: micis, Edmondo de Nr 2645 Inkom 1976-05-13 micis, Edmondo de Il Homanzo d'un Maestro. Milano 1890. Det finns nu 1 träff som kräver moderators godkännade för publicering 10.5 Mall för e-postmeddelande Mallen för e-postmeddelandet bygger på Velocity och definieras under <tomcat>/<katalog>/ ipac/web-inf/classes Filerna heter (en för englelska och en för svenska): moderator_en.vm moderator_sv_se.vm 10.6 Modereringslista Moderatorn får hämta den första i kön (fler kan ha tillkommit). Klicka på Hämta nästa så hämtas nästa post och låses för redigering kopplat till sessionen.
DEVO IT B KRISTIN JÖRG DTUM 16 10.7 Modererings godkännade/refusering dministratören kan här redigera och rätta vidare. När allt ser bra ut så klicka på ett av valen: Klicka godkänn (och hämta nästa i listan Refusera. Rättningen kastas bort. Så snart rättningen är godkänd aktiveras den i indexet och blir sökbar. 10.8 Släpp moderatorlås Om en adminsitratör har påbörjat men inte avslutat en moderering under en session så kommer det låset inte att släppas (förrän vid nästa IPC-omstart). För att omedelbart släppa alla lås och därmed göra kön tillgänglig igen så finn det en funktion under IPC s adminmeny. Klicka på länken Släpp moderatorlås. I nedanstående fall fanns inga lås:
DEVO IT B KRISTIN JÖRG DTUM 17 11 Felrapport/meddelande Ett formulär för att skicka en felrapport eller meddelande till administratören finns tillgängligt från katalogvisningsläget i övre högra hörnet:
DEVO IT B KRISTIN JÖRG DTUM 18 11.1 Felrapportformulär Meddelandetyp. En av: o Meddelande o Felrapport Epostadress. Valfri e-postadress om användaren vill bli kontaktad Meddelande. Texten som användaren skriver. 11.2 Meddelandekonfirmering
DEVO IT B KRISTIN JÖRG DTUM 19 11.3 Epostmeddelande till administratören IPC meddelande vsändare: ocrtest@devo.se Meddelandetyp: message Jag vill testa meddelandefunktionen Om användaren angett en e-postadress så sätts denna automatiskt som reply-to i mailet och det är då bara att klicka på Svara-knappen i epostverktyget. 11.4 Mall för e-postmeddelandet Mallen för e-postmeddelandet bygger på Velocity och definieras under <tomcat>/<katalog>/ ipac/web-inf/classes Filerna heter (en för englelska och en för svenska): message_en.vm message_sv_se.vm 12 Synkronisering med IPCs index Då ES kommer att hålla ett index parallellt med det index som IPC (eventuellt) haft så hålls dessa synkroniserade m.a.p huvuduppslaget och indexlistan. Så snart ett huvuduppslag rättats så blir det också parallellt inlagt i IPC s databas. 12.1 Konvertering av UTF-8 till ISO-8859-1 Då ES index klarar fullt UTF-8 och IPC inte gör det (idag) så konverteras alla index från UTF-8 till ISO-8859-1 encoding via en SCII folding algorithm som försöker hitta motsvarigheter i ISOencodingen om möjligt. Om ingen match hittas kastas tecknet. 13 Språktexter lla texter i de nya gränsnitten i fritextsökningsfunktionen hämtas från två filer: fullsearch.properties fullsearch.sv_se.properties Den ena (sv_se) innehåller svenska tecken och den andra innehåller engelska. När man byter språkinställning i IPC så byts också aktuell localeinställning och därmed en av dessa två filer synkroniserat. 14 Sitemaps Funktionen skapar sitemapindex och sitemapfiler filer enligt Googles standard. Funktionen bygger tt värde från ipac.properties: SitemapIndexFile.
DEVO IT B KRISTIN JÖRG DTUM 20 SitemapIndexFile är filnamnet för den fil som skapas i rotmappen under webapplikationen. Default filnamn är sitemapindex.xml. OBS! Funktionen är inte beroende av fritextsökningsfunktionen utan fungerar även i gamla IPC. lla kort som har en indexering, oavsett om det är i databasen eller ocr-tolkat tas med i den genererade sitemapfilen. Det är lämpligt att köra funktionen om nya indexeringar skett. Har man dock OCR-texter inläst för samtliga kort är detta onödigt. ktivera funktionen genom att klicka på länken Generera sitemaps i adminsidan för IPC. 14.1 Genererade filer Då en sitemapfil max får innehålla 50.000 länkar så skapas en sitemapindex fil som i sin tur pekar ut underliggande filer med max 50.000 länkar per styck. Robots.txt med länk till den sitemapindexfil som genererats Sitemapindex.xml med hänvisning till sitemap-1.xml sitemap-n.xml Sitemap-1.xml. 14.2 Sökmotorpublicering En automatisk sökmotorpublicering till de i SiteMapPingUrls (se ipac.properties ovan) angivna listan med URL:ar görs. För varje http-anrop listas responsen. För de länkar som gett felmedelande kan man klicka på länken för att närmare undersöka vad som sker. För att göra anrop till fler sökmotorer som stödjer sitemaps är det bara att konfigurera detta i SiteMapPingUrls värdet i ipac.properties. Det är en kolonseparerad lista.
DEVO IT B KRISTIN JÖRG DTUM 21 Man kan nämna att Yahoos tjänst för sitemaps inom en snar framtid kommer att integreras med Bing (Yahoo är uppköpta av Microsoft). 15 Webdesign och W3C-validering lla nya webbsidor enligt det här projektet är skapade med XHTML 1.0 och CSS. Sidorna använder en s.k decoratorfunktion som klär sidorna efter en mall som definieras i WEB-INF/decorators.xml Den filen väljer ut en mall från /decorators-mappen att klä sidan i. M.a.o ligger all styling i den decoratorfilen och vill man ändra hur layouten ser ut behöver man då bara göra det där. lla sidor som skapats i projektet uppfyller W3C-standard till fullo. 16 Standalone-modul Fritextsökningsfunktionen med sökformulär, träfflista, visning av dokumentet, användarmedverkansfunktioner och sitemapgenerering finns tillgängligt som en fristående webapplikation utan koppling till IPC. Dock för att den ska vara användbar behöver den anpassas och integreras med det material som den ska indexera och söka i.