ydz-one / movie-recommender

Movie recommendation program that implements a k-nearest neighbors collaborative filtering system for movie preference prediction.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Movie Recommender: Group Project for CIT 594

This readme illuminates the following:

-UML Class Diagram
-UML Sequence Diagram

@authors zyud, oliviahw
(Yuduo Zhao, Olivia Woo)

________________________________________________________________________________

README for UML Class Diagram:

0) Overall Design:

The design for this program follows a three-tier architecture model with a
presentation tier, application tier, and data tier.

The presentation tier consists of the UserInterface class; the application tier
consists of the Recommender class; and the data tier consists of the
DataManager class, MovieDataParser class, and RatingDataParser class, with the
first handling data storage and the latter two handling data parsing.

By adopting this highly modular model of software design, we expect all parts of
the program to be easily modifiable with minimal impact on other parts. Also,
the modularity of the program would make it easier for unit testing and human
comprehension.


1) UserInterface:

This class handles retrieving input from the user and providing results to the
user via the console.


2) Logger:

This class logs the user input data and writes it out to an external file.


3) Recommender:

This class provides the methods to calculate movie preference predictions and
movie recommendations from movie and user rating data.


4) DataManager:

This class handles the storage and processing of the data parsed from
MovieDataParser and RatingDataParser and provides access to them for other
classes.


5) MovieDataParser:

This class provides methods to parse and clean the movies.dat file into a
collection of Movie objects to be stored in DataManager.


6) RatingDataParser:

This class provides methods to parse and clean the ratings.dat file into a
collection of User objects with to be stored in DataManager.


7) Movie:

This class is a POJO that holds relevant data for a movie.


8) User:

This class is a POJO that holds relevant data for a user.

________________________________________________________________________________

README for UML Sequence Diagram:

1) Setting Up:

A minor side note: Due to the instructions, in which we must generate a
prediction given user u and item i, our Movie object is specified as i and User
object is specified as u.

The UML Sequence Diagram beings with the UserInterface (which contains the main).
It creates a Recommender object, which in turn needs to create a DataManager
object.

To create the DataManager, it must first collect all the movie objects via
MovieDataParser. The DataManager collects all the user objects via
RatingDataParser: In order to eliminate the need for a Rating object, after
executing parseMovies(), the DataManager has the movie information it needs to
read the ratings data file and to populate User objects with all the appropriate
movie ratings.

Following parseRatings(), the DataManager also has all the information it needs
to execute fillMovieRatings(), which will fill the ratings HashMaps of the users
and movies.

The DataManager is now ready to be given to the Recommender object, and the
Recommender object is ready to be used.


2) Generating Prediction:

In UserInterface, we generate a prediction for User u and Movie i via
Recommender's predictPreference() method. This method requires several processes
prior to returning the result; thus, we represent these processes within the
overall predictPreference arrow-loop.

The Recommender gets all users and movies stored in the DataManager object. This
information is used to find the neighbors of user u.

calcPearsonSim() calculates the similarity between u and each of the other users.
This information is used to evaluate predictPreference().

Finally, the result of the prediction is returned to the UserInterface.

About

Movie recommendation program that implements a k-nearest neighbors collaborative filtering system for movie preference prediction.


Languages

Language:Java 100.0%