Kelbrum is an anime recommendation system designed to suggest anime titles similar to those chosen by users. It uses K-means++ clustering with a custom distance function, which is a combination of the Manhattan and Dice distance. The custom distance function assigns weighted values to each property of an anime such as its type, genres, score to compute the distance between two separate anime.
The frontend of the project was initially set up using Vite.js for development purposes, but has since transitioned to utilize Create React App, in conjunction with React, React Router, TailwindCSS and DaisyUI.
The backend of this project, aka the 'heart' of the project was built utilizing Tensorflow.js in combination with external libraries such as ml-kmeans, ml-distance, and simple-statistics. Additionally, to perform TF-IDF analysis on anime synopses, natural was used alongside remove-stopwords, word-list, and lemmatizer.
Upon combining these two parts, the project comes together in the form, that is, Kelbrum.
Important
The data used within this project was possible thanks to the following:
- Original Kaggle Dataset - The anime dataset was read and processed into a custom JavaScript class known as AnimeEntry.
- JikanAPI - Missing information such as
pageURL,imageURL,trailerURLand other existing properties which may have needed updates were updated by making several API requests to JikanAPI, which contains anime information obtained from MyAnimeList.
All external images and text used within this app belong to their respective owners.
- ๐ Table of Contents
- ๐ Features
- ๐ ๏ธ Tech Stack
- ๐ Prerequisites
- โก Setup Instructions
- ๐ Available Scripts
- โจ Acknowledgments
- ยฉ๏ธ License
- The ability to search for any anime within the existing dataset via a search bar
- A homepage featuring a hero section that encourages users to search for an anime and displays 10 anime randomly selected that meet a minimum average score, providing users with immediate recommendations
- The ability to view all anime grouped together based on properties such as
genres,studios,seasons, etc - The ability to view the top 100 anime within the existing set of anime, based on average score
- A dedicated anime details page that enables users to view detailed information about an anime and receive recommendations based on similarity
- The ability to view 10 unique random anime recommendations and view up to 200 recommendations per anime (not all anime will have that many recommendations)
- The ability to grow and accommodate other content types such as
manga,manhwa, andmanhua - The capability to prioritize anime properties based on assigned weights and adjust the recommendation algorithm at any time using the provided K-means JSON file and feature tensors
Backend:
Frontend:
Hosting:
- Firebase
- Analytics using Google Analytics (Based on recommended Firebase config)
Documentation:
- Docs are built using Docusaurus
- Search functionality provided by: docusaurus-lunr-search
- Analytics using Google Analytics
- Documentation site hosted via GitHub Pages
Ensure that the following dependencies are installed onto your machine by following the Setup Instructions.
- Clone this repository to your local machine.
git clone https://github.com/vikiru/kelbrum.git
cd kelbrum- Download and install all required dependencies.
pnpm install- Start the app in the development environment.
pnpm start- Build the project files and optimize for production.
pnpm build- Preview the production build locally.
pnpm preview- Lint files using Biome.
pnpm lint- Format files using Biome.
pnpm format- Run TypeScript type checks without emitting files.
pnpm typecheck- Check unused dependencies and files with Knip.
pnpm unused- Prepare Git hooks via Lefthook.
pnpm postinstall- csv-parse
- PapaParse
- lodash
- lemmatizer
- MiniSearch
- React Infinite Scroller
- react-slick
- remove-stopwords
- slick-carousel
- tailwind-scrollbar
- word-list
- SimpleIcons
- Tensorflow.js
- Tensorflow.js Documentation
- Machine Learning Crash Course by Google
- Firebase
- Starlight
- Astro
- starlight-links-validator
- starlight-theme-rapide
- Docusaurus
- GitHub Pages
- Shields Badges
- Semantic Release
- Lefthook
- Knip
- regex101
- Favicon Generator
Various web articles for research and learning, such as:
- 17 types of similarity and dissimilarity measures used in data science
- A Guide to Content-Based Filtering In Recommender Systems
- Gower's Distance
- Introduction to similarity metrics
- Types of recommendation systems & their use cases
- Supervised vs. Unsupervised Learning: Whatโs the Difference?
- What is unsupervised learning?
Additionally, this project would not be possible without the following sources of information:
All external images and text used within this app belong to their respective owners.
The contents of this repository are licensed under the terms and conditions of the MIT license.
MIT ยฉ 2024-present Visakan Kirubakaran.
