Hulpattributen¶
In AlpinoGraph worden extra attributen gebruikt die niet in Alpino voorkomen. Deze attributen zijn er om sommige query's te vereenvoudigen en het zoeken te versnellen.
Items¶
Hieronder een lijst van extra attributen op items van de types (:node)
en (:word)
.
_clause
¶
Is deze node een clause?
Items: (:node)
Type: bool
Waarde: true
of niet aanwezig
De waarde is true
voor een node waarvan cat
de waarde smain
,
sv1
of ssub
heeft.
Definitie
match (n:node)
where n.cat in ['smain','sv1','ssub']
set n._clause = true;
_clause_lvl
¶
Als deze node een clause is, hoe diep is het dan genest?
Items: (:node)
Type: int
Waarde: 1 of hoger, of niet aanwezig
Dit attribuut is aanwezig op nodes met de waarde true
voor het
attribuut _clause
. Het geeft aan hoe diep de clause-node zit genest
onder andere clause-nodes.
Het hoogste niveau heeft de waarde 1.
De bepaling van niveau wordt afgeleid via primaire relaties.
Definitie
match p = (:node{id: 0})-[:rel*0..{primary:true}]->(n:node)
where n.cat in ['smain','sv1','ssub']
with n, (select count(*)
from jsonb_array_elements((to_json(p) -> 'vertices')::jsonb) as v
where v -> 'properties' ->> 'cat' in ('smain','sv1','ssub')
) as c
set n._clause_lvl = c;
_cp
¶
Compound parts
Items: (:word)
Type: lijst van strings
Waarde: lijst van lengte 1 of langer
Dit zijn de compound parts van een woord, afgeleid van het lemma.
Zie voorbeelden van zoeken met compound parts.
Definitie
match (w:word)
with w, regexp_split_to_array(w.lemma, '_') as cp
set w._cp = cp;
_deste
¶
Een hulpattribuut voor het zoeken naar correlatieve comparatieven
Items: (:node)
Type: bool
Waarde: true
of niet aanwezig
Zonder dit hulpattribuut is het zoeken naar correlatieve comparatieven zeer tijdrovend.
Definitie
match (:word{graad:'comp'})<-[:rel{primary:true}]-(n:node)
-[:rel{primary:true}]->(n2:nw)
optional match p = (:word{lemma:'des'})<-[:rel{primary:true}]-(n2)
-[:rel{primary:true}]->(:word{lemma:'te'})
with n, n2, p
where n2.lemma in ['hoe','deste']
or p is not null
set n._deste = true;
_n_words¶
Het aantal woorden dat deze node bestrijkt
Items: (:node)
, (:word)
Type: int
Waarde: 1 of groter
Voor woorden is dit altijd 1.
Voor nodes is dit het aantal woorden onder de node die zowel via primaire als via niet-primaire relaties kan worden bereikt.
Definitie
match (n:nw)-[:rel*0..]->(w:word)
with distinct n.sentid as sentid, n.id as id, w.id as wid
with sentid, id, count(*) as c
match (n2:nw{sentid:sentid,id:id})
set n2._n_words = c;
_nachfeld¶
Is dit een nachfeld?
Items: (:node)
, (:word)
Type: bool
Waarde: true
of niet aanwezig
Voor toelichting, zie beneden bij _vorfeld
Algoritme
(n1)<-[:rel{rel:'hd'}]-(vp)-[:rel*0..]->()-[r:rel]->(n)
n is nachfeld, mits...
voorwaarden:
vp.cat in ['inf','ti','ssub','oti','ppart']
not r.rel in ['hd','svp']
n.cat is null or not n.cat in ['inf','ppart']
met:
optional match (n)-[r2:rel]->(n2)
where r2.rel in ['hd','cmp','mwp','crd','rhd','whd','nucl','dp']
voorwaarden:
- als n2 bestaat dan
n1.begin < n2.begin
- als n2 niet bestaat dan
n1.begin < n.begin
meer voorwaarden:
- geen andere vp tussen vp en n
- geen nachfeld tussen vp en n
Definitie
De definitie maakt gebruik van een tijdelijk hulpattribuut op relaties:
match ()-[r:rel]->()
where r.rel in ['hd','cmp','mwp','crd','rhd','whd','nucl','dp']
set r._head_rel = true;
match (n1)<-[:rel{_head_rel:true}]-()-[r2:rel{_head_rel:true}]->(n2)
where n1.begin < n2.begin
set r2._head_rel = NULL;
Definitie met behulp van tijdelijk attribuut:
match (x:nw)
where x.sentid + ' ' + x.id in (
select sid
from (
match (vp)
where vp.cat in ['inf','ti','ssub','oti','ppart']
match (n1)<-[:rel{rel:'hd'}]-(vp)-[:rel*0..]->()-[r:rel]->(n)
where not r.rel in ['hd','svp']
and ( n.cat is null or not n.cat in ['inf','ppart'] )
optional match (n)-[:rel{_head_rel:true}]->(n2)
with n, n1, n2, vp
where n2 is not null and n1.begin < n2.begin
or n2 is null and n1.begin < n.begin
return n.sentid + ' ' + n.id as sid, vp.id as vpid
except
match (vp)
where vp.cat in ['inf','ti','ssub','oti','ppart']
match (vp)-[:rel*1..]->(vp2)-[:rel*1..]->(n)
where vp2.cat in ['inf','ti','ssub','oti','ppart']
return n.sentid + ' ' + n.id as sid, vp.id as vpid
except
match (vp)
where vp.cat in ['inf','ti','ssub','oti','ppart']
match (n1)<-[:rel{rel:'hd'}]-(vp)-[:rel*0..]->()-[r:rel]->(n)
where not r.rel in ['hd','svp']
and ( n.cat is null or not n.cat in ['inf','ppart'] )
optional match (n)-[:rel{_head_rel:true}]->(n2)
with n, n1, n2, vp
where n2 is not null and n1.begin < n2.begin
or n2 is null and n1.begin < n.begin
match (n)-[:rel*1..]->(nn)
return nn.sentid + ' ' + nn.id as sid, vp.id as vpid
) as foo
)
set x._nachfeld = true;
_np
¶
Is dit een NP?
Items: (:node)
, (:word)
Type: bool
Waarde: true
of niet aanwezig
In Alpino heeft een NP lang niet altijd de category NP. Dit hulpattribuut is aanwezig op elke NP, zowel node als word.
Definitie
match ()-[r:rel]->(n1:nw)
where n1.cat = 'np'
or ( n1.lcat = 'np' and r.rel != 'hd' and r.rel != 'mwp' )
or ( n1.pt = 'n' and r.rel != 'hd' )
or ( n1.pt = 'vnw' and n1.pdtype = 'pron' and r.rel != 'hd' )
or ( n1.cat = 'mwu' and r.rel in ['su','obj1','obj2','app'] )
with n1
match (n1)<-[:rel*0..{rel:'cnj'}]-(n:nw)
set n._np = true;
_vorfeld¶
Is dit een vorfeld?
Items: (:node)
, (:word)
Type: bool
Waarde: true
of niet aanwezig
Het vorfeld is het zinsdeel vóór het finiete werkwoord in een zin met de verb second-volgorde. Zie Wikipedia De terminologie gaat terug op een oude traditie in Germaanse syntax.
In hoofdzinnen zoals:
vorfeld | persoonsvorm | mittelfeld | werkwoorden | nachfeld |
---|---|---|---|---|
Ik | heb | de kinderen vandaag kadootjes | beloofd | omdat het feest is |
Hij | moet | zijn jas in de trein | hebben laten liggen | met zijn dronken kop |
De kinderen | roepen | scheldwoorden naar de stagiaire |
staat de persoonsvorm op de tweede plaats. Het zinsdeel dat daaraan voorafgaat wordt vorfeld genoemd. De zinsdelen die volgen op de persoonsvorm en voorafgaan aan de eventuele overige werkwoorden staan in het mittelfeld. Het vijfde en laatste deel van de hoofdzin is dan het nachfeld.
Voobeelden:
- In elk geval kan men stellen dat er onzekerheid heerst over de vraag of de rente nog verder zal stijgen .
- Dit effect is nu bezig te verdwijnen .
- Aan het slot was de markt op het beste niveau van de dag en liep de ticker drie minuten achter .
- In een plaats hier vlakbij werd onlangs een voorstel voor de gemeenteraad gebracht .
- Wie ironisch is zegt het tegendeel van hetgeen hij meent .
- Wie loopt daar ?
Definitie
match (x:nw)
where x.sentid + ' ' + x.id in (
select sid
from (
match (n:node)-[r:rel*0..1{rel:'body'}]->(nn:node)-[:rel{rel:'hd'}]->(fin:word)
where ( n.cat = 'smain' and length(r) = 0 )
or ( n.cat = 'whq' and length(r) = 1 and nn.cat = 'sv1' )
match (n)-[r2:rel*1..{primary:true}]->(topic:nw)-[rel:rel*0..1]->(htopic:nw)
where ( n.cat = 'smain' or r2[0].rel = 'whd' )
and ( ( htopic.lemma is not null
and htopic.begin < fin.begin
and ( length(rel) = 0
or rel[0].rel in ['hd','cmp','crd']
)
)
or
( topic.begin < fin.begin
and
topic.end <= fin.begin
)
)
return topic.sentid + ' ' + topic.id as sid, n.id as nid
except
match (n:node)-[r:rel*0..1{rel:'body'}]->(nn:node)-[:rel{rel:'hd'}]->(fin:word)
where ( n.cat = 'smain' and length(r) = 0 )
or ( n.cat = 'whq' and length(r) = 1 and nn.cat = 'sv1' )
match (n)-[r2:rel*1..{primary:true}]->(topic:nw)-[rel:rel*0..1]->(htopic:nw)
where ( n.cat = 'smain' or r2[0].rel = 'whd' )
and ( ( htopic.lemma is not null
and htopic.begin < fin.begin
and ( length(rel) = 0
or rel[0].rel in ['hd','cmp','crd']
)
)
or
( topic.begin < fin.begin
and
topic.end <= fin.begin
)
)
match (topic)<-[:rel*1..]-(nt:node)<-[:rel*1..]-(n)
match (nt)-[relt:rel*0..1]->(hnt:nw)
where ( hnt.lemma is not null
and hnt.begin < fin.begin
and ( length(relt) = 0
or relt[0].rel in ['hd','cmp','crd']
)
)
or
( nt.begin < fin.begin
and
nt.end <= fin.begin
)
return topic.sentid + ' ' + topic.id as sid, n.id as nid
) as foo
)
set x._vorfeld = true;
Relaties¶
Extra attributen op relaties van het type rel
.
De attributen id
en primary
hebben betrekking op relaties waarbij
in Alpino een index-node werd gebruikt.
Voorbeeld, dit in Alpino:
<node begin="7" end="9" id="17" index="3" rel="su" cat="np"> ... </node>
...
<node begin="7" end="9" id="21" index="3" rel="obj1"/>
... wordt dit in AlpinoGraph:
(:node)-[:rel{rel: 'su', primary: true}]->
(:node{begin: 7, end: 9, id: 17, cat: 'np'})
<-[:rel{rel: 'obj1', primary: false, id: 21}]-(:node)
id
¶
Het originele ID van niet-primaire relaties
Relaties: [:rel]
Type: int
Waarde: 1 of groter, of niet aanwezig
Het ID van de lege index-node waarnaar deze relatie verwees in de originele boom in Alpino. Dit ID wordt gebruikt om uit de graaf die boom te reconstrueren.
primary
¶
Is dit een primaire relatie?
Relaties: [:rel]
Type: bool
Waarde: true
, false
Relaties in de originele boom in Alpino naar een lege index-node zijn niet primair. Alle overige relaties zijn primair, ook daar waar geen index-node was.