Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

depender.py - Fleiri en ein rót í CoNLL-U úttaki #1

Open
hinrikur opened this issue Mar 6, 2020 · 5 comments
Open

depender.py - Fleiri en ein rót í CoNLL-U úttaki #1

hinrikur opened this issue Mar 6, 2020 · 5 comments
Assignees
Labels
bug Something isn't working

Comments

@hinrikur
Copy link
Collaborator

hinrikur commented Mar 6, 2020

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 hinrikur changed the title Fleiri en ein rót í CoNLL-U úttaki depender.py - Fleiri en ein rót í CoNLL-U úttaki Mar 6, 2020
@hinrikur hinrikur self-assigned this Mar 6, 2020
@hinrikur hinrikur added the bug Something isn't working label Mar 6, 2020
@hinrikur
Copy link
Collaborator Author

hinrikur commented Mar 6, 2020

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
Copy link
Collaborator Author

hinrikur commented Mar 6, 2020

Hugmyndir:

  • Snúa default reglu við, þannig leitað er til vinstri (dir='l') en ekki til hægri eins og núna (sjá komment á viðeigandi stað í kóða
  • Breyta algrími í _select_head() fallinu þannig hann velur ekki vitlausan haus (líklega í gegnum breyttar hausareglur).
  • Breyta ferli innan í create_dependency_graph þannig ef haus er valinn í setningu með =1 í taggi komi a. ekkert ('_') eða b. auðþekkjanlegt merki. Rétt vensl væru síðan sett inn eftirá (ekki góð lausn)

@hinrikur
Copy link
Collaborator Author

hinrikur commented Mar 9, 2020

Sjá hér fyrir tölur

@hinrikur
Copy link
Collaborator Author

hinrikur commented Apr 19, 2020

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
Copy link
Collaborator Author

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant