[Start]   Projekt Runebergs Wiki - vi hjälps åt att reda ut begreppen!
Sökning
Wiki | Senaste nytt | Inställningar | Sök: | NE | Susning.nu | Wikipedia | Google
Mer och bättre sökfunktioner står högt på Projekt Runebergs önskelista?.

Ny författarsökning

En ny författarsökning finns på http://runeberg.org/search.pl - Hjälp gärna till att komma med förslag och kommentarer. Hjälp även till att fylla på sidan med sökhjälp.

Wiki

Här på Projekt Runebergs wiki finns sökrutan i menylisten som använder den titel- och fulltextsökning som ingår i UseModWiki 0.92. Dessutom finns datumsökning enligt samma princip som används på http://susning.nu/

Wikin har en Senaste nytt-lista, som bygger på en loggfil över gjorda ändringar. Men denna är inte sökbar. Man kan inte hitta vem som gjort mest och liknande. Susning.nu lider av samma brist.

Fulltextsökning

Projekt Runebergs webbplats har ingen fulltextsökfunktion, och har aldrig haft. Användarna har klagat på bristen i alla tider. Dock är webbplatsen bra indexerad av Google och andra sökmotorer. En orsak till att man inte vill använda Google är att den söker i hela HTML-sidan inklusive sidhuvud och -fot. Genom att enbart söka i källtexterna kan man få en smartare sökfunktion. Textmassan i Projekt Runeberg (ja, hur stor är den egentligen?) är för stor för linjärsökning. Indexerad sökning kan skapas med exempelvis agrep eller MySQL.

SearchPage.pike

En sökfunktion för boktitlar och författarpresentationer skapades 1997 av Stefan Larsson inom PUM-projektet Gädda. Den är skriven i Pike och heter SearchPage.pike. Den erbjuder strukturerad sökning på födelse- och dödsår, nationalitet m.m. Det som de flesta vill ha är emellertid en enkel sökfunktion på klartext. Från början var formuläret uppdelat med olika rutor för för- och efternamn och yrke, men detta är numera sammanslaget till en gemensam ruta för dessa fält.

Antalet rader källkoden ser ut så här:

     790 SearchPage.pike        (ligger i /lysator/runeberg/texter/TOPLEVEL/)
     276 AuthorList.pike        (ligger i /lysator/runeberg/systemet/)
     262 PMake.pike
     242 Config.pike
     184 AuthorInfoPage.pike
     150 TitleList.pike
     148 HTMLHead.pike
     146 TitleListPage.pike
     143 Author.pike
     138 Title.pike
      77 HTMLFoot.pike
      31 GetAllShortNames.pike
      30 GetPreviousShortName.pike
      30 GetNextShortName.pike
      28 Deumlaut.pike.pmod

En förhållandevis stor andel av koden i SearchPage.pike går ut på att dela upp resultatlistor i flera sidor. Tyvärr sparas inte resultatlistan mellan sidvisningarna, utan sökningen görs om, varefter en portion av den visas upp. UseModWiki 0.92 delar aldrig upp resultatlistor i flera sidor, utan presenterar hela listan direkt, även om den blir lång. Libris Websök delar upp sidor i flera sidor, och sparar sökresultatet mellan sidvisningarna, så att man kan bläddra till nästa och föregående sökträff och träffsida.

Själva fulltextsökningen ligger i AuthorList.matchAnyName() och TitleList.matchName(). Den förra använder ett internt index över hela ord som byggs upp i minnet vid varje omstart av scriptet. Både indexet och sökuttrycket passeras först genom funktionen deumlaut(). Den senare använder Pikes Simulate.map_regexp(). Titelsökningen använder alltså inte deumlaut().

Deumlaut

Funktion deumlaut() är en mild form av soundex. Den tar bort prickar och ringar från bokstäver och förkortar en del dubblerade konsonanter så att man får träffar även om man skriver in sökuttrycket från ett engelskt tangentbord:

         Eftersökt ord:   Lagerlöf    ->    Lagerlof
                                  deumlaut()          -> likhet, en sökträff!
  Inskrivet sökuttryck:   Lagerloef   ->    Lagerlof

Implementerat i Perl-kod skulle funktionen se ut så här (ej testad):

  sub deumlaut {
    my ($str) = @_;
    $str =~ tr "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ",
               "AAAAAAACEEEEIIIIDNOOOOOOUUUUYTsaaaaaaaceeeeiiiidnoooooouuuuyty";
    $str =~ s/'//g;
    $str =~ s/[ !\"#$%&()*+,-.\/:;<=>?@\[\\\]^_`{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²´µ¶·¸¹º»¼½¾+¿]+/ /g;
    $str = lc($str);
    $str =~ s/([aeiouy])e/$1/g;
    $str =~ s/ph/f/g;
    $str =~ s/w/v/g;
    $str =~ s/q[uv]/kv/g;
    $str =~ s/ss/s/g;
    $str =~ s/th/t/g;
    return $str;
  }

Artikelsökning

Arbetet med Nordisk familjebok och andra stora faksimilutgåvor aktualiserar behovet av en sökfunktion för artikelrubriker, dvs texten i Articles.lst. Detta är en sorts fulltextsökning och bör fungera likadant som sökningen efter författarnamn och boktitlar.

För artikelsökningen blir det aktuellt att få rätt sökträffar även vid gammalstavning. Inte speciellt många lär söka efter "jernvägar" eller det "förlofvade landet".

Textmängden i Nordisk familjeboks Articles.lst är idag 1,5 megabyte och kan växa upp till 6 megabytes när arbetet är klart. Det är fullt realistiskt att använda MySQL för den datamängden.

Generell sökruta

En generell sökruta på varje sida skulle kunna länkas till en sökning, som ger träffar i samliga källor (sk crossfile). Ett exempel på träfflista (man bör nog visa ca 10 träffar per rubrik):

 Du sökte på "norden", och fick följande träffar

  --Verk--
  Nordens flora
  Nordiska språk
  Nordisk familjebok
  (visa fler ...) 

  --Författare--
  Arthur Nordén

  --Artiklar--
  Norden (Nordisk familjebok)
  Nordens befolkning (Svensk rikskalender)
  Aurthur Nordén (Svensk biografisk handbok)
  (visa fler ...)

  --Fulltext--
  Europa (Nordisk familjebok)
  Resmål (Svenska familjejournalen)
  Shakespeare (Nordic authors)
  (visa fler ...)

  ...

Se exempel på http://www.byggtorget.se/ (testa våra infobaser)


Wiki | Senaste nytt | Inställningar | Sök: | NE | Susning.nu | Wikipedia | Google
Redigera den här sidan | Visa andra versioner | runeberg.org drivs av Projekt Runeberg
Senast ändrad 26 mars 2005 5:42 (skillnad)

Valid HTML 4.0!