Nyhetssök – hur gör man?

Efter att ha jämfört resultat från några nyhetssökmotorer så kan jag konstatera att Frisim inte är perfekt. Det hade jag heller inte väntat mig.

Hur bra en nyhetssökmotor fungerar beror mestadels på hur bra kvalitet det är på materialet som görs sökbart. Om det ”slinker med” mycket sidoinformation utöver artikeltexter, såsom menyer och puffar för andra artiklar, så blir resultatet dåligt.

När jag programmerade den första versionen av Frisim så hade svenska nyhetssajter inte RSS. Tanken med Frisim var då att ”göra lite bättre” än att bara hämta in nyhetsrubriker. Grundkonstruktionen var då att läsa nyhetssajternas förstasida, och scanna av den efter länkar till nya artiklar. Så fungerar Frisim, i princip, fortfarande. Skillnaden är att jag nu även använder RSS för att lite effektivare ska kunna hitta nya artiklar, men annars fungerar det likadant nu som då. När en ny nyhetsarikelsida har hittats så läses sidan in och HTML-koden analyseras. Ett antal generella ”regler” används för att hitta rubrik, ingress och brödtext. Dessa regler är samma för alla nyhetssajter – ingen anpassning eller konfigurering görs för olika sajter. Med denna typ av system är det svårt att få det perfekt. Det finns helt enkelt inte tillräckligt många parametrar att trimma in för att det ska fungera perfekt på alla sajter.

Alternativet är att skapa en ”style-fil” till varje nyhetssajt. Traditionella ”screen scrapers” som t.ex. Web-Harvest kan användas för sånt. Fördelen med ett sådant verktyg är att du relativt enkelt kan skapa XPATH-uttryck (eller regular expressions) som du kan använda för att hitta rubrik, ingress och brödtext. Nackdelen är att du måste göra denna anpassning för varje nyhetssajt du tänkt att indexera, samt att systemet blir väldigt känsligt för förändringar i nyhetssajternas HTML och CSS-kod. Du behöver följdaktligen lägger ner betydligt mer tid på att underhålla din nyhetssökmotor med denna typ av lösning.

Om jag får gissa så är Aitellus nyhetssök på Eniro baserat på regular expressions. Eniros söktjänst missar väldigt lite text i de flesta av de artiklar som de har hittat, och innehåller inte mycket sidoinformation/”skräp”. Googles (svenska) nyhetssök är gissningsvis inte baserat på regular expressions. Jag drar den slutsatsen på resultat som du får om du idag söker på t.ex. ”Avsluta när som” då du hittar bl.a. denna artikel. Svenska Google News är gissningsvis nära underhållsfri. Frisim har liknande problem som Google News.

Jag bestämde mig för att prova Web-Harvest, för att se hur komplicerat det är att istället använda ett system baserat på regular expressions. Web-Harvest känns relativt enkelt. Web-Harvest är skrivet i Java, något som innebär att det bygger på gedigna rutiner för XPATH, rensa HTML, köra script osv. Systemet har ett fint GUI som du kan använda för att skapa och prova ut dina script. När scriptet väl är utprovat är det färdigt att exekvera från din egna Java-kod. Jag satte ihop ett script för att ta fram titel, ingress och brödtext från en DN-artikel och lite Java-kod för att köra scriptet. Min kod är baserad på den exempel-kod som finns till verktyget och denna bloggpost. Vilken data som extraheras bestäms med hjälp av dessa rader kod:


let $title := data($doc//h1)
let $preamble := data($doc//div[@class="preamble"])
let $text := data($doc//div[@id="article-paragraphs"])

Här framgår det tydligt att så fort DN gör en smärre justering av sin HTML-kod, så är det inte troligt att det fungerar längre. Det går visserligen att skriva dessa rader något lite ”smartare”, men räcker troligen inte för att fortsätta att fungera efter t.ex. en uppdatering av DNs publicersingssystem. Men det fungerar bra just nu. Det är inte supersnabbt, men det är inte Frisims nuvarande system heller.

  1. [...] är det en motaktion mot att synas i t ex Google News eller hos andra aggregatorer som Frisim eller Nyhetsportalen. Stampen, annars framsynta och kända för sina fina uppköp, har meddelat att [...]

  2. [...] Nyhetssök – hur gör man? [...]