testing with trees without pgf

This commit is contained in:
Aarne Ranta
2025-05-07 10:15:42 +02:00
parent 262b3fe129
commit 034f3a4771
4 changed files with 2542 additions and 3 deletions

View File

@@ -23,3 +23,8 @@ Replace da and Dan with your own language codes!
More instructions and demos are given in the lectures of the week 5-9 May 2025. More instructions and demos are given in the lectures of the week 5-9 May 2025.
If you don't manage to install pgf, a quick way to test is, in GF,
```
import NobelEng.gf
rf -file="../data/trees.gft" -lines -tree | l
```

2532
lab2/data/trees.gft Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -53,7 +53,7 @@ def predicate(tree):
case ("PFemale", []): case ("PFemale", []):
return lambda d: d['sexLabel'] == 'female' return lambda d: d['sexLabel'] == 'female'
case ("KProperty", [property, kind]): case ("KProperty", [property, kind]):
return lambda d: predicate(property)(d) and predicate(kind(d)) return lambda d: predicate(property)(d) and predicate(kind)(d)
case ("KLaureate", []): case ("KLaureate", []):
return lambda d: True return lambda d: True
case ("KMan", []): case ("KMan", []):
@@ -85,9 +85,9 @@ def value(element):
_, string = name.unpack _, string = name.unpack
return [d for d in data if d['personLabel'] == string][0] ## uncertain ! return [d for d in data if d['personLabel'] == string][0] ## uncertain !
case ('EYoungest', [kind]): case ('EYoungest', [kind]):
return min(data, key = age) return min([d for d in data if predicate(kind)(d)], key = age)
case ('EOldest', [kind]): case ('EOldest', [kind]):
return max(data, key = age) return max([d for d in data if predicate(kind)(d)], key = age)
print('not yet', str(tree)) print('not yet', str(tree))

View File

@@ -78,6 +78,7 @@ def grammar_description(grammar, fundata, d, lang):
died = pgf.readExpr( died = pgf.readExpr(
f"DiedSentence ({name(d)}) (YearDate {year(d['deathDate'])})") f"DiedSentence ({name(d)}) (YearDate {year(d['deathDate'])})")
sentences.append(died) sentences.append(died)
# return ('\n '.join([str(s) for s in sentences]))
return ' '.join([lang.linearize(s) + '.' for s in sentences]) return ' '.join([lang.linearize(s) + '.' for s in sentences])
@@ -93,3 +94,4 @@ else: