Example #1
0
 def Parconc(self):
     """The actual concordancer"""
     if self.testSettings():
         if self.searchcommitted:
             self.conditionset.ResetConditions()
         self.conditionset.AddConditions()
         parallelon = False
         if self.isparallel == 'yes':
             parallelon = True
     # addheadcond = input('Press enter to move on, h to add conditions concerning the head of the matching word')
     # if addheadcond == 'h':
     #     self.conditionset.AddConditions(headcond=True)
         if parallelon:
             self.search = makeSearch(
                 database=Db.con.dbname,
                 dbtable=Db.searched_table,
                 ConditionColumns=self.conditionset.condcols,
                 headcond=self.conditionset.headcols,
                 isparallel=parallelon)
         else:
             self.search = makeSearch(
                 database=Db.con.dbname,
                 dbtable=Db.searched_table,
                 ConditionColumns=self.conditionset.condcols,
                 headcond=self.conditionset.headcols,
                 isparallel=parallelon,
                 monoling=True)
         printResults(self.search)
         self.searchcommitted = True
Example #2
0
def agent(dbcon=False):
    """
     """

    LogNewDeprel('Create the agent category in SN')
    thisSearch = makeSearch(database=dbcon.dbname, dbtable = 'ru_conll', ConditionColumns={'deprel':('агент',)})
    simpleupdate(thisSearch, dbcon, deprel='agent',dbtable='ru_conll')
Example #3
0
def rel(dbcon=False):
    """
    Relatiivilauseiden tapauksessa SN-jäsennin ja TDT-jäsennin eroavat toisistaan
    poikkeuksellisen paljon. Syynä on TDT-jäsennyksen monikerroksisuus:
    TDT-analysoidussa aineistossa relatiivipronominit saavat ikään kuin kaksi
    dependenssianalyysia. Ensimmäisessä kerroksessa relatiivipronominit tulkitaan 
    relatiivilauseen sisäisesti, jolloin ne voidaan luokitella mihin tahansa
    kategoriaan, mikä niille lauseessa kuuluisi. Toisessa kerroksessa -- joka jää
    voimaan, kun aineisto on ajettu jäsentimen läpi -- relatiivipronominit
    analysoidaan *rel*-luokkaan kuuluviksi [@haverinen2013tdt, 30--31]. SN-jäsennin
    ei tee vastaavaa eroa, vaan käyttää suoraan niitä kategorioita, jotka
    TDT-jäsennyksessä kuuluvat ensimmäiseen, lopputuloksen ulkopuolelle jäävään
    kerrokseen.

    Analyysin kannalta SN-jäsentimen kaltainen yksikerroksinen lopputulos
    vaikuttaisi intuitiivisesti mielekkäämmältä: yksittäiset lauseet ovat
    vertailukelpoisempia, kun ei tehdä eroa sen suhteen, onko kyseessä
    relatiivilause, vai jokin muu lausetyyppi. Teknisesti on kuitenkin haastavaa
    muuttaa TDT:n rel-tyypiksi analysoituja elementtejä takaisin niiden ensimmäisen
    kerroksen mukaisiksi dependenssityypeiksi. Huomattavasti yksinkertaisempaa on
    muuttaa SN-analyysia: relatiivipronominien dependenssityyppi muutetaan
    muotoon *rel* riippumatta siitä, mikä se on alkuperäisen jäsennyksen mukaisesti.

    """

    LogNewDeprel('Create the rel category in SN')
    thisSearch = makeSearch(database=dbcon.dbname, dbtable = 'ru_conll', ConditionColumns={'lemma':('который','чьей','' )})
    simpleupdate(thisSearch, dbcon, deprel='agent',dbtable='ru_conll')
Example #4
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 #5
0
def semsubj(dbcon=False):
    """Otan käyttöön termin semsubj nesessiivilauseille ja muille vastaaville rakenteille, joissa SN-analyysi
    määrittää infinitiivimuotoisen verbin subjektiksi. Näin TDT:n nsubj ja SN:n
    2-kompl (1-kompl!) ja dat-subj muuttuvat (näiden lauseiden osalta) kontrastiivisessa
    kerroksessa muotoon semsubj.
    
    Rakenteen finiittimuotoinen verbi katsotaan
    SN-jäsennyksen mukaisesti juureksi ja infinitiivimuotoinen verbi luetaan infcomp-kategoriaan.
    
    Muutan kuitenkin SN-jäsennystä TDT-jäsennyksen mallin mukaiseksi siinä,
    että semsubj-kategorialla analysoitu sanamuoto katsotaan infinitiivimuodon
    eikä apuverbin dependentiksi. 
    
    HUOM!
    - verbi on joskus muu kuin predik (1-kompl,razjasnit)
    - semsubj-kandidaatti voi olla predik!
    - Lisäksi infinitiivitäydennys puuttuu joskus kokonaan (мне надо к нему)
    """

    LogNewDeprel('Create the class of SemSubj in SN ')
    featset = Featset()
    thisSearch = makeSearch(database=dbcon.dbname,dbtable='ru_conll',  ConditionColumns={'deprel':('1-компл', '2-компл','дат-субъект')})
    updated = 0
    #Check out whether there is a 'predik' or infinitival 1-kompl depending on the verbal head
    for key, matchlist in thisSearch.matches.items():
        for match in matchlist:
            match.matchedsentence.listDependents(match.matchedword.head)
            for codependent in match.matchedsentence.dependentlist:
                #If there is an infinitival codependent marked as predik or 1-kompl AND the nominal complement is in dative:
                if (codependent.deprel in ('предик','1-компл') and codependent.feat in featset.inf) and (match.matchedword.feat in featset.NounDat or match.matchedword.feat in featset.PronDat):
                    dbcon.query('UPDATE ru_conll SET contr_head = %(contrhead)s, contr_deprel = %(contrdep)s WHERE id = %(matchid)s',{'contrhead':codependent.tokenid,'contrdep':'semsubj','matchid':match.matchedword.dbid})
                    updated += 1
    log('Updated {} items in the db'.format(updated))
Example #6
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 #7
0
def cdep(dbcon=False):
    """
    Sivulauseet SN-aineistossa:
    
    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ä.
    """

    LogNewDeprel('Create the cdep and the sc categories in SN')
    thisSearch = makeSearch(database=dbcon.dbname, dbtable = 'ru_conll', ConditionColumns={'deprel':('подч-союзн',)})
    updated = 0
    for key, matchlist in thisSearch.matches.items():
        for match in matchlist:
            try:
                mhead = match.matchedsentence.words[match.matchedword.head]
                dbcon.query('UPDATE ru_conll SET contr_head = %(contrhead)s, contr_deprel = %(contrdep)s WHERE id = %(matchid)s',{'contrhead':match.matchedword.tokenid,'contrdep':'sc','matchid':mhead.dbid})
                dbcon.query('UPDATE ru_conll SET contr_head = %(contrhead)s, contr_deprel = %(contrdep)s WHERE id = %(matchid)s',{'contrhead':mhead.head,'contrdep':'cdep','matchid':match.matchedword.dbid})
                updated += 1
            except KeyError:
                log('KeyError  with word {}, sentence {}'.format(match.matchedword.token,match.matchedsentence.sentence_id))
    log('Updated {} items in the db'.format(updated))
Example #8
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 #9
0
def nommod_own(dbcon=False):
    """"Create the category of nommod_own in SN
    NEEDS ADJUSTMENTS, Something's probably being left out 
    ------------------------------
    """
    featset = Featset()
    LogNewDeprel('Create the category of nommod_own in the SN data')
    thisSearch = makeSearch(database=dbcon.dbname,dbtable='ru_conll', ConditionColumns={'token':('у',),'deprel':('1-компл',)}, headcond = {'column':'lemma','values':('быть','есть', 'бывать', 'нет','мало','много')})
    simpleupdate(thisSearch, dbcon, deprel='nommod-own',dbtable='ru_conll')
Example #10
0
def prdctv(dbcon=False):
    """Koska ajanilmauksen sijainnin määrittelyn kannalta olisi hyödyllistä erottaa predikatiivit muista
    verbin täydennyksistä, pyrin kontrastiivisessa analyysitasossa tarkentamaan SN-jäsennyksen prisvjaz-
    kategoriaa. Tämä tapahtuu erottamalla omaksi prdctv-luokakseen sellaiset prisvjaz-kategorian sanat,
    jotka eivät ole prepositioita. Prepositioilla ilmaistavat prisvjaz-dependentit puolestaan liitetään edellä
    määriteltyyn nommod-kategoriaan."""

    LogNewDeprel('Create the prdctv category in SN')
    thisSearch = makeSearch(database=dbcon.dbname, dbtable = 'ru_conll', ConditionColumns={'deprel':('присвяз',), '!pos':('S',)})
    simpleupdate(thisSearch,dbcon,deprel='prdctv',dbtable='ru_conll')
Example #11
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ä.
    """

    LogNewDeprel('Create the advmod category in sn')
    thisSearch = makeSearch(database=dbcon.dbname, dbtable='ru_conll', ConditionColumns={'deprel':('обст',),'pos':('R',)}, headcond={'column':'pos','values': ('V',)})
    simpleupdate(thisSearch,dbcon,deprel='advmod',dbtable='ru_conll')
Example #12
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 #13
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.
    """

    LogNewDeprel('Create the adpos category in SN')
    thisSearch = makeSearch(database=dbcon.dbname, dbtable = 'ru_conll', ConditionColumns={'deprel':('предл',)})
    simpleupdate(thisSearch, dbcon, deprel='adpos',dbtable='ru_conll')
Example #14
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 #15
0
def prtcl(dbcon=False):
    """
    SN-analyysissä kieltopartikkelit on
    luokiteltu kategoriaan ogranitš, johon kuuluvat myös käytännössä kaikki muut partikkelit konditionaalin
    12ilmaisevaa by-partikkelia lukuun ottamatta. Ogranitš-luokka siirretään sellaisenaan kontrastiiviseen
    analyysitasoon ja nimetään uudelleen tunnisteella prtcl. Tähän luokkaan yhdistetään myös alun
    perin analit-kategoriaan luokitellut by-partikkelit

    Partikkelit SN-datassa voivat olla:
    предик сент-предик 1-компл неакт-компл колич-огран сент-соч обст предл аппоз релят подч-союзн ROOT разъяснит опред эксплет вспом композ пролепт атриб оп-опред сравнит вводн соч-союзн кратн квазиагент аналит соотнос 2-компл ном-аппоз огранич сочин примыкат 3-компл присвяз сравн-союзн 
    """

    LogNewDeprel('Create the prtcl category in SN')
    thisSearch = makeSearch(database=dbcon.dbname, dbtable = 'ru_conll', ConditionColumns={'deprel':('огранич','аналит'), 'pos':('Q',)})
    simpleupdate(thisSearch, dbcon, deprel='prtcl',dbtable='ru_conll')
Example #16
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."""

    #kvaziagent pitää vielä miettiä!
    LogNewDeprel('create the attr category in sn')
    thisSearch = makeSearch(database=dbcon.dbname, dbtable='ru_conll', ConditionColumns={'deprel':('опред', 'квазиагент', 'атриб', 'аппоз', 'разъяснит', 'количест', 'сравн-союзн', 'сравнит', 'вспом', 'соотнос', 'колич-вспом', 'электив', 'оп-опред', 'уточн', 'колич-огран', 'аппрокс-колич', 'кратн', 'нум-аппоз', 'эллипт', 'распред', 'композ')}, headcond = {'column':'pos','values':('a','n','p')})
    simpleupdate(thisSearch,dbcon,deprel='attr',dbtable='ru_conll')
Example #17
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 #18
0
def nommod(dbcon=False):
    """
    Kun muut luokat analysoitu, loput verbin täydennykset ja määritteet tähän luokkaan.
    
    TDT- ja SN-jäsennysten erilaiset periaatteelliset lähtökohdat näkyvät siinä, että SN-jäsennin luokittelee
    omaan obst-kategoriaansa elementit, jotka määrittävät verbiä tai muuta pääsanaa adverbiaalin tavoin.
    Näin esimerkiksi virkkeen 29 notšju saa luokakseen obst, mutta virkkeen 30 yönä tulee määritellyksi
    edelleen nommod-luokkaan.
    
    Ne prisvjaz-luokan elementit, jotka muodostetaan prepositioiden kautta, liitetään tähän.
    """

    featset = Featset()
    LogNewDeprel('Create the nommod category in sn')
    deprels = ('1-компл', '2-компл', '3-компл', '4-компл', '5-компл','обст','присвяз')
    thisSearch = makeSearch(database=dbcon.dbname, dbtable='ru_conll', ConditionColumns={'deprel':deprels,'contr_deprel':('gdep',)})
    simpleupdate(thisSearch,dbcon,deprel='nommod',dbtable='ru_conll')
Example #19
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 #20
0
def infcomp(dbcon=False):
    """Muokkaan kontrastiivista analyysikerrosta varten SN-analyysiä siten, että
    kaikki infinitiivit, jotka eivät ole lauseen pääsanan asemassa, 
    luokitellaan infcomp-kategoriaan
    (mukaanlukien verbillä ilmaistavat subjektit)

    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
    """

    featset = Featset()
    LogNewDeprel('Create the infcomp category in SN')
    thisSearch = makeSearch(database=dbcon.dbname,dbtable='ru_conll',  ConditionColumns={'deprel':('предик','1-компл','2-компл','аналит'),'pos':('V',),'feat':featset.inf})
    simpleupdate(thisSearch, dbcon, deprel='infcomp',dbtable='ru_conll')
Example #21
0
def conj(dbcon=False):
    """Rinnasteisten elementtien osalta SN-jäsennys käyttää kolmea eri luokkaa: sotš-sojuzn, sent-sotš ja
    sotšin.

    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, 
    - 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.

    MIKÄ on rinnastuskonjunktion pääsana?

    сент-соч pitää joskus erikseen, koska aina ei ole sotshin
    """

    LogNewDeprel('Create the conj and cc categories in SN')
    thisSearch = makeSearch(database=dbcon.dbname, dbtable = 'ru_conll', ConditionColumns={'deprel':('сочин','сент-соч','соч-союзн')})
    updated = 0
    for key, matchlist in thisSearch.matches.items():
        for match in matchlist:
            if match.matchedword.pos == 'C':
                #Update the conjunction
                dbcon.query('UPDATE ru_conll SET  contr_deprel = %(contrdep)s WHERE id = %(matchid)s',{'contrdep':'cc','matchid':match.matchedword.dbid})
            else:
                if match.matchedword.head == 0 or match.matchedword.head not in match.matchedsentence.words.keys():
                    pass
                else:
                    mhead = match.matchedsentence.words[match.matchedword.head]
                    while mhead.pos == 'C' and mhead.head in match.matchedsentence.words.keys():
                        mhead = match.matchedsentence.words[mhead.head]
                    #Update the actual coordinated element
                    dbcon.query('UPDATE ru_conll SET contr_head = %(contrhead)s, contr_deprel = %(contrdep)s WHERE id = %(matchid)s',{'contrhead':mhead.tokenid,'contrdep':'conj','matchid':match.matchedword.dbid})
                    updated += 1
    log('Updated {} items in the db'.format(updated))
Example #22
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 #23
0
def obj(dbcon=False):
    """" Toiseksi SN-analysoidun aineiston jäsennystä on tarkennettava niin, että
    siihenkin luodaan oma kategoriansa objekteille. 
    
    Teknisesti tämä ei ole erityisen
    vaikeaa, sillä objekteiksi voitaneen melko aukottomasti määrittää
    SN-analysoidusta aineistosta ne kompl1-luokkaan sijoitetut sanat, jotka a) ovat
    verbistä riippuvia nomineja ja b) on morfologisessa analyysissa luokiteltu joko
    akkusatiivisijaisiksi feminiineiksi/neutreiksi tai genetiivisijaisiksi
    elollisiksi maskuliineiksi/monikkomuodoiksi. 
    
    Luotavaan objektikategoriaan
    liitetään myös alkuperäisen SN-analyysin *dliteln*-luokka, joka sisältää
    akkusatiivissa käytettyjä keston ajanilmauksia.  Tämä ratkaisu on yhtenevä sen
    kanssa, miten TDT-analyysi käsittelee objektinsijaisia määrän adverbiaaleja
    (tarkemmin ks. ).
    """

    featset = Featset()
    LogNewDeprel('Create the category of object in the SN data')
    thisSearch = makeSearch(database=dbcon.dbname, dbtable='ru_conll', ConditionColumns={'feat':featset.NounAcc,'deprel':('1-компл','2-компл','длительн')}, headcond = {'column':'pos','values':('V',)})
    simpleupdate(thisSearch, dbcon, deprel='obj',dbtable='ru_conll')
Example #24
0
def rel(dbcon=False):
    """
    HUOM! joten-sana kohdeltava erikseen

    """

    LogNewDeprel('REANALYZE the rel category in TDT')

    log('1. Search for all the relative pronouns  analyzed as "rel"'.format(
        dbcon.dbname))
    thisSearch = makeSearch(database=dbcon.dbname,
                            dbtable='fi_conll',
                            ConditionColumns={
                                'deprel': ('rel', ),
                                'lemma': ('joka', 'mikä')
                            })

    log('2. Extract the relative clauses')
    relclauses = rel_tdt.getRelDict(thisSearch)

    log('3. Print the relative clauses to file')
    rel_tdt.PrintRelClausesToFile(relclauses)

    #Reparse, if not yet done
    reparsedfile = "{}_reparsedrelativizers.conll".format(dbcon.dbname)
    if not os.path.isfile(reparsedfile):
        #if no previous reprse found:
        log('Now re-parse. This should take at least 10 mins ')
        os.system(
            "cat parserinput.txt | /home/juho/Dropbox/VK/skriptit/python/finnish_dep_parser/Finnish-dep-parser/parser_wrapper.sh > {}"
            .format(reparsedfile))

    log('4. Read the new deprels from the reparsed file')
    newdeprels = rel_tdt.ReadConllInput(reparsedfile)

    log('5. Insert the new deprels to the database')
    rel_tdt.UpdateContrRel(dbcon, relclauses, newdeprels)
Example #25
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 #26
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')
Example #27
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)))