7 december 2022

  1. PaQu
    • SPOD
      • Adjectiefgroepen
        • PaQu
          • grammaticale functie, bijwoordelijke bepaling (bepaling bij werkwoord, adjectief, …)
            • oude en nieuwe versie testen
          • als alles oké is, dan updaten in PaQu
          • PaQu in Docker
        • AlpinoGraph
          • Expressie met nachfeld: interne structuur, ADJ COMPL
          • AlpinoGraph in Docker
      • Tellingen bij invoer van corpus in PaQu
        • Ook voor Methode = geëxpandeerde indexnodes
        • Ook voor expressies die uit meerdere delen bestaan, gescheiden door +|+
    • Macro’s
      • vorfeld
        • PaQu
      • nachfeld
        • PaQu
        • AlpinoGraph
          • Definitie in Cypher
          • Implementatie als hulpattribuut
  2. Alpino
    • Programma om diverse hulpattributen aan een xml-bestand toe te voegen, zoals vorfeld, nachfeld, …
  3. Torch

Adjectiefgroepen

ajbepvagrammaticale functie, bijwoordelijke bepaling (bepaling bij werkwoord, adjectief, …)

Oude versie:

//node[
          (@cat="ap" or @pt="adj")
          and (
                  (@rel="mod" and not(../@cat="np"))
                  or
                  (@rel="cnj" and (../@rel="mod" or ../@index=//node[@rel="mod"]/@index) and not(../../@cat="np"))
                  or
                  //node[
                            (@rel="mod" and not(../@cat="np"))
                            or
                            (@rel="cnj" and (../@rel="mod" or ../@index=//node[@rel="mod"]/@index) and not(../../@cat="np"))
                  ]/@index=@index
          )
]

Nieuwe versie:

???

Vorfeld

Voorstel nieuwe versie:

PQ_self_vorfeld = """
        ( ( (  %PQ_precedes_head_of_smain%
               and
               not(parent::node[%PQ_precedes_head_of_smain%])
            )
            or
            (  %PQ_precedes_head_of_whq%
               and
               not(parent::node[%PQ_precedes_head_of_whq%])
            )
          )
          and
          (@cat or @pt)
        ) """

PQ_vorfeld = """
        (  %PQ_self_vorfeld%
           or
           //node[%PQ_self_vorfeld%]/%PQ_i% = %PQ_i%
        ) """

Getest met //node[%PQ_vorfeld%] op Alpino Treebank.

Oude versie: 2 minuten, 7221 hits
Nieuwe versie: 76 minuten, 9514 hits

Zie nieuwe hits

Nachfeld

Dit is de meest juiste versie. Het gebruik van ancestor-or-self is een bug die in sommige gevallen het effect van de werkelijke bug ongedaan maakt.

X_nachfeld_t = """
        (
            not(@cat=("inf","ppart") or @rel=("hd","svp"))
            and
            (
                (
                    ancestor::node[%PQ_vp%]
                    except
                    ancestor::node[%PQ_vp%]/ancestor::node[%PQ_vp%]
                )/node[@rel="hd"]/%PQ_b% < %PQ_begin_of_head%
                or
                (
                    ancestor::node[%PQ_vp%]
                    except
                    ancestor::node[%PQ_vp%]/ancestor::node[%PQ_vp%]
                )/node[@rel="hd"]/%PQ_b% < %PQ_b% and not(node[%PQ_headrel%])
            )
        ) """

X_nachfeld = """
        (
            %X_nachfeld_t%
            and
            not(
                   ancestor::node[%X_nachfeld_t%]
                   except
                   ancestor::node[%PQ_vp%]/ancestor::node[%X_nachfeld_t%]
            )
        ) """

Dit is een typisch geval waar AlpinoGraph het goed doet en Xpath niet. Met corpus Alpino Treebank:

//sentence[@sentid='cdb10'] +|+
//node[%X_nachfeld%]

Dit is de juiste oplossing.

Dit is de oplossing met XPath.

Het gaat al fout bij de hulpfunctie:

//sentence[@sentid='cdb10'] +|+
//node[%X_nachfeld_t%]

Dat geeft deze kandidaten.

Hierbij zitten vier fouten, de terminal nodes met de woorden waarin, wat, hoe, en nog een wat, met id: 16, 23, 29 en 36. (Dat dit toevallig allemaal terminal nodes zijn doet er niet toe.)

AlpinoGraph geeft dezelfde nodes, behalve deze vier.

match (vp{sentid:'cdb10'})
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 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.id

Het gaat fout met XPath omdat ancestor geen rekening houdt met paden die onderbroken zijn door index-nodes. Daar lijkt geen eenvoudige oplossing voor in XPath. Misschien wel met quantifiers in XPath 2?

alpino alpinograph nachfeld paqu spod