Korpin edistynyt haku

Korp-korpushakuliittymän edistyneessä haussa hakuehtona on CQP-kyselylauseke. (CQP (Corpus Query Protocol) on Korpin pohjana olevan Corpus Workbenchin kyselykieli.) CQP-kyselyillä voi hakea korpuksista asioita, joita ei pysty hakemaan Korpin yksinkertaisella tai laajennetulla haulla, kuten dependenssisuhteita.

CQP-kyselykielen ominaisuuksia kuvaa laajemmin CQP-tutoriaali. Korpin laajennetussa voi kuitenkin käyttää vain yksittäisiä CQP-hakulausekkeita, ei hakutuloksia erikseen käsitteleviä CQP-komentoja. Korpissa CQP-lausekkeen lopussa ei myöskään ole puolipistettä.

Yksinkertaisessa ja laajennetussa haussa aktiivisina olevien kyselyjen CQP-lausekkeet näkyvät kyselylausekkeen syötekentän yläpuolella, ja ne voi kopioida syötekenttään muokattaviksi. Korp-ikkunan oikeassa ylänurkassa olevasta Hakuhistoria-valintalistasta voi valita myös jonkin aiemman haun, jolloin sen CQP-lauseke tulee syötekenttään, ja Korp tekee haun uudelleen.

Jos CQP-kyselylausekkeessa on syntaksivirhe, Korp valitettavasti ilmoittaa vain ”tapahtui virhe” kertomatta sen tarkemmin, millainen virhe oli kyseessä.

Saneiden yleiset attribuutit

CQP-kyselyt viittaavat saneiden (tokenien) piirteisiin eli attribuutteihin niiden sisäisillä nimillä, jotka eivät muuten näy Korpissa. (Korpissa näkyvät attribuuttien nimien luonnolliskieliset nimitykset.) Keskeisten attribuuttien nimet ovat samat kaikissa korpuksissa, mutta annotoimattomista korpuksista luonnollisesti puuttuvat annotaatioon liittyvät attribuutit.

Yleisten attribuuttien nimet ja merkitykset:

nimi merkitys
word sananmuoto (pintamuoto)
lemma sanan perusmuoto
lemmacomp sanan perusmuoto, johon on merkitty yhdyssanan osien rajat (TDT-annotoiduissa korpuksissa |, muuten #) (ei kaikissa annotoiduissakaan korpuksissa)
pos sanaluokka
msd morfologinen analyysi (morfosyntaktinen kuvaus)
ref sanan järjestysnumero virkkeen sisällä
dephead pääsanan järjestysnumero virkkeen sisällä
deprel dependenssirelaatio suhteessa pääsanaan

Näiden lisäksi yksittäisissä korpuksissa saneilla voi olla muitakin attribuutteja.

Attribuuttien arvoissa on enemmän vaihtelua mm. sen mukaan, miten (millä työkalulla) korpus on annotoitu. Seuraavilla sivuilla on kuvattu joidenkin korpusten käyttämät sanaluokka- ja dependenssirelaatiokoodit:

CQP:n perusrakenteita

Yksittäisten saneiden hakuehdot (attribuuttirajoitteet)

CQP-kyselyn perusosasia ovat yksittäisen saneiden (tokenien) hakuehdot eli attribuuttirajoitteet. Saneen hakuehdot ovat (yleensä) hakasulkeiden sisällä, ja niillä määritellään, millaisia arvoja saneen attribuuteilla täytyy olla, jotta ne täsmäisivät hakuehtoon. Jos hakuehto koskee vain sananmuotoa (attribuutti word), sen voi kirjoittaa suoraan lainausmerkkien sisään, ilman hakasulkeita tai attribuutin nimeä.

Esimerkkejä:

CQP-lauseke merkitys
"kieli" sanat (sananmuodot) ”kieli”
[lemma="kieli"] saneet, joiden perusmuoto on ”kieli”
[pos="N"] saneet, joiden sanaluokkakoodi on ”N” (substantiivi)

Yksittäisen saneen hakuehto voi koostua useista eri attribuuttirajoitteista, jotka yhdistetään loogisilla operaatioilla & (konjunktio, ja), | (disjunktio, tai), ! (negaatio, ei) ja -> (implikaatio). Attribuuttirajoitteita voi ryhmitellä sulkeilla. Vertailuoperaationa voi käyttää yhtäsuuruuden = lisäksi erisuuruutta !=.

Esimerkkejä:

CQP-lauseke merkitys
[lemma="kuusi" & pos="N"] saneet, joiden perusmuoto on ”kuusi” ja sanaluokkakoodi ”N”
[lemma="kieli" & !(deprel="subj" | deprel="obj")] saneet, joiden perusmuoto on ”kieli” ja dependenssirelaatio on muu kuin subjekti tai objekti
[lemma="kieli" & word!=lemma] saneet, joiden perusmuoto on ”kieli” ja joiden sananmuoto on eri kuin perusmuoto.

Vertailuoperaation kummallakin puolella voi viitata saneen attribuutin arvoon, kuten edellä.

Säännölliset lausekkeet

Hakuehdossa lainausmerkkien sisällä olevat osat ovat säännöllisiä lausekkeita, joissa voi käyttää yleisiä säännöllisten lausekkeiden rakenteita. Esim.
"kiel[it].*" löytää kaikki sanat, jotka alkavat ”kieli” tai ”kielt”, ja [lemma="suur.+"] löytää sanat, joiden perusmuoto alkaa ”suur”, jota seuraa vähintään yksi kirjain.

Säännöllisissä lausekkeissa voi käyttää seuraavia rakenteita:

rakenne kuvaus esimerkkiejä
kirjaimet ja numerot vastaavat itseään
. mikä tahansa yksi merkki
[…] merkkijoukko: mikä tahansa yksi hakasulkeiden sisällä oleva merkki [aeiouyäö] täsmää yhteen suomen vokaaliin, [a-hw-z] merkkeihin a:sta h:hon ja w:stä z:aan
[^…] merkkijoukon komplementti: mikä tahansa yksi merkki paitsi hakasulkeiden sisällä olevassa listassa lueteltu [^abcw-z]
RS peräkkäisyys: säännölliseen lausekkeeseen R täsmäävää merkkijonoa seuraa säännölliseen lausekkeeseen S täsmäävä merkkijono [a-zåäö][0-9] täsmää pienaakkoseen ja sitä seuraavaan numeroon
(…) ryhmittely
R* toisto nolla tai useampia kertoja; R voi olla yksittäinen merkki, merkkijoukko tai sulkeilla ryhmitelty säännöllinen lauseke a.* täsmää kaikkiin a:lla alkaviin merkkijonoihin, a(bc)* merkkijonoihin a, abc, abcbc, abcbcbc, …
R+ toisto yhden tai useampia kertoja hy+vä täsmää merkkijonoihin hyvä, hyyvä, hyyyvä, …
R{n} toisto täsmälleen n kertaa
R{m,n} toisto mn kertaa
R? valinnaisuus (toisto nolla tai yksi kertaa) samai?staa täsmää merkkijonoihin samastaa ja samaistaa
R|S vaihtoehdot: joko R:ään tai S:ään täsmäävä merkkijono tuoda|viedä täsmää merkkijonoon tuoda tai viedä, (luesk|kirjoit|kats)ella merkkijonoon lueskella, kirjoitella tai katsella
\c suojaus: suojaa erikoismerkin c niin, että lauseke täsmää siihen kirjaimellisesti \. täsmää vain pisteeseen

Monisanaisten ilmausten hakeminen ja sanetason säännölliset lausekkeet

Yksinkertaisimmillaan monisanaisia ilmauksia haetaan CQP-kyselyllä, jossa yksittäisten saneiden hakuehdot on kirjoitettu peräkkäin välilyönneillä erotettuina:

CQP-lauseke merkitys
"mistä" "syystä" peräkkäiset sananmuodot ”mistä”, ”syystä”
"mistä" [pos!="N"] sananmuoto ”mistä”, jota seuraava sana ei ole substantiivi
[pos="A" & deprel="attr"] [pos!="N"] attribuuttina toimiva adjektiivi, jota seuraava sana ei ole substantiivi

Yhtä (yleensä hakasulkeiden sisällä olevaa) yksittäisen saneen hakuehtoa voi ajatella yhtenä Korpin laajennetun haun ”laatikkona”, jossa voi määritellä useita eri attribuuttiehtoja. Kuten laajennetun haun laatikoita voi yhdistellä peräkkäin hakemaan monisanaista ilmausta, myös CQP-kyselyssä saneiden hakuehtoja voi liittää peräkkäin. CQP-kyselyissä on kuitenkin mahdollista käyttää ryhmittelyjä, jotka eivät ole mahdollisia Korpin laajennetussa haussa.

Korpissa monisanaiset CQP-kyselyt kohdistuvat aina yhden virkkeen sisälle. Hakutuloksessa osumana näkyy koko hakuehtoon täsmäävä sanejono.

Sanetasolla voi käyttää myös osaa säännöllisten lausekkeiden operaatioista. Perusyksikköinä ovat yksittäisten saneiden hakuehdot. Käytettävissä olevat operaatiot ovat toisto-operaatiot ?, *, +, {n} ja {m,n}; vaihtoehtoisuus |; sekä ryhmittely sulkeilla. Lisäksi tyhjät hakasulkeet [] viittaavat mihin tahansa saneeseen, eli se muistuttaa merkkitason säännöllisten lausekkeiden pistemerkintään.

Esimerkkejä:

CQP-lauseke merkitys
[lemma="maailma"] []* [lemma="kieli"] sanan ”maailma” jokin muoto, jota seuraa sanan ”kieli” jokin muoto, niin että välissä voi olla nolla tai useampia sanoja
("siksi" | "sen" "vuoksi") [deprel!="subj"]{1,5} [deprel="main"] ”siksi” tai ”sen vuoksi”, jota seuraa 1–5 ei-subjektia ja niiden jälkeen pääverbi

Dependenssien haku

Dependenssisuhteiden hakemisessa voidaan haluta esim. etsiä rakenteet, joissa tietyn saneen pääsanana on tietty toinen sane. Olennaisia attribuutteja ovat erityisesti ref (sanan numero virkkeessä) ja dephead (sanan pääsanan numero) sekä deprel (dependenssirelaatio).

Dependenssisuhteiden hakemisessa tarvitaan erityisesti CQP-kyselykielen ominaisuuksia, joilla hakuehdoissa voi vertailla eri saneiden attribuutteja keskenään. Jotta saneisiin pystyy viittaamaan, ne täytyy nimiöidä liittämällä lisäämällä saneen hakuehdon eteen nimiö (label) kaksoispisteellä erotettuna, esim. a:[deprel="subj"]. Nimiöidyn saneen attribuuttien arvoihin voi viitata muiden saneiden hakuehdoissa muodossa nimiö.attribuutti, esim. [dephead=a.ref].

Esimerkkejä:

CQP-lauseke merkitys
a:[deprel="main"] []* [lemma="kieli" & deprel="subj" & dephead=a.ref] sana ”kieli”, joka on edellä olevan a-nimiöidyn pääverbin subjekti
a:[deprel="attr"] []* [deprel="subj" & ref=a.dephead] subjekti ja sen etumääre (a-nimiöity), joiden välissä voi olla nolla tai useampia sanoja
a:[deprel="subj"] b:[dephead=a.ref] c:[dephead=b.ref] [dephead=c.ref] subjekti ja sitä seuraava kolmen määritesaneen ketju (kunkin pääsana on edellinen sana)

Näissäkin tapauksissa hakutuloksessa osumana näkyy koko hakuehtoon täsmäävä sanejono.

Huomaa myös, että CQP-kyselyissä saneiden hakuehtojen järjestys määrää hakuosuman saneiden järjestyksen. Jos esim. haluaa etsiä verbin ja sen subjektin niiden keskinäisestä järjestyksestä riippumatta, täytyy joko tehdä kaksi erillistä hakua, joissa toisessa subjekti edeltää verbiä ja toisessa verbi subjektia, tai yhdistää nämä lausekkeet sanetason |-operaattorilla.

Saneiden hakuehdoissa voi viitata vain edellä olleisiin nimiöityihin saneisiin. Jäljempänä tuleviin saneisiin viittaaminen edellyttää globaalin rajoitteen käyttämistä. Globaali rajoite tulee hakuehdon loppuun kaksoiskaksoispisteen jälkeen, ja siinä voi viitata nimiöityjen saneiden attribuutteihin.

Esimerkiksi:

CQP-lauseke merkitys
s:[lemma="jäsen" & deprel="subj"] []* v:[pos="V" & deprel="main"] []* o:[lemma="tuki" & deprel="obj"] :: s.dephead = v.ref & o.dephead = v.ref subjekti ”jäsen” (s), jota seuraa (mahdollisesti muiden sanojen jälkeen) pääverbi (v), jota seuraa (mahdollisesti muiden sanojen jälkeen) objekti ”tuki” (o)

Myös aiemmat esimerkit voi esittää vaihtoehtoisesti globaalien rajoitteiden avulla, esim.

a:[deprel="subj"] b:[] c:[] d:[] :: b.dephead=a.ref & c.dephead=b.ref & d.dephead=c.ref

tuottaa saman tuloksen kuin

a:[deprel="subj"] b:[dephead=a.ref] c:[dephead=b.ref] [dephead=c.ref]

Muita esimerkkejä globaalien rajoitteiden käytöstä

Yllä mainittujen globaalien rajoitteiden avulla voi hakea myös esimerkiksi rakenteita, joissa sama sana esiintyy useita kertoja, mutta sana voi olla mikä tahansa. Esimerkiksi:

CQP-lauseke merkitys
a:[] "ja" b:[] :: a.word=b.word ja-sanan kummallakin puolella on sama sana (sananmuoto)
a:[lemma!="olla"] b:[] :: a.lemma=b.lemma & a.word!=b.word peräkkäin on saman sanan (joka ei ole olla) kaksi eri sananmuotoa
a:[word!="[-.,:;()]"] []* b:[] []* c:[] :: a.word=b.word & b.word=c.word virkkeessä esiintyy sama sananmuoto (ei välimerkki) kolme kertaa tai useammin (varoitus: tämä haku on hyvin hidas eikä välttämättä tuota tuloksia etenkään suurista korpuksista)
Hae Kielipankki-portaalista:
Kuukauden tutkija: Eliisa Uotila

 

Yhteystiedot

Kielipankin tekninen ylläpito:
kielipankki (ät) csc.fi
p. 09 4572001

Aineistoihin ja muuhun sisältöön liittyvät asiat:
fin-clarin (ät) helsinki.fi
p. 029 4140599 / 029 4129317