thorunna / UDConverter

A treebank format converter for converting PPCHE-style treebanks into UD treebanks.
Apache License 2.0
4 stars 0 forks source link

depender.py / postProcess.sh - Finna varanlega lausn á “None” í CoNLL-U úttaki #4

Open hinrikur opened 4 years ago

hinrikur commented 4 years ago

Allir dálkar eru None:

Tekið út með sed skipun núna (þar sem kemur bara en þyrfti að koma í veg fyrir að það skrifist inn yfir höfuð, sem er í depender.py. Ekki almennilega ljóst hvað veldur þessu en líklega einhvers konar artifact úr conversion ferlinu.

Vensl eru None:

Einhverra hluta vegna fá sumir venslahausar ekki tölu heldur haldast sem None. Lagað (tímabundið) með eftirfarandi:

self.nodes = defaultdict(lambda:  {'address': None,
                                   'word': None,
                                   'lemma': None,
                                   'ctag': None,    # upostag
                                   'tag': None,     # xpostag
                                   'feats': None,
                                   'head': '_', # None, # TODO: find permanent fix!
                                   'deps': defaultdict(list),
                                   'rel': None,
                                   })

Default hausinn er merktur með '_' streng, sem pyconll nær að lesa en virkar líklega ekki í UD validation skriptunum

hinrikur commented 4 years ago

Úttakssetning með þessari villu (dæmi): Sjá línu 8 þar sem vantar haus (var None fyrir tímabundnu lagfæringarnar að ofan)

# sent_id = 1450.bandamenn.nar-sag.psd_205_22056
1   en  en  CCONJ   CONJ    _   5   cc  _   c
2   móðir   móðir   NOUN    N-N Case=Nom|Number=Sing|Definite=Ind|Gender=Fem    5   nsubj   _   nven
3   hans    hann    PRON    PRO-G   Case=Gen|Number=Sing|Gender=Masc|PronType=Prs   2   nmod:poss   _   fpkee
4   var vera    AUX BEDI    Number=Sing|Mood=Ind|Tense=Past|VerbForm=Fin|Voice=Act|Person=3 5   cop _   sfg3eþ
5   Þorgerður   þorgerður   PROPN   NPR-N   Case=Nom|Number=Sing|Definite=Ind|Gender=Fem    0   root    _   nven-s
6   dóttir  dóttir  NOUN    N-N Case=Nom|Number=Sing|Definite=Ind|Gender=Fem    5   appos   _   nven
7   Egils   egill   PROPN   NPR-G   Case=Gen|Number=Sing|Definite=Ind|Gender=Masc   6   nmod:poss   _   nkee-s
8   Skalla-Grímssonar   skallagrímsson  PROPN   NPR-G   Case=Gen|Number=Sing|Definite=Ind|Gender=Masc   _   _   _   nkee-s
9   Kveldúlfssonar  kveldúlfsson    PROPN   NPR-G   Case=Gen|Number=Sing|Definite=Ind|Gender=Masc   7   nmod:poss   _   nkee-s
10  .   .   PUNCT   .   _   5   punct   _   .
hinrikur commented 4 years ago

Það var if-statement vesen sem orsakaði þetta. Línar lúkkar svona núna:

if re.match("IP-MAT|IP-MAT-[^=].*|INTJP|FRAG|CP-QUE-SPE|IP-IMP-SPE[^=1]|QTP|CODE|LATIN|TRANSLATION|META|IP-IMP|CP-QUE|CP-EXL|CP-THT", head_tag):  #todo root phrase types from config
    self.dg.get_by_address(mod_nr).update({'head': 0, 'rel': 'root'})  #todo copula not a head
    self.dg.root = self.dg.get_by_address(mod_nr)
else:
    # TEMP: This is most likely why "None" is popping up in the output
    self.dg.get_by_address(mod_nr).update({'head': head_nr, 'rel': '***'})
    self.dg.root = self.dg.get_by_address(mod_nr)

else klausan merkir orðið með sínu eigin númeri sem venslahaus og *** sem venslagerð. Þá er hægt að finna það auðveldlega til að lagfæra / debugga

hinrikur commented 4 years ago

None líklega farið úr úttakinu sem síkt. Lokað

hinrikur commented 4 years ago

None er tekið út en á sumum stöðum er rel merkt sem ***.

Með leitarstrengnum grep '\*\*\*' CoNLLU_output/* | wc -l eru 2507 línur merktar svona.

Þetta eru línur þar sem engin venslagerð fannst. Þarf að bæta inn í rules.py

Kóði sem orsakar:

else:
       # TEMP: This is most likely why "None" is popping up in the output
       self.dg.get_by_address(mod_nr).update({'head': head_nr, 'rel': '***'})
       self.dg.root = self.dg.get_by_address(mod_nr)