From UBC Wiki

Course Recommender


Jennifer Ahn, Curtis Fox

What is the problem?

We will investigate how Prolog can be used to implement a course recommender system using content-based filtering.

What is the something extra?

For our recommendation system, we added a feature that can suggest courses to the user based on tags (tags are just descriptors for a course), allowing the user to easily find courses that match their interests, rather than just searching for courses by simple attributes like year level. As well, our system asks the user questions by outputting questions to the console, allowing the user to customize their course search depending on what exactly they want to filter by.

What did we learn from doing this?

One of the main things we learned from doing this project was how to use Prolog to define multiple rules that a more realistic real world system must follow. This was very important for our chosen project, since designing the course recommendation system relied heavily on having multiple rules implemented. For example, we needed to ensure that if the user only wants courses recommended to them that they have the pre-reqs for, that only these courses are returned.

Overall, Prolog was very suitable for building a course recommendation system. Building up the system was very easy to do systemically, since we were able to add rules one by one, modify them, and then test them as we go along. For example, we could have our main recommendation function only rely an atom that check pre-reqs. However, we could easily add another atom to it's body that also checks the department of courses, and now filter courses by pre-reqs and department, and then check if our system is still working. In addition, Prolog's pattern matching was very helpful for defining different rules in our system. In particular, when defining different ways the user may want to filter by year level, we were able to define different rules like '=3' for third year courses, and '>=2' for courses that are second year or higher. We could then have our Prolog program match the user's input, which could be something like '=3', to the appropriate rule (and therefore give the user the correct results).

One major thing that Prolog did not seem suitable for was designing a GUI or anything more visual in nature, which for our project would have been helpful, since it would have been nice to be able to let the user interact with a GUI in order to choose the exact features that they want to filter courses by. After spending a fair amount of time doing internet searches, it seemed that either designing a GUI would be overly complicated, or would rely heavily on using other languages, so we decided in the end that building a GUI for our system would be infeasible. Instead, we decided to stick with outputting commands to the console, and the user providing their input through the console.

Links to code etc