From UBC Wiki

Courselog - Courses Related Videos Recommender

Office Hours:
Class Schedule:
Important Course Pages
Lecture Notes
Course Discussion

What is the problem?

Finding relevant videos related to courses we are taking in university or topics we are interested in should be easy and manageable. We will develop a program that implements an NLP based recommendation system for videos on course-related topics. A user should be able to query object data, as well as utilize and compare informative relations between videos and courses. We will recommend YouTube and Khan Academy videos for topics in computer science and math specifically, but this can easily be extendable to other subjects areas as well.

What is the something extra?

We plan to implement a JSON database that is parsed into Prolog using Prolog’s HTTP and JSON libraries. Furthermore, we will create an HTTP API for querying our Prolog program, if feasible. The HTTP API would be accessible to users through a web-browser as well, making the Course Video Recommender easier to use.

What did we learn from doing this?

Prolog is powerful when it comes to implementing simple NLP queries to find information quickly. It was insightful to think about how to keep our queries intuitive and extract the most meaningful relationships so that we could best serve the user in creating a positive learning experience. We generally found it straightforward to model our queries, but we had to initially decide upon a database/proposition structure that was easy to use for the types of queries we implemented. Managing lists in Prolog (for our queries) also felt familiar given our experience with Haskell.

We faced some challenges when it came to parsing JSON and making an API. The primary challenge was to find relevant documentation and examples for using the HTTP and JSON packages. For retrieving and parsing JSON, this blog post was extremely helpful in getting us started, and we built the rest on top of it.

The official documentation for writing web servers in Prolog is also sparse, which skips a lot of important information about Prolog’s inbuilt http functionalities. However, online examples served as great references for us to build our server on top of. After doing so, we found that writing REST servers in Prolog is actually efficient because of the minimal boilerplate code and setup required.

Overall, Prolog clearly has potential for rule-based logical query data systems coupled with web-based integrations. The benefits of using Prolog for this project was that Prolog was quite efficient and reasoning about and isolating the rule set for our queries was very readable and easy to expand. The major drawbacks, were the lack of documentation/resources and some struggles with debugging malformed query inputs and confusing warnings/errors.

In terms of future improvements, we would continue to build upon our queryable knowledgebase, expand the scope of our project to other subject areas and continue to support additional usability features such as wrapping our application in an expanded GUI.

Links to code etc