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 - Fleiri en ein rót í CoNLL-U úttaki #1

Open hinrikur opened 4 years ago

hinrikur commented 4 years ago

Dæmi: Ath. að lína 4 á að vera eina rótin en 16 er það líka

# sent_id = 1920.arin.rel-ser.psd_361_65438
1   Sama    samur   _   ADJ-N   _   3   amod    _   _
2   undursamlega    undursamlegur   _   ADJ-N   _   3   amod    _   _
3   vandvirknin vandvirkni  _   N-N _   4   nsubj   _   _
4   kemur   koma    _   VBPI    _   0   root    _   _
5   fram    fram    _   RP  _   4   compound:prt    _   _
6   í   í   _   P   _   7   case    _   _
7   gerð    gerð    _   N-A _   4   obl _   _
8   minnstu minni   _   ADJS-G  _   9   amod    _   _
9   vallargrasanna  vallargras  _   NS-G    _   7   nmod:poss   _   _
10  sem sem _   C   _   11  mark    _   _
11  í   í   _   P   _   4   advcl   _   _
12  myndun  myndun  _   N-D _   11  obl _   _
13  sólkerfanna sólkerfi    _   NS-G    _   12  nmod:poss   _   _
14  ,   ,   _   ,   _   4   punct   _   _
15  í   í   _   P   _   4   conj    _   _
16  vængjum vængur  _   NS-D    _   0   root    _   _
17  minnsta minni   _   ADJS-G  _   18  amod    _   _
18  fiðrildisins    fiðrildi    _   N-G _   16  nmod:poss   _   _
19  sem sem _   C   _   20  mark    _   _
20  heilabúi    heilabúi    _   N-N _   16  advcl   _   _
21  mesta   mikill  _   QS-G    _   22  amod    _   _
22  gáfumannsins    gáfumaður   _   N-G _   20  nmod:poss   _   _
23  .   .   _   .   _   4   punct   _   _
hinrikur commented 4 years ago

Vandamál

Í IcePaHC formgerðinni eru göt í setningunni (þar sem t.d. sögn er sleppt) merkt með einkennisnúmerum í taggi setningar (t.d. IP-MAT=1 bendir á nærliggjandi setninunga IP-MAT-1 og aðalsögnina í henni). depender.py nær ekki utan um þetta eins og er.

hér er tréð sem hausinn er valinn úr í keyrslunni og hausareglan sem er notuð (Ath hausareglan er default reglan, þ.e. engin regla fannst)

(2, 0) (IP-MAT=1
  (PP
    (P í-í)
    (NP
      (NS-D vængjum-vængur)
      (NP-POS (ADJS-G minnsta-minni) (N-G fiðrildisins-fiðrildi))))
  (CP-ADV
    (WADVP-3 0)
    (C sem-sem)
    (IP-SUB
      (ADVP *T*-3)
      (PP
        (P )
        (NP
          (N-N heilabúi-heilabúi)
          (NP-POS (QS-G mesta-mikill) (N-G gáfumannsins-gáfumaður))))))) IP-MAT=1

{'dir': 'r', 'rules': ['.*']}

16
hinrikur commented 4 years ago

Hugmyndir:

hinrikur commented 4 years ago

Sjá hér fyrir tölur

hinrikur commented 4 years ago

Búið að ganga frá langflestum villum með því að senda undirtré aftur í gegnum hausaval eftir fyrsta hausavalið:

        # head selection
        for i in const:

            # Catch index referenced sentences in treebank
            if re.match('=\d', t[i].label()[-2:]):# or t[i].label() == 'CONJP
                clause_index = t[i].label()[-1]
                # re.match('\d', t[i].label()[-2:])
                for j in const + singles:
                    if re.match(f'-{clause_index}', t[j].label()[-2:]):
                        if isinstance(t[j][0], str):
                            t[i].set_id(t[j].id())
                        else:
                            self._select_head(t[i], main_clause=t[j])

            else:
                self._select_head(t[i])

        # fixes subtrees with 1 child but wrong id
        for i in singles:
            if isinstance(t[i][0], Tree) and t[i].id() != t[i][0].id():

                if re.match('=\d', t[i].label()[-2:]):
                    # print('\nMain Clause indicated\n')
                    clause_index = t[i].label()[-1]
                    # re.match('\d', t[i].label()[-2:])
                    for j in const:
                        if re.match(f'-{clause_index}', t[j].label()[-2:]):
                            self._select_head(t[i][0], main_clause=t[j])
                else:
                    t[i].set_id(t[i][0].id())

Þetta skilar betri niðurstöðum en hægir á keyrslu. Þarf að optimisera.

hinrikur commented 4 years ago

Miðað við eftirstandandi dæmi myndi mögulega leysa málið að senda tré með =\d í taggi aftur í gegn um hausaval en það myndi hægja svakalega mikið á keyrslunni.