Example #1
0
def semsubj(dbcon=False):
    """Otan kontrastiivista analyysikerrosta varten käyttöön termin semsubj
    (vrt. Leinonen 1985: 15) nesessiivilauseille ja muille vastaaville
    rakenteille, joissa SN-analyysi määrittää infinitiivimuotoisen verbin
    subjektiksi.
    
    Näin TDT:n nsubj ja ... muuttuvat näiden lauseiden osalta kontrastiivisessa
    kerroksessa muotoon semsubj. 
    
    Rakenteen finiittimuotoinen verbi katsotaan SN-jäsennyksen mukaisesti
    juureksi ja infinitiivimuotoinen verbi luetaan infcomp-kategoriaan.

    On huomattava, että TDT-aineistossa myös substantiivin
    määritteet saattavat olla genetiivimuotoisia ja saada nsubj-kategorian. Näitä
    ei kontrastiivisessa jäsennyksessä lueta semsubj-kategoriaan.

    ks. Haverinen 62

    On huomioitava myös tapaukset, joissa ei ole genetiivimuotoista nsubjektia!

    """
    updater = deptypetools.DepTypeUpdater(dbcon, 'fi_conll',
                                          'Create the semsubj category in SN')
    updater.search = makeSearch(database=dbcon.dbname,
                                dbtable='fi_conll',
                                ConditionColumns={
                                    'deprel': ('nsubj', ),
                                    '?feat': '%CASE_Gen%'
                                },
                                headcond={
                                    'column': 'pos',
                                    'values': ('V', )
                                })
    updater.simpleupdate(deprel='semsubj')
Example #2
0
def cdep(dbcon=False):
    """
    Otan kontrastiivisessa analyysikerroksessa soveltaen käyttöön
    TDT-jäsentimen periaatteen jäsentää sivulauseita. Tämä on lähempänä
    perinteistä dependenssiteorian näkemystä (Siewierska 1988: 176) ja
    toisaalta on hyödyksi tietää, että verbi, josta esimerkiksi ajanilmaukset
    riippuvat, on juuri sivulauseen pääverbi. SN-jäsennystä muutetaan siten,
    että sivulauseen pääverbistä tehdään päälauseen dependentti, josta
    sivulauseen aloittava konjunktio riippuu.

    Kontrastiivinen analyysikerros toteutetaan siten, että kaikki alisteisen
    sivulauseen pääsanat luokitellaan cdep-kategoriaan, jolloin niistä käy ilmi,
    että kyseessä on sivulauseen muodostama täydennys tai määrite, muttei sitä,
    minkä tyypin argumentti on kyseessä. Kuvatunlainen kompromissi on väistämätön,
    sillä TDT-analyysi ei anna sivulauseiden suhteesta pääsanaansa yhtä tarkkaa
    informaatiota kuin SN-analyysi ja toisaalta SN-analyysi ei jaottele
    sivulauseita sen mukaan, ovatko ne täydennyksiä vai määritteitä. Tuloksena on
    väljempi yläkäsite, josta käy ilmi se, että kyseessä on sivulauseen muodostama
    argumentti. Tarkempi informaatio ei sinänsä katoa, sillä se on edelleen läsnä
    kielikohtaisissa jäsennyksissä.
    """
    updater = deptypetools.DepTypeUpdater(dbcon, 'fi_conll',
                                          'Create the cdep category in TDT')
    updater.search = makeSearch(
        database=dbcon.dbname,
        dbtable='fi_conll',
        ConditionColumns={'deprel': ('advcl', 'ccomp')})
    updater.simpleupdate(deprel='cdep')
Example #3
0
def obj(dbcon=False):
    """Nimetään uudelleen dobj-kategoria obj:ksi
    
    Tapaukset, joissa sain hänet itkemään -lauseen *hänet* on nsubj
    -------------------------------------------------------------
    (infinitiivistä riippuvat nsubj)
    - nsubj > obj
    
    """

    updater = deptypetools.DepTypeUpdater(
        dbcon, 'fi_conll', 'Create the category of obj in the TDT data')
    #2. Nimeä dobj obj:ksi
    updater.rename('dobj', 'obj')
    #2. Infinitiivien subjektit, jotka voisi luokitella obj
    updater.search = makeSearch(database=dbcon.dbname,
                                dbtable='fi_conll',
                                ConditionColumns={'?feat': '%CASE_Acc%'},
                                headcond={
                                    'column': 'deprel',
                                    'values': ('iccomp', )
                                })
    updater.Update(
        updateType='DependentOfSameAsHead',
        matchdep='obj',
        message='Making subjects of infinitives objects of the finite verb..')
Example #4
0
def nommod(dbcon=False):
    """

    Säilytetään TDT:n nommod- ja nommod-own-kategoriat sellaisinaan
    
    """

    updater = deptypetools.DepTypeUpdater(
        dbcon, 'fi_conll',
        'Create the category of nommod and nommod-own in the TDT data')
    updater.UseOriginals(('nommod', 'nommod_own', 'punct', 'nsubj', 'ROOT'))
Example #5
0
def prtcl(dbcon=False):
    """
    TDT-jäsennyksessä fraasinomaisesti pääverbiinsä liittyvät partikkelit on
    jäsennetty erilliseen prt-kategoriaansa. Myös nämä liitetään osaksi
    kontrastiivisen analyysin prtcl-luokkaa.
    """

    updater = deptypetools.DepTypeUpdater(dbcon, 'fi_conll',
                                          'Create the prtcl category in TDT')
    updater.search = makeSearch(database=dbcon.dbname,
                                dbtable='fi_conll',
                                ConditionColumns={'deprel': ('prt', )})
    updater.simpleupdate(deprel='prtcl')
Example #6
0
def cop(dbcon=False):
    """Suomen kielen kopulallisten nesessiivilauseiden (ks. esimerkki @eeekopula),
    osalta kontrastiivinen jäsennys rakennetaan predikatiivirakenteesta
    poikkeavalla tavalla niin, että kopulan kategoria säilytetään ja niin kopula
    kuin infinitiivimuoto katsotaan lauseen keskeisen nominin dependenteiksi. Tämä
    jäsennystapa sopii yhteen sen kanssa, miten SN-aineistossa usein analysoidaan
    vastaavantyyppisiä rakenteita."""

    updater = deptypetools.DepTypeUpdater(dbcon, 'fi_conll',
                                          'Create the cop category in tdt')
    updater.search = makeSearch(database=dbcon.dbname,
                                dbtable='fi_conll',
                                ConditionColumns={
                                    'deprel': ('cop', ),
                                    'contr_deprel': ('gdep', )
                                })
    updater.simpleupdate(deprel='cop')
Example #7
0
def attr(dbcon=False):
    """Kaikkiin kielen tilanteisiin tarkoitettujen jäsenninten on luonnollisesti pyrittävä mahdollisimman
    suureen tarkkuuteen myös alemman tason dependenssisuhteissa. Tämän vuoksi erilaisia substantiivia tai
    adjektiivia määrittäviä sanoja kuvataan melko monilla alaluokilla. Näitä ovat TDT-jäsennyksessä muun
    muassa luokat amod, det ja quantmod. SN-jäsennyksessä vastaavan tason kategorioita ovat esimerkiksi
    opred, appos, ja utotšn.

    Tämän tutkimuksen kannalta näillä suhteilla ei useinkaan ole suurta merkitystä, sillä oleellista on
    erotella elementtejä, joiden suhteen ajanilmausten sijaintia olisi mielekästä määrittää. Tämän vuoksi
    kontrastiiviseen analyysikerrokseen muodostuu erittäin suuri alempien dependenssitasojen luokka, jota
    merkitään nimityksellä attr."""

    updater = deptypetools.DepTypeUpdater(dbcon, 'fi_conll',
                                          'create the attr category in TDT')
    updater.search = makeSearch(
        database=dbcon.dbname,
        dbtable='fi_conll',
        ConditionColumns={'deprel': ('amod', 'det', 'quantmod', 'poss')})
    updater.simpleupdate(deprel='attr')
Example #8
0
def adpos(dbcon=False):
    """
    Kuten esimerkeistä @parsers1fi--@parsers1ru havaittiin, TDT- ja SN-jäsentimet
    eroavat lähtökohtaisesti siinä, miten adpositiorakenteiden pääsana
    määritellään. Kontrastiivinen jäsennys seuraa tältä osin SN-jäsennyksen
    jäsennystapaa, niin että TDT-tapauksissa riippuvuussuunta käännetään.
    Adpositioluokan nimi on kuitenkin TDT-analyysin mukaisesti *adpos*.
    SN-analyysissa prepositiot analysoidaan omalla luokallaan *предл*. Ongelmia
    aiheuttaa kuitenkin se, että SN-analysoitu aineisto sisältää myös
    adpositiorakenteita, jotka on analysoitu квазиагент-luokkaan.
    """

    updater = deptypetools.DepTypeUpdater(dbcon, 'fi_conll',
                                          'Create the adpos category in TDT')
    #Käännä riippuvuus ja tee entisestä pääsanasta adpos
    updater.search = makeSearch(database=dbcon.dbname,
                                dbtable='fi_conll',
                                ConditionColumns={'deprel': ('adpos', )})
    updater.Update(updateType='DependentBecomesHead',
                   matchdep='head',
                   headdep='adpos')
Example #9
0
def advmod(dbcon=False):
    """ Muokkaan SN-jäsennyksen obst-kategoriaa ja
    TDT-jäsennyksen advmod-kategoriaa siten, että kontrastiiviseen jäsennykseen
    luodaan oma advmod-luokkansa. Tähän luokkaan rajataan SN-jäsennyksestä ne
    obst-kategorian sanat, joiden sanaluokka on adverbi (ja jotka
    automaattisesti ovat myös verbin dependenttejä) ja TDT-jäsennyksestä ne
    advmod-kategorian sanat, jotka ovat verbin dependenttejä.

    *juuri niin* -tapaukset: kun pääsana ei verbi ... attr?
    """

    updater = deptypetools.DepTypeUpdater(
        dbcon, 'fi_conll', 'Create the category of advmod  in the TDT data')
    updater.search = makeSearch(database=dbcon.dbname,
                                dbtable='fi_conll',
                                ConditionColumns={
                                    'deprel': ('advmod', ),
                                    'pos': ('Adv', )
                                },
                                headcond={
                                    'column': 'pos',
                                    'values': ('V', )
                                })
    updater.simpleupdate(deprel='advmod')
Example #10
0
def conj(dbcon=False):
    """
    TDT-jäsennyksessä rinnasteiset elementit merkitään conj-, parataxis- ja cc-kategorioihin.

    Toisin kuin SN-jäsennin, TDT-jäsennin katsoo niin rinnastuskonjunktion (joka
    luokitellaan kategoriaan cc) kuin myöhemmät rinnastettavat elementitkin (conj)
    ensimmäisen rinnastettavan elementin dependenteiksi

    Kontrastiivisessa analyysissa lähdetään TDT-jäsennyksen mukaisesta
    perusajatuksesta siinä, että rinnastetun lauseen pääsana tai myöhempi
    rinnastettu elementti katsotaan ensimmäisen rinnastettavan elementin (eikä
    rinnastuskonjunktion) dependentiksi. Rinnastuskonjunktiot merkitään TDT:n
    tapaan cc-kategorialla, ja kaikki rinnastettavat elementit analysoidaan
    conj-kategoriaan kuuluviksi.

    On vielä huomattava, että SN-jäsennyksessä sotšin-tyyppiä käytetään
    rinnastuskonjunktioiden lisäksi luettelomuotoisissa rinnastustapauksissa myös
    luettelon osien kategorisointiin -- TDT-analyysi luokittelee vastaavat
    tilanteet osaksi conj-kategoriaan, osaksi erilliseen parataxis-kategoriaansa.
    Tässä suhteessa kontrastiivista analyysia yksinkertaistetaan niin, että TDT:n
    parataxis-elementit samoin kuin ne venäjän sotšin-tapaukset, jotka eivät ole
    rinnastuskonjunktioita, luokitellaan conj-kategoriaan.

    """
    updater = deptypetools.DepTypeUpdater(dbcon, 'fi_conll',
                                          'Create the conj category in TDT')
    updater.search = makeSearch(
        database=dbcon.dbname,
        dbtable='fi_conll',
        ConditionColumns={'deprel': ('conj', 'parataxis')})
    updater.simpleupdate(deprel='conj')
    LogNewDeprel('Create the cc category in TDT')
    updater.search = makeSearch(database=dbcon.dbname,
                                dbtable='fi_conll',
                                ConditionColumns={'deprel': ('cc', )})
    updater.simpleupdate(deprel='cc')
Example #11
0
def prdctv(dbcon=False):
    """Tämä tarkoittaa käytännössä sitä, että TDT-jäsennetyn aineiston
    nsubj-cop-tapaukset luokitellaan tavallisiksi nominisubjekteiksi (nsubj) ja

    sekä niiden että predikatiivina olevan sanan pääsanaksi vaihdetaan sana,
    joka alun perin on analysoitu kategorialla cop. Kopulan dependenssityypiksi
    siirretään se tyyppi, johon predikatiivi oli luokiteltu.

    Jää monia nsibj-cop-tapauksia, joiden lauseessa ei ole kopulaa

    Haverinen 32:

    - The basic alternatives for predicatives are nominals 
    (nouns, adjectives, pro- nouns and numerals). 
    
    - Words of these parts-of-speech are required to be in nomi-
    native, partitive or genitive to be accepted as predicatives.

    ongelma: apuverbien ketjut.

    """

    updater = deptypetools.DepTypeUpdater(dbcon, 'fi_conll',
                                          'Create the prdctv category in tdt')
    updater.search = makeSearch(database=dbcon.dbname,
                                dbtable='fi_conll',
                                ConditionColumns={'deprel': ('nsubj-cop', )})
    log('Change nsubj-cop to subj')
    #Change the deprel of nsubj-cop to always be nsubj
    updater.simpleupdate(deprel='nsubj')
    #Update the contrastive layer for nsubj-cop and cop
    nocopula = list()
    contr_heads = list()
    contr_deprels = list()
    for key, matchlist in updater.search.matches.items():
        for match in matchlist:
            try:
                prdctv = match.matchedsentence.words[match.matchedword.head]
                match.matchedword.tokenid
                nsubjcop = match.matchedword
                match.matchedsentence.listDependents(match.matchedword.head)
                cop = False
                for dep in match.matchedsentence.dependentlist:
                    if dep.deprel == 'cop':
                        cop = dep
                if not cop:
                    #If the nsubj-cop's head has no cop as its dependent, look in the entire sentence
                    for key, dep in match.matchedsentence.words.items():
                        if dep.deprel == 'cop':
                            cop = dep
                if cop:
                    #Set the new heads:
                    contr_heads.append({
                        'baseval': nsubjcop.dbid,
                        'changedval': cop.tokenid
                    })
                    contr_heads.append({
                        'baseval': prdctv.dbid,
                        'changedval': cop.tokenid
                    })
                    contr_heads.append({
                        'baseval': cop.dbid,
                        'changedval': prdctv.head
                    })
                    #Set the new deprels:
                    contr_deprels.append({
                        'baseval': prdctv.dbid,
                        'changedval': 'prdctv'
                    })
                    contr_deprels.append({
                        'baseval': cop.dbid,
                        'changedval': prdctv.deprel
                    })
                else:
                    #If no copula at all
                    nocopula.append(str(match.matchedsentence.sentence_id))
            except KeyError:
                log('KeyError')
    updates = [{
        'updatedcolumn': 'contr_deprel',
        'basecolumn': 'id',
        'valuelist': contr_deprels
    }, {
        'updatedcolumn': 'contr_head',
        'basecolumn': 'id',
        'valuelist': contr_heads
    }]
    dbcon.BatchUpdate(table='fi_conll', updates=updates)
    log('This might potentially effect {} database rows.'.format(
        dbcon.cur.rowcount))
    log('Sentences {} contain no copula'.format(','.join(nocopula)))
Example #12
0
def infcomp(dbcon=False):
    """Muokkaan kontrastiivista analyysikerrosta varten SN-analyysiä siten,
    että verbillä ilmaistavat subjektit luokitellaan uudella tunnisteella
    infcomp (tarkemmin ks. kohta x). Tähän kategoriaan luetaan myös kaikki
    infinitiivimuotoiset13 sanat, jotka TDT:ssä on luokiteltu
    lausesubjekteiksi, joko kategoriaan csubj tai csubj-cop.

    Kuten nesessiivilauseiden osalta, tukeudun myös apuverbien kohdalla
    SN-analyysin mukaiseen malliin ja määrittelen kontrastiivisessa
    analyysikerroksessa pääsanaksi apuverbin ja dependentiksi pääverbin. Tästä
    seuraa, että apuverbin dependenssityyppi on joko ROOT tai jokin sivu- tai
    rinnasteisen lauseen pääsanan kategoria, jolloin pääverbille on erikseen
    määriteltävä oma kategoriansa -- tällaiseksi soveltuu edellä SN-aineiston
    infinitiivisubjektien yhteydessä määritelty infcomp-luokka. TDT-analyysin
    kannalta tämä tarkottaa sitä, että kieltoverbien kantama informaatio lauseen
    kielteisyydestä katoaa kontrastiivisesta analyysikerroksesta. Myös TDT:n aux-,
    auxpass- ja SN:n analit-kategoriat poistuvat.


    Kopulat!
    ---------

    *on pakko*-tyyppisissä tapauksissa kopula pitää ehkä jättää kontrastiiviseen tasoon niin kuin
    se on Haverinen 57, esim. 179

    Subjektin pääsana?
    ------------------

    ks. github #22

    Riippuvuusketjut muuttuvat ongelmallisiksi, jos on useampi infinitiiviriippuvuus
    samassa lauseessa!!!
    Mahdollisesti ratkaisua 
    - päivittäessä tarkistaa tämän erikseen
    - tempdeprel-kerros
    - dbid contr_deprel-listassa
    - muita..

    TOISTAISEKSI pidetään pienempi paha, ja annetaan muiden riippuvuuksien edelleen
    olla kiinni PÄÄVERBISSÄ. Tämä on lopulta vertailun mahdollistava ratkaisu, kun SN-
    analyysissa ei useinkaan ole apuverbiä siinä missä se on tdt:ssä


    """

    updater = deptypetools.DepTypeUpdater(
        dbcon, 'fi_conll', 'Create the category of infcomp in the TDT data')
    #1. iccomp- ja xcomp-tapaukset vain nimetään uudelleen infcomp:ksi
    #updater.rename(('iccomp','xcomp'),'infcomp',oldaslist=True)
    #2. neg, aux- ja auxpass-tapauksissa riippuvuussuunta pitää kääntää
    updater.search = makeSearch(
        database=dbcon.dbname,
        dbtable='fi_conll',
        ConditionColumns={'deprel': ('auxpass', 'aux', 'neg')})
    updater.Update(updateType='DependentBecomesHead', headdep='infcomp')
    #3. Infinitiivimuotoiset Csubj-cop ja csubj (haverinen esim. 182)
    updater.updateByQuery(contr_deprel='infcomp',
                          where='deprel IN %(deprel)s AND feat LIKE %(feat)s',
                          valuedict={
                              'deprel': ('csubj-cop', 'csubj'),
                              'feat': '%INF_Inf1'
                          },
                          message='Making csubj-cop and csubj infcomp')