The goal of this project is to use natural language processing (rather than simple pattern matching as in Eliza) to implement a dialogue agent that can suggest a CS 1500-level course to take next semester, based on user preferences regarding class time and instructor.
Your system should take as input English sentences, and extract enough information to query the information in the following url, based on the Hours and/or Instructor fields. Feel free to create a local database with only the subset of courses and fields required for this assignment.
Here are some example dialogues:
Your agent should use a finite-state automaton to implement its dialogue manager, with transitions based on semantic analysis of the user input. You should implement either the D-Recognize or ND-Recognize algorithms (from class and the handout) to process inputs using your dialogue FSA.
To implement semantics (e.g., to compute contains-instructor(answer)), your implementation should use simple pattern matching. However, you will only be required to process temporal expressions of the form "morning", "afternoon", "evening", "in the morning", "in the afternoon", "in the evening", "before hh:mm", "after hh:mm", "at hh:mm". For instructors, you only need to recognize expressions of the form "Dr. Surname", "Professor Surname". The wildcard "I don't care" is also an acceptable answer for either names or times.
You should be able to handle user inputs that provide preferences in one shot (as in the first dialogue), or incrementally (as in the second). You should also have a repair strategy for handling user inputs that your system cannot initially process (as in the second dialogue), and for handling other types of complications (e.g., specification of multiple professors).
Your grade will be based both on a set of training sentences to be provided, and an unseen test set.
Please submit (at least in hardcopy) a graphical representation of your dialogue manager. Please also submit both hardcopies and electronic versions of your source code, a README file describing how to run it, and a transcript highlighting your program's best features. Bring the hardcopies to class, and submit electronically following the class submission policies.
IMPORTANT NOTE: Beginning with this homework, points will be deducted if the submission procedure is not followed.