{"id":18377291,"url":"https://github.com/bbc/clientside-recommender","last_synced_at":"2025-04-06T21:31:30.582Z","repository":{"id":136960083,"uuid":"9620534","full_name":"bbc/clientside-recommender","owner":"bbc","description":"A client-side recommender system implemented in Javascript.","archived":false,"fork":false,"pushed_at":"2015-04-09T15:38:26.000Z","size":1136,"stargazers_count":39,"open_issues_count":0,"forks_count":10,"subscribers_count":29,"default_branch":"master","last_synced_at":"2025-03-22T06:51:21.603Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bbc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-04-23T10:23:00.000Z","updated_at":"2023-09-04T10:25:26.000Z","dependencies_parsed_at":"2023-03-12T20:50:42.019Z","dependency_job_id":null,"html_url":"https://github.com/bbc/clientside-recommender","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbc%2Fclientside-recommender","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbc%2Fclientside-recommender/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbc%2Fclientside-recommender/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbc%2Fclientside-recommender/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bbc","download_url":"https://codeload.github.com/bbc/clientside-recommender/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247555111,"owners_count":20957707,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-06T00:27:37.622Z","updated_at":"2025-04-06T21:31:30.261Z","avatar_url":"https://github.com/bbc.png","language":"Java","readme":"clientside-recommender\n=================\n\nA client-side recommender system implemented in Javascript. It uses the Weighted Item kNN algorithm, as implemented in the MyMediaLite Recommender System Framework which can be used to train the required kNN model.\n\n* [http://mymedialite.net/](http://mymedialite.net/)\n\nFor the theoretical backgound see \"Item-based nearest neighbor recommendation\" in:\n\n    Recommender Systems: An Introduction\n    Dietmar Jannach, Markus Zanker, Alexander Felfernig, Gerhard Friedrich\n    ISBN: 9780521493369\n    Pages: 18 - 20\n\nAn example application is available here:\n\n* [http://sibyl.prototyping.bbc.co.uk/](http://sibyl.prototyping.bbc.co.uk/)\n\nTo use the engine you must to load two JavaScript files - one containing the engine, the other containing the recommender model.\n\nRecommender engine\n--------------------\n\nThe engine implements pre-filtering, prediction, ranking and post-filtering.\n\n* [engine/receng-wknn-1.0.js](https://github.com/bbcrd/clientside-recommender/blob/master/engine/receng-wknn-1.0.js)\n    \nIt provides two methods:\n\n1) Get an ordered list of all items\n\n    Receng.getChoices(genre, type, likes, dislikes)\n\nYou set the order of this list when you build the model. For example it could be in order of popularity (i.e. non-personalised recommendations)\n\n2) Get an ordered list of recommendations based on the user's likes and dislikes\n\n    Receng.getRecs(genre, type, likes, dislikes)\n\nParameters for both methods:\n\n*type* is \"all\" (or null or undefined) or a string representing the required media type e.g. \"0\" for audio or \"1\" for video.\n\n*genre* is \"all\" (or null or undefined) or a string representing the required content genre e.g. \"0\" for comedy or \"1\" for drama etc.\n\n*likes* and *dislikes* are arrays of item IDs which the user likes or dislikes. If null or undefined they are ignored. In the getChoices method these IDs are simply blacklists (they remove the items from the results). In the getRecs method they are used to personalize the results - if no likes or dislikes are provided getRecs returns the same list as getChoices.\n    \nBoth methods return an indexed array of programmes (the best recommendation is at index 0). Each entry is an associative array with the following key/value pairs:\n    \n\u003ctable\u003e \n\u003ctr\u003e\u003cth\u003eKey\u003c/th\u003e\u003cth\u003eValue\u003c/th\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003ep\u003c/td\u003e\u003ctd\u003eitem D\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003et\u003c/td\u003e\u003ctd\u003etitle\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eg\u003c/td\u003e\u003ctd\u003egenre\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003ev\u003c/td\u003e\u003ctd\u003emedia type\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003ex\u003c/td\u003e\u003ctd\u003eexpiry date (optional) e.g. \"2012/12/27 20:55:00\"\u003c/td\u003e\u003c/tr\u003e \n\u003c/table\u003e\n\nItems beyond their expiry date (if present) will not be returned.\n\nThe engine includes a genre diversification post-filter which prevents the same genre appearing more than once in three consecutive recommendations. To disable set the diversify variable in the getRecs prototype to false.\n\nRecommender model \n-------------------\n\nThe model file contains a kNN model and some basic item metadata which is used for filtering and presentation purposes. The metadata consists of title, genre, media type and an optional expiry data but additional fields can be added as required.  For an example model file see: \n\n* [engine/example_model.js](https://github.com/bbcrd/clientside-recommender/blob/master/engine/example-model.js)\n\nThe models can either use content-based filtering (based on item-attributes) or use collaborative filtering (based on user-item feedback). Two example files show how to build these models:\n \n* [src/AttributeBasedModelBuilder.java](https://github.com/bbcrd/clientside-recommender/blob/master/src/AttributeBasedModelBuilder.java)\n* [src/CollaborativeFilteringModelBuilder.java](https://github.com/bbcrd/clientside-recommender/blob/master/src/CollaborativeFilteringModelBuilder.java)\n\nNote that these files have several TODO comments where you need to supply data of some kind. Both require this JAR file in the classpath:\n\n* [lib/mymedialite.jar](https://github.com/bbcrd/clientside-recommender/tree/master/lib)\n    \nLicensing terms and authorship\n------------------------------\n\nSee [COPYING](COPYING)\n\n## Authors\n\nSee [AUTHORS](AUTHORS)\n\n## Acknowledgements\n\nThis work was co-funded through the European Commission FP7 project ViSTV-TV under grant agreement No. 269126.\n\n## Copyright\n\nCopyright 2013 British Broadcasting Corporation\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbbc%2Fclientside-recommender","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbbc%2Fclientside-recommender","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbbc%2Fclientside-recommender/lists"}