YLE Kirjasto -tietopalvelu on kaikessa hiljaisuudessa julkaissut artikkeliviitetietokantansa sisällön avoimena datana. Tietokanta sisältää yli 65500 viitettä pääasiassa kotimaisista aikakauslehdistä. Latasin Excel-muodossa olevan datasetin ja uteliaisuuttani vilkaisin, mitä tietoja artikkeleista on tallennettu tietokantaan. Huomasin, että viitetietokannan Asiasanat-kenttään on tallennettu runsaasti henkilöiden nimiä; oletettavasti niiden henkilöiden, joita artikkeli on käsitellyt. Tästä sain ajatuksen tutkailla tietokannan avulla, miltä suomalainen mediatodellisuus näyttää aikakauslehtiartikkeileiden viitteiden valossa. Keistä koostuu se henkilökaarti, joka nauttii toimittajien suosiosta vuodesta toiseen?

Ensitöikseni muunsin aineiston Excel-muodosta standardiin CSV-taulukkomuotoon ja latasin tiedon BaseX XML-tietokantaan. BaseX osaa ladata suoraan CSV-muotoisia tiedostoja.

Artikkiliviitteiden asiasanat on tallennettu puolipistein erotettuna yhteen kenttään suuraakkosin kirjoitettuna. Saadakseni poimittua muiden metatietojen joukosta henkilönimet, minun tuli kirjoitella XQuery-skripti joka erottaa henkilönimet ja muuntaa nimet noudattamaan normaaleja oikeinkirjoitussääntöjä. Alla oleva skripti on toteutukseltaan karkea, sillä se tunnistaa henkilönimet asiasanan sisältämän välilyönnin perusteella. Tämän seurauksena mukaan tulee myös muita kaksiosaisia asiasanoja. Tämä ei kuitenkaan haittaa tietokannan sisällön käsittelyä, sillä virheelliset tiedot voi seuloa pois myöhemmässä vaiheessa.

import module namespace functx = "http://www.functx.com"; 
for $record in //record
let $subjects:= tokenize(fn:normalize-space($record/Asiasanat), '; ')
for $subject in $subjects
    let $fullname_reversed:=$subject[contains(., ' ')]
    let $fullname_tokenized:=tokenize(lower-case($fullname_reversed), ' ')
    let $name:= <name>{string-join((functx:capitalize-first($fullname_tokenized[2]),functx:capitalize-first($fullname_tokenized[1])), ' ')}</name>
    let $to_print:= 
    if(string-length($name)>3)
    then <name>{data($name)}</name>
    else ()
return if (not(empty($to_print))) then
insert node $to_print into $record/persons
else()

Skripti täydentää artikkeliviitetietokannan sisältöä persons-kenttään tallennettavilla henkilötiedoilla. Seuraavaksi nämä tiedot tulee ryhmitellä henkilöiden mukaisesti, siten että kunkin henkilön alle kootaan tiedot vuosista, joina kyseinen henkilö on mainittu artikkeliviitessä.

<mentions_in_press>{
for $record in //record
for $person in $record/persons/name

group by $person
return <press_mention><fullname>{$person}</fullname><year>{$record/Vuosi}</year></press_mention>
}</mentions_in_press>

Tämän työvaiheen jälkeen tiedot tulee koostaa vielä kerran, siten että toistuvat vuosiluvut poistetaan ja korvataan kunkin vuosiluvun kohtaan tallennettavalla toistuvuustiedolla.

<press_mentions_in_year>{
for $press_mention in //press_mention
let $years:=distinct-values($press_mention/year/Vuosi)
let $counts:= for $year in $years
              let $count:=count($press_mention/year/Vuosi[.=data($year)])
              order by $year
              return <year count='{$count}'>{$year}</year>
return <press_mention_per_year>
          <name>{$press_mention/fullname}</name>{
          for $count in $counts
            return $count
      }</press_mention_per_year>
    }</press_mentions_in_year>

Viimein kasassa on XML-tietokanta, josta voidaan tehdä suhteellisen helposti erilaisia henkilöihin liittyviä kyselyitä. Tietokannan sisältö siivottuna noin 5000 rivin tienoille muista kuin henkilötiedoista löytyy Githubista. Ajattelin, että tämä saattaisi olla jollekulle mielenkiintoinen XQuery-harjoitteluaineisto :) Myös skriptit löytyvät samasta paikasta.

On oletettavaa, että henkilömainintojen useus riippuu siitä, minkä tyyppisistä lehdistä lehtitietokannan viitteet ovat peräisin. Seuraavista lehdistä tietokanta sisältää yli tuhat viitettä:

Lehti Viitteiden lukumäärä
Apu 10860
Seura 10434
Anna 5867
Me 4810
Hymy 4771
Katso 3587
Spiegel 3318
Eeva 2727
Ilta-Sanomat Plus 2377
Stern 1974
Helsingin Sanomat kuukausiliite 1381
Gloria 1333
City 1237
Se-lehti 1072

Mutta nyt asiaan, henkilömainintoihin.

Eniten mainintoja vuodessa on prinsessa Dianalla, 47 kappaletta vuonna 1997.

Eniten vuosittaisia mainintoja lehtien palstalla on Katri Helenalla. Hänet on mainittu kaikkiaan 37 vuoden aikana. Katri Helenalla mainintoja on eniten vuonna 1993, 13 kappaletta.

Kahdeksan henkilöä ovat paistatelleet vähintään 30 vuotena lehtien palstoilla:

Nimi Ensimmäinen maininta Viimeisin maininta
Esko Salminen 1961 2012
Jörn Donner 1966 2012
Katri Helena 1966 2012
Tapani Kansa 1968 2011
Paula Koivuniemi 1969 2012
Marion Rung 1970 2012
Kaari Utrio 1976 2011
Riitta Väisänen 1976 2012

Kun tarkastellaan vähintään 25 eri vuotena mainittuja henkilöitä -- poislukien edellä mainitut kahdeksan henkilöä -- joukko on jo selvästi suurempi. Ensimmäisen maininnan mukaisessa järjestyksessä:

Nimi Ensimmäinen maininta
Pirkko Mannola 1960
Lenita Airisto 1966
Tamara Lund 1967
Urho Kekkonen 1967
Vesa-Matti Loiri 1968
Ilkka Lipsanen 1968
Marjatta Leppänen 1969
Arja Saijonmaa 1969
Anita Hirvonen 1969
Mirja Pyykkö 1969
Åke Lindman 1970
Sinikka Sokka 1970
Aira Samulin 1970
Erkki Liikanen 1970
Ritva Oksanen 1971
Teija Sopanen 1974
Anne Pohtamo 1976
Armi Aavikko 1977
Matti Nykänen 1982
Anna-Leena Härkönen 1983
Karita Mattila 1983
Satu Silvo 1984
Hannele Lauri 1986

Otetaan lopuksi vielä tarkasteluun ikuisen mäkikotkan, kaimani Matin seikkailut julkisuudessa. Lehtiartikkelimainintojen mukaan järjestestettynä Matin vilkkaimmat vuodet ovat olleet:

Mainintoja Vuodet
9 1994
8 1998
7 1996 ja 2004
6 2010
5 1989, 1995 ja 2005
4 1987, 1988, 1999, 200, 2003, 2006, 2008, 2012
3 1993, 2002, 2011
2 1990, 1991, 2007
1 1982, 1983, 1984, 1992, 1997, 2001, 2009

Nyt kun artikkeliviitetietokanta on XML-muodossa, täytynee ottaa se myös uudemman kerran tarkasteluun. Tämän kokemuksen perusteella tietokannasta saa yllättävän vähällä vaivalla irti yksityiskohtia, jotka ovat tavallisesti kätkeytyneetä tietokannan kokonaisuuteen.