예제 #1
0
def winner_text(factsys, data, win):
    factsys.grammar.embed("G")
    import G

    name = G.pnameName(pname(win))
    priz = factsys.str2exp("Prize", win.prize)
    cit = cname(factsys, win.city)
    countr = cname(factsys, win.country)

    doc = G.OneSentenceDoc(
        G.ContinuousPastFactSentence(  ## for Ger
            G.ActFact(G.NameObject(name),
                      G.winPrizeDateAct(priz, string_year(win.year)))))
    doc = G.AddSentenceDoc(
        doc,
        G.ContinuousPastFactSentence(
            G.ActFact(G.PronObject(name),
                      G.bornAct(string_year(win.born), cit, countr))))
    if len(win) > 7 and win.dead:
        try:
            fname = G.pnameName(pname(win, just_family=True))
            doc = G.AddSentenceDoc(
                doc,
                G.PunctualPastFactSentence(
                    G.ActFact(G.NameObject(fname),
                              G.dieAct(string_year(win.dead)))))
        except:
            pass


##    print(doc)

    return doc, name, priz
예제 #2
0
def nobel_texts(factsys, data):
    factsys.grammar.embed("G")
    import G

    def first_woman(p):
        return min(filter(lambda w: w.sex == 'female' and w.prize == p, data),
                   key=lambda d: int(d.year[:4])).winner

    def youngest(p):
        return min(filter(lambda w: w.prize == p, data),
                   key=lambda d: int(d.year[:4]) - int(d.born[:4])).winner

    docs = []
    for win in data:
        doc, name, priz = winner_text(factsys, data, win)
        if win.winner == first_woman(win.prize):
            doc = G.AddSentenceDoc(
                doc,
                G.ContinuousPastFactSentence(
                    G.FirstInKindFact(
                        G.NameObject(name),
                        G.ModifierKind(
                            G.woman_Kind,
                            G.PunctualPastActModifier(G.winPrizeAct(priz))))))
        if win.winner == youngest(win.prize):
            if win.sex == 'female':
                winnerOf = G.femaleWinnerOfPrizeKind
            else:
                winnerOf = G.maleWinnerOfPrizeKind
            doc = G.AddSentenceDoc(
                doc,
                G.ContinuousPastFactSentence(
                    G.YoungestInKindFact(G.PronObject(name), winnerOf(priz))))

        docs.append(doc)

    return docs