cd /net/homepages/kleiweg/www/agens/diffs ; ./viewdiffZonder items waarbij AgensGraph gebruik maakt van extra attributen.
Data: AgensGraph in tweede kolom, DbXML in derde kolom
Alle bestanden: https://urd2.let.rug.nl/~kleiweg/agens/diffs/
Dit gebeurt automatisch in PaQu als je zoekt naar woordparen. Daar is het handig omdat je maar één woord kunt invullen in een zoekveld, en niet een reeks varianten.
In AlpinoGraph kun je zoiets doen:
match (w:word)
where w.lemma in (
select lemma
from (
match (w1:word{word: 'fiets'})
return distinct w1.lemma
) as foo
)
return distinct w.word, w.lemma, w.root, w.pt
order by lemma, root, pt, word
Dit geeft bijvoorbeeld bij BasiLex interessante varianten.
Het kan simpeler:
match (w1:word{word: 'fiets'})
with distinct w1.lemma as lemma
match (w:word{lemma: lemma})
return distinct w.word, w.lemma, w.root, w.pt
order by lemma, root, pt, word
Met een hulptabel zou het misschien sneller zijn:
match (w1:wl{word: 'fiets'}),
(w:word{lemma: w1.lemma})
return w
Maar… grotere database. Is dat het waard?
Per 24 juni
Dit is een aardig begin. Er moeten minimaal twee crd’s en twee cnj’s zijn, en er moet een crd vooraan staan. Die crd vooraan is gewoonlijk de eerste node die genummerd wordt met een id onder de conj.
match (n1:nw)<-[:rel{rel:'crd'}]-(n:node{cat: 'conj'})-[:rel{rel: 'crd'}]->(:nw)
match (:nw{sentid: n.sentid})<-[:rel{rel:'cnj'}]-(n)-[:rel{rel: 'cnj'}]->(:nw)
where n1.id = n.id + 1
return n
Maar je krijgt vrij veel fouten. Met extra tests filter je die er uit:
match (n1:nw)<-[:rel{rel:'crd'}]-(n:node{cat: 'conj'})-[:rel{rel: 'crd'}]->(n3:nw)
match (n2:nw{sentid: n.sentid})<-[:rel{rel:'cnj'}]-(n)-[:rel{rel: 'cnj'}]->(n4:nw)
where n1.id = n.id + 1
and (
n1.id < n2.id
and n2.id < n3.id
and n3.id < n4.id
or
n1.begin < n2.begin
and n2.begin < n3.begin
and n3.begin < n4.begin
)
return n
Die tests met begin zijn nodig omdat de ids niet altijd oplopend
zijn genummerd. In SPOD in PaQu gaat dat ook fout. Daar wordt
deze zin
ook niet gevonden.
Ook met tests op begin erbij mis je er nog een paar die wel goed zijn, zoals deze:
Hiermee kun je zien welke items er door de toegevoegde tests worden uitgefilterd:
match (n1:nw)<-[:rel{rel:'crd'}]-(n:node{cat: 'conj'})-[:rel{rel: 'crd'}]->(:nw)
match (:nw{sentid: n.sentid})<-[:rel{rel:'cnj'}]-(n)-[:rel{rel: 'cnj'}]->(:nw)
where n1.id = n.id + 1
return n.sentid, n.id
except
match (n1:nw)<-[:rel{rel:'crd'}]-(n:node{cat: 'conj'})-[:rel{rel: 'crd'}]->(n3:nw)
match (n2:nw{sentid: n.sentid})<-[:rel{rel:'cnj'}]-(n)-[:rel{rel: 'cnj'}]->(n4:nw)
where n1.id = n.id + 1
and (
n1.id < n2.id
and n2.id < n3.id
and n3.id < n4.id
or
n1.begin < n2.begin
and n2.begin < n3.begin
and n3.begin < n4.begin
)
return n.sentid, n.id
Per 1 juli
Kijk naar beginpositie van head, als dat er is:
match (n1:nw)<-[:rel{rel:'crd'}]-(n:node{cat: 'conj'})-[:rel{rel: 'crd'}]->(n3:nw)
match (n2:nw{sentid: n.sentid})<-[:rel*0..1{rel:'hd'}]-()<-[:rel{rel:'cnj'}]-(n)-[:rel{rel: 'cnj'}]->()-[:rel*0..1{rel:'hd'}]->(n4:nw)
where n1.id = n.id + 1
and (
n1.id < n2.id
and n2.id < n3.id
and n3.id < n4.id
or
n1.begin < n2.begin
and n2.begin < n3.begin
and n3.begin < n4.begin
)
return n.sentid, n.id
Nu wordt deze wel gevonden:
… maar deze nog steeds niet:
En je krijgt een aantal valse hits, zoals:
Test de verschillen:
match (n1:nw)<-[:rel{rel:'crd'}]-(n:node{cat: 'conj'})-[:rel{rel: 'crd'}]->(n3:nw)
match (n2:nw{sentid: n.sentid})<-[:rel*0..1{rel:'hd'}]-()<-[:rel{rel:'cnj'}]-(n)-[:rel{rel: 'cnj'}]->()-[:rel*0..1{rel:'hd'}]->(n4:nw)
where n1.id = n.id + 1
and (
n1.id < n2.id
and n2.id < n3.id
and n3.id < n4.id
or
n1.begin < n2.begin
and n2.begin < n3.begin
and n3.begin < n4.begin
)
return n.sentid, n.id
except
match (n1:nw)<-[:rel{rel:'crd'}]-(n:node{cat: 'conj'})-[:rel{rel: 'crd'}]->(n3:nw)
match (n2:nw{sentid: n.sentid})<-[:rel{rel:'cnj'}]-(n)-[:rel{rel: 'cnj'}]->(n4:nw)
where n1.id = n.id + 1
and (
n1.id < n2.id
and n2.id < n3.id
and n3.id < n4.id
or
n1.begin < n2.begin
and n2.begin < n3.begin
and n3.begin < n4.begin
)
return n.sentid, n.id