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.