R-ohjelmointi.org

Tilastotieteellistä ohjelmointia R-kielellä

Lauseenjäsennyksestä udpipe-paketilla

Tuokiokuva: Koulussa, pulpetissa. Otsasuoni pullistuu. On taas lauseenjäsennystä.

Ajatuskin nostattaa kylmiä väreitä. Onneksi aikuisena saa olla laiska.

R:n paketilla udpipe lauseenjäsenten tunnistaminen nimittäin onnistuu melko helposti. Asennetaan ja ladataan ensin udpipe -paketti. Tämän jälkeen ladataan vielä kielimalli:

library(udpipe)
dl <- udpipe_download_model(language = "finnish")

Tämän jälkeen analysoidaan teksti. Seuraavassa sitaatissa on seitsemän substantiivia ja adjektiivia. Katsotaanpa löytääkö R ne kaikki.

Jos tekstissä on ”erikoismerkkejä”, on teksti ensin muutettava UTF-8 -muotoon esimerkiksi iconv() -funktiolla.

# Lainaus Välkky-oppikirjasta 5. luokalle (Sanoma Pro; Anu Haviala, Merja Kalm, Minna Katajamäki, Marjo Siter, Mari Vepsäläinen; 2017)
txt <- c("Minun salainen ystäväni on taitava piirtäjä. Hän osaa piirtää hienoja ihmisiä ja eläimiä. Näkisittepä, kun hän piirtää sarjakuvia. Ne ovat värikkäitä ja hauskoja. Hänen uusimmassa työssään on upeat värit.")
txt_utf8 <- iconv(txt, to="UTF8")

Kun teksti on oikeassa merkistökoodauksessa, voidaan siitä tunnistaa lauseenjäsenet:

res <- as.data.frame(udpipe_annotate(udmodel_finnish, x = txt_utf8))

Tuloksena syntyvän taulukon res sarakkeessa upos on tunnistettujen lauseenjäsenten koodit. Kutakin tekstissä ollutta sanaa vastaa taulukossa yksi rivi:

  doc_id paragraph_id sentence_id                                     sentence token_id    token    lemma
1   doc1            1           1 Minun salainen ystäväni on taitava piirtäjä.        1    Minun     minä
 
  upos xpos                                                           feats head_token_id   dep_rel deps
1 PRON Pron                      Case=Gen|Number=Sing|Person=1|PronType=Prs             3 nmod:poss <NA>

Esimerkiksi sana ”minun” on pronomini (PRON) (upos-sarake) ja sen perusmuoto on minä (lemma-sarake).

Tarkistetaan lauseenjäsenten lukumäärät. Substantiiveja ja adjektiiveja pitäisi siis olla kumpiakin seitsemän:

table(res$upos)
 
  ADJ   ADV   AUX CCONJ  NOUN  PRON PUNCT SCONJ  VERB 
    7     1     3     2     7     5     6     1     3

Taulukon mukaan sitaatista on tosiaan tunnistettu seitsemän adjektiivia (ADJ) ja substantiivia (NOUN).

Yllättävän näppärää. Laiskuudellakin on toisinaan puolensa!


Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

Category