From UBC Wiki


Authors: Tony Huang, Matteo Mocellin, Ryan Wong

What is the problem?

Vancouver is a large city full of historical and cultural attractions. While visiting Vancouver for the first time, or even wanting to explore the city can be daunting with so many attractions to visit. Our program will generate tourist attractions in Vancouver based on a search criteria inputted by the user (rating, location, cost and type of activity).

What is the something extra?

The in depth aspect that we will do is allow users to give personal rankings to each tourist attraction and be able to query those attractions based on the rankings that they provided.

What did we learn from doing this?

Through this project, we gained a deeper insight on the declarative nature of Prolog through taking a user's input and dynamically saving it in our knowledge base for future queries. We also learned more about the recursive of Prolog when it makes its queries through complex sentence trees. Furthermore, our group learned about the various rules that can allow for a more enriching natural language interface, such as setting Prolog flags to display long lists of responses and dynamically changing static procedures. One limitation that was observed was that Prolog has a very poor way of dealing with user inputted errors and is not robust enough to tell the user if an input did not match what was in its knowledge base. Instead, the query would fail and would not give any meaningful explanation for why a query failed. From what we observed, there's a big constraint on the type of questions that a user can ask. Because there are various forms of grammar and syntax that a user can input, our program is not necessarily robust enough to support variations of sentences that have not already been accounted for in our knowledge base.

In conclusion, Prolog is fully capable for being used for this task. In conjunction with using recursive trees and dynamically inputted values, we were able to successfully implement our AI that can parse queries of various complexities and come up with a reasonable response. The benefit of using Prolog over an imperative language such as Java is that Prolog's symbolic approach allows us to write very concise statements that allow for sentence parsing, making it an efficient way to reason about natural language processing.