class WhoWroteQuestion(QuestionTemplate): """ Ex: "who wrote The Little Prince?" "who is the author of A Game Of Thrones?" """ regex = ((Lemmas("who write") + Book()) | (Question(Lemmas("who be") + Pos("DT")) + Lemma("author") + Pos("IN") + Book())) + \ Question(Pos(".")) def interpret(self, match): author = NameOf(IsPerson() + AuthorOf(match.book)) return author, "literal"
class PlotOfQuestion(QuestionTemplate): """ Ex: "what is Shame about?" "plot of Titanic" """ regex = ((Lemmas("what be") + Movie() + Lemma("about")) | \ (Question(Lemmas("what be the")) + Lemma("plot") + Pos("IN") + Movie())) + \ Question(Pos(".")) def interpret(self, match): definition = DefinitionOf(match.movie) return definition, "define"
class MovieDurationQuestion(QuestionTemplate): """ Ex: "How long is Pulp Fiction" "What is the duration of The Thin Red Line?" "What is the runtime of Fight Club?" """ regex = ((Lemmas("how long be") + Movie()) | (Lemmas("what be") + Pos("DT") + (Lemma("runtime") | Lemma("duration")) + Pos("IN") + Movie())) + \ Question(Pos(".")) def interpret(self, match): duration = DurationOf(match.movie) return duration, ("literal", "{} minutes long")
class BooksByAuthorQuestion(QuestionTemplate): """ Ex: "list books by George Orwell" "which books did Suzanne Collins wrote?" """ regex = (Question(Lemma("list")) + Lemmas("book by") + Author()) | \ ((Lemma("which") | Lemma("what")) + Lemmas("book do") + Author() + Lemma("write") + Question(Pos("."))) | \ (Question(Lemma("which")) + Lemma("book") + Question(Lemma("be")) + \ Lemma("write") + Pos("IN") + Author() + Question(Pos("."))) def interpret(self, match): book = IsBook() + HasAuthor(match.author) book_name = NameOf(book) return book_name, "enum"
class ShowsWithQuestion(QuestionTemplate): """ Ex: "List shows with Hugh Laurie" "In what shows does Jennifer Aniston appears?" "Shows with Matt LeBlanc" """ regex = (Lemmas("list show") + Pos("IN") + Actor()) | \ (Pos("IN") + (Lemma("what") | Lemma("which")) + Lemmas("show do") + Actor() + (Lemma("appear") | Lemma("work")) + Question(Pos("."))) | \ ((Lemma("show") | Lemma("shows")) + Pos("IN") + Actor()) def interpret(self, match): show = IsTvShow() + HasActor(match.actor) show_name = ShowNameOf(show) return show_name, "enum"
class CastOfQuestion(QuestionTemplate): """ Ex: "What is the cast of Friends?" "Who works in Breaking Bad?" "List actors of Seinfeld" """ regex = (Question(Lemmas("what be") + Pos("DT")) + Lemma("cast") + Pos("IN") + TvShow() + Question(Pos("."))) | \ (Lemmas("who works") + Pos("IN") + TvShow() + Question(Pos("."))) | \ (Lemmas("list actor") + Pos("IN") + TvShow()) def interpret(self, match): actor = IsPerson() + StarsIn(match.tvshow) name = LabelOf(actor) return name, "enum"
class ListTvShows(QuestionTemplate): """ Ex: "List TV shows" """ regex = Lemmas("list tv show") def interpret(self, match): show = IsTvShow() label = LabelOf(show) return label, "enum"
class ReleaseDateQuestion(QuestionTemplate): """ Ex: when was Friends release? """ regex = Lemmas("when be") + TvShow() + Lemma("release") + \ Question(Pos(".")) def interpret(self, match): release_date = ReleaseDateOf(match.tvshow) return release_date, "literal"
class CreatorOfQuestion(QuestionTemplate): """ Ex: "Who is the creator of Breaking Bad?" """ regex = Question(Lemmas("who be") + Pos("DT")) + \ Lemma("creator") + Pos("IN") + TvShow() + Question(Pos(".")) def interpret(self, match): creator = CreatorOf(match.tvshow) label = LabelOf(creator) return label, "enum"
class MovieReleaseDateQuestion(QuestionTemplate): """ Ex: "When was The Red Thin Line released?" "Release date of The Empire Strikes Back" """ regex = ((Lemmas("when be") + Movie() + Lemma("release")) | (Lemma("release") + Question(Lemma("date")) + Pos("IN") + Movie())) + \ Question(Pos(".")) def interpret(self, match): release_date = ReleaseDateOf(match.movie) return release_date, "literal"
class EpisodeCountQuestion(QuestionTemplate): """ Ex: "How many episodes does Seinfeld have?" "Number of episodes of Seinfeld" """ regex = ((Lemmas("how many episode do") + TvShow() + Lemma("have")) | (Lemma("number") + Pos("IN") + Lemma("episode") + Pos("IN") + TvShow())) + \ Question(Pos(".")) def interpret(self, match): number_of_episodes = NumberOfEpisodesIn(match.tvshow) return number_of_episodes, "literal"
class DirectorOfQuestion(QuestionTemplate): """ Ex: "Who is the director of Big Fish?" "who directed Pocahontas?" """ regex = ((Lemmas("who be") + Pos("DT") + Lemma("director") + Pos("IN") + Movie()) | (Lemma("who") + Lemma("direct") + Movie())) + \ Question(Pos(".")) def interpret(self, match): director = IsPerson() + DirectorOf(match.movie) director_name = NameOf(director) return director_name, "literal"
class WhereIsQuestion(QuestionTemplate): """ Ex: "where in the world is the Eiffel Tower" """ thing = Group(Plus(Pos("IN") | Pos("NP") | Pos("NNP") | Pos("NNPS")), "thing") regex = Lemma("where") + Question(Lemmas("in the world")) + Lemma("be") + \ Question(Pos("DT")) + thing + Question(Pos(".")) def interpret(self, match): thing = HasKeyword(match.thing.tokens) location = LocationOf(thing) location_name = LabelOf(location) return location_name, "enum"
class AlbumsOfQuestion(QuestionTemplate): """ Ex: "List albums of Pink Floyd" "What albums did Pearl Jam record?" "Albums by Metallica" """ regex = (Question(Lemma("list")) + (Lemma("album") | Lemma("albums")) + \ Pos("IN") + Band()) | \ (Lemmas("what album do") + Band() + (Lemma("record") | Lemma("make")) + Question(Pos("."))) | \ (Lemma("list") + Band() + Lemma("album")) def interpret(self, match): album = IsAlbum() + ProducedBy(match.band) name = NameOf(album) return name, "enum"