//go:build ignore // +build ignore package main import ( "fmt" "os" "sort" //"github.com/kr/pretty" "github.com/pebbe/util" ) var x = util.CheckErr func main() { for _, filename := range os.Args[1:] { processFile(filename) } } func terminals(node *NodeType, doc *docType) []*NodeType { result := make([]*NodeType, 0) ids := make(map[int]bool) for _, nn := range FIND(doc, `$node/descendant-or-self::node[@pt or (@index and not(@cat or @pt))]`) { n := nn.(*NodeType) if n.Pt != "" { if ids[n.ID] { continue } ids[n.ID] = true result = append(result, n) } else { for _, m := range terminals(doc.Indexed[n.Index], doc) { if ids[m.ID] { continue } ids[m.ID] = true result = append(result, m) } } } return result } func deste(node *NodeType, doc *docType) []interface{} { return FIND(doc, `$node//node[@cat="du" and count(.//node[node[@lemma=("hoe","deste") or (node[@lemma="des"] and node[@lemma="te"])] and node[@graad="comp"]])>1]`) } func processFile(filename string) { doc, err := parse(filename) x(err) results := make([]*NodeType, 0) for _, n := range deste(doc.Alpino.Node, doc) { node := n.(*NodeType) if len(deste(node, doc)) == 0 { results = append(results, node) } } for _, r := range results { fmt.Printf("%s\n %d\t", doc.Alpino.Sentence.SentId, r.ID) terms := terminals(r, doc) sort.Slice(terms, func(i, j int) bool { return terms[i].Begin < terms[j].Begin }) for _, t := range terms { fmt.Print(t.Word, " ") } fmt.Println() } }