class PopulationOfRegex(RegexTemplate): """ Regex for questions about the population of a country. Ex: "What is the population of China?" "How many people live in China?" """ openings = (Pos("WP") + Token("is") + Pos("DT") + Lemma("population") + Pos("IN")) | \ (Pos("WRB") + Lemma("many") + Lemma("people") + Token("live") + Pos("IN")) regex = openings + Question(Pos("DT")) + Country() + Question(Pos(".")) def semantics(self, match): population = PopulationOf(match.country) return population, "literal"
class LanguageOfRegex(RegexTemplate): """ Regex for questions about the language spoken in a country. Ex: "What is the language of Argentina?" "what language is spoken in Argentina?" """ openings = (Lemma("what") + Token("is") + Pos("DT") + Question(Lemma("official")) + Lemma("language")) | \ (Lemma("what") + Lemma("language") + Token("is") + Lemma("speak")) regex = openings + Pos("IN") + Question(Pos("DT")) + Country() + \ Question(Pos(".")) def semantics(self, match): language = LanguageOf(match.country) return language, "enum"
class WhatTimeIs(RegexTemplate): """ Regex for questions about the time Ex: "What time is it in Cordoba" """ nouns = Plus(Pos("NN") | Pos("NNS") | Pos("NNP") | Pos("NNPS")) place = Group(nouns, "place") openings = (Lemma("what") + ((Token("is") + Token("the") + Question(Lemma("current")) + Question(Lemma("local")) + Lemma("time")) | (Lemma("time") + Token("is") + Token("it")))) | \ Lemma("time") regex = openings + Pos("IN") + place + Question(Pos(".")) def semantics(self, match): place = HasKeyword(match.place.lemmas.title()) + IsPlace() utc_offset = UTCof(place) return utc_offset, "time"
class CapitalOfRegex(RegexTemplate): """ Regex for questions about the capital of a country. Ex: "What is the capital of Bolivia?" """ opening = Lemma("what") + Token("is") regex = opening + Pos("DT") + Lemma("capital") + Pos("IN") + \ Question(Pos("DT")) + Country() + Question(Pos(".")) def semantics(self, match): capital = CapitalOf(match.country) label = LabelOf(capital) return label, "enum"
class PresidentOfRegex(RegexTemplate): """ Regex for questions about the president of a country. Ex: "Who is the president of Argentina?" """ regex = Pos("WP") + Token("is") + Question(Pos("DT")) + \ Lemma("president") + Pos("IN") + Country() + Question(Pos(".")) def semantics(self, match): president = PresidentOf(match.country) incumbent = IncumbentOf(president) label = LabelOf(incumbent) return label, "enum"
class UserData(RegexTemplate): weight = 1.0 regex = Token("user") + Token("data") def semantics(self, match): return HasKeyword(match.words[0].token), "<user data>"