Files
comp-syntax-gu-mlt/lab2/old/wikipedia-2022/country_facts.py
2025-05-04 09:38:01 +02:00

65 lines
1.8 KiB
Python

from data_facts import *
pgffile = 'Countries.pgf'
datafile = '../data/countries.tsv'
# 0.238s
def country_facts_embedded(factsys,tuple):
countr = factsys.str2exp("CName",tuple[0])
cap = factsys.str2exp('Name',tuple.capital)
cont = factsys.str2exp('CName',tuple.continent)
curr = factsys.str2exp('Name',tuple.currency)
pop = mkInt(tuple.population)
are = mkInt(tuple.area)
factsys.grammar.embed("G")
import G
object = G.NameObject(G.cName(countr))
return [
G.AttributeFact(G.capital_Attribute, object, G.NameValue(cap)),
G.AttributeFact(G.area_Attribute, object, G.IntValue(are)),
G.populationFact(countr, pop),
G.continentFact(countr, cont),
G.AttributeFact(G.currency_Attribute, object, G.NameValue(curr))
]
# 0.367s
def country_facts_parsed(factsys,tuple):
countr = factsys.data2lin("CName",tuple[0])
cap = factsys.data2lin('Name',tuple.capital)
cont = factsys.data2lin('CName',tuple.continent)
curr = factsys.data2lin('Name',tuple.currency)
pop = mkInt(tuple.population)
are = mkInt(tuple.area)
return [ factsys.str2exp('Fact',s) for s in
[
"the capital of {} is {}".format(countr,cap),
"the area of {} is {}".format(countr,are),
"{} has {} inhabitants".format(countr,pop),
"{} is in {}".format(countr, cont),
"the currency of {} is {}".format(countr,are)
]
]
def countries_facts(factsys,cs):
return [t for c in cs for t in country_facts_embedded(factsys,c)]
def mkInt(s):
return pgf.readExpr(str(s))
def main():
gr = pgf.readPGF('Countries.pgf')
factsys = FactSystem(
'country capital area population continent currency',
gr,
'CountriesEng'
)
factsys.run(datafile, countries_facts)
if __name__ == "__main__":
main()