macro(past_tense, past). macro(not_past_tense, not(past)). macro(when_pattern, itsu). macro(when_pattern, term(null, nanji, [])). macro(where_pattern, doko). macro(where_pattern, basyo). macro(where_pattern, term(dono, heya, [])). macro(who_pattern, dare). macro(who_pattern, dareka). macro(what_pattern, nani). macro(what_pattern, domna). macro(what_pattern, dono). macro(what_pattern, ikutsu). macro(what_pattern, nan_bon). macro(next_pattern, term(null, tsugi, [])). macro(next_pattern, term(null, kondo, [])). macro(next_pattern, term(null, jikai, [])). macro(next_pattern, term(null, ichiban_saisyo, [])). macro(last_pattern, term(null, saigo, [])). macro(last_pattern, term(null, ichiban_saikin, [])). macro(meeting, kaigi). macro(meeting, miitingu). macro(attend, syusseki_suru). macro(attend, kuru). macro(attend, deru). macro(morning_pattern, gozen). macro(morning_pattern, asa). macro(morning_pattern, kesa). macro(afternoon_pattern, gogo). macro(gen_ni_or_temporal, gen). macro(gen_ni_or_temporal, ni). macro(gen_ni_or_temporal, temporal). macro(gen_or_ni, gen). macro(gen_or_ni, ni). macro(saikin_koko_or_kako, koko). macro(saikin_koko_or_kako, kako). macro(saikin_koko_or_kako, saikin). macro(kagetsukan, kagetsukan). macro(kagetsukan, kagetsu). %========================================================= % Aggregate expressions lf_boundary(term(null, @meeting, List), X^aggregate(next_n_meetings(1), X)) :- member([gen, @next_pattern], List). lf_boundary(term(null, @meeting, List), X^aggregate(last_n_meetings(1), X)) :- member([gen, @last_pattern], List). % Hacky rules to get around bad attachments lf_boundary(term(null, _, List), X^aggregate(next_n_meetings(1), X)) :- member([gen, @next_pattern], List), member([gen, term(null, @meeting, [])], List). lf_boundary(term(null, _, List), X^aggregate(last_n_meetings(1), X)) :- member([gen, @last_pattern], List), member([gen, term(null, @meeting, List)], List). %========================================================= % Meta-commands lf_pattern(kurikaesu, command=repeat). %========================================================= % Utterance types % YNQ lf_pattern([question, _], ( not(itsu), not(term(null, nanji, [])), not(doko), not(term(dono, heya, [])), not(nani), not(domna), not(dono), not(dare), not(dareka), not(nan_bon), not(ikutsu) ), utterance_type=ynq). lf_pattern([phrase, _], ( not(itsu), not(term(null, nanji, [])), not(doko), not(term(dono, heya, [])), not(nani), not(domna), not(dono), not(dare), not(dareka), not(nan_bon), not(ikutsu) ), utterance_type=ynq). % WHQ lf_pattern([polite_imperative | _], utterance_type=whq). lf_pattern( @when_pattern, utterance_type=whq). lf_pattern( @who_pattern, utterance_type=whq). lf_pattern( @what_pattern, utterance_type=whq). lf_pattern( @where_pattern, utterance_type=whq). lf_pattern(dareka, utterance_type=whq). %========================================================= % Reference to current meeting % "kaigi ni syusseki suru (etc)" without temporal modifier lf_pattern( @attend, ( [ni, term(null, @meeting, [])], not([temporal, _]) ), referent_from_context=meeting). % "syusseki suru (etc)" without relative clause and without qualified object lf_pattern( @attend, ( not([clause, form(_, _)]), not([ni, term(null, kaigi, [_ | _])]), not([ni, term(null, miitingu, [_ | _])]) ), referent_from_context=meeting). %========================================================= % When lf_pattern( @when_pattern, % Condition ( not([kara, _]), not([made, _]), not(owaru), not(hajimaru) ), query_object=when). % Start time lf_pattern( @when_pattern, % Condition [kara, _], query_object=start_time). lf_pattern( @when_pattern, % Condition hajimaru, query_object=start_time). % End time lf_pattern( @when_pattern, % Condition owaru, query_object=end_time). lf_pattern( @when_pattern, % Condition [made, _], query_object=end_time). % Where lf_pattern( @where_pattern, query_object=where). % Who lf_pattern( @who_pattern, query_object=attendee). % Phone number lf_pattern(denwa_bangou, query_object=phone_number). % Address lf_pattern(juusyo, term(name, PersonName, _), query_object=attendee_address) :- is_person_name(PersonName). % Email address lf_pattern(meeru_adoresu, query_object=email_address). %========================================================= % Day before yesterday lf_pattern(ototsui, on_date=referent(day_before_yesterday)). lf_pattern(ototoi, on_date=referent(day_before_yesterday)). % Yesterday lf_pattern(kinou, on_date=referent(yesterday)). % Today lf_pattern(kyou, on_date=referent(today)). lf_pattern(kesa, on_date=referent(today)). % Tomorrow lf_pattern(ashita, on_date=referent(tomorrow)). lf_pattern(asu, on_date=referent(tomorrow)). % Day after tomorrow lf_pattern(asatte, on_date=referent(day_after_tomorrow)). % on lf_pattern([ @gen_ni_or_temporal, date(Year, Month, Day)], on_date=referent(named_date(Day, Month, Year))) :- number(Year), number(Month), number(Day). lf_pattern([ @gen_ni_or_temporal, date(unspecified, Month, Day)], % Condition @not_past_tense, on_date=referent(nearest_named_date_in_future(Day, Month))) :- number(Month), number(Day). lf_pattern([ @gen_ni_or_temporal, date(unspecified, Month, Day)], % Condition @past_tense, on_date=referent(nearest_named_date_in_past(Day, Month))) :- number(Month), number(Day). % on lf_pattern([ @gen_ni_or_temporal, term(null, DayOfWeek, _)], % Condition @not_past_tense, on_date=referent(nearest_named_weekday_in_future(EngDayOfWeek))) :- japanese_dayofweek(DayOfWeek, EngDayOfWeek). lf_pattern([ @gen_ni_or_temporal, term(null, DayOfWeek, _)], % Condition @past_tense, on_date=referent(nearest_named_weekday_in_past(EngDayOfWeek))) :- japanese_dayofweek(DayOfWeek, EngDayOfWeek). % In June (past) lf_pattern(date(unspecified, Month, unspecified), % Condition @past_tense, in_interval=referent(nearest_named_month_in_past(Month))) :- number(Month). % In June (future) lf_pattern(date(unspecified, Month, unspecified), % Condition @not_past_tense, in_interval=referent(nearest_named_month_in_future(Month))) :- number(Month). lf_pattern(date(Year, Month, unspecified), in_interval=referent(named_month(Month, Year))) :- number(Year), number(Month). % The next N days lf_pattern(term(N, nichikan, [[nn, term(null, mukou, [])]]), in_interval=referent(the_next_n_days(N))). % The next N weeks lf_pattern(term(N, syuukan, [[nn, term(null, mukou, [])]]), in_interval=referent(the_next_n_weeks(N))). % The next N months lf_pattern(term(N, @kagetsukan, [[nn, term(null, mukou, [])]]), in_interval=referent(the_next_n_months(N))). % The last N days lf_pattern(term(N, nichikan, [[nn, term(null, @saikin_koko_or_kako, [])]]), in_interval=referent(the_last_n_days(N))). % The last N weeks lf_pattern(term(N, syuukan, [[nn, term(null, @saikin_koko_or_kako, [])]]), in_interval=referent(the_last_n_weeks(N))). % The last N months lf_pattern(term(N, @kagetsukan, [[nn, term(null, @saikin_koko_or_kako, [])]]), in_interval=referent(the_last_n_months(N))). %========================================================= % Times %