A MyAnimeList-based anime recommendation system

Overview

anote

anote is a MyAnimeList-based anime recommendation system written in Rust. It uses genre combinations to determine what recommendations to give which MAL user. This project is trained on hundreds of thousands of public animelists from MAL.

The formula

The formula for calculating the weight of genres an anime has:
anime score * (times rewatched + 1) * (is_rewatching + 1)

How it works

Genre combinations are basically used to find similar users' anime entries.
For example, let's say we have user A and user B, they are alike and like the same genres which is objectively obvious in their animelists. If they really love the same genres and rated them almost the same, then the genre combination will be the same. Which in turn groups them together and recommends them the same animes as retrieved from the database. The anime scores table in the database exists for this purpose. While training, user animelists are taken and their genre combinations are calculated using the algorithm. When a genre combination is added to the database, a three things happen:

  1. The animes that the genre combination has are added to the animes database table.
  2. The genre combination ID is added to the genre_combos database table.
  3. For each anime in the genre combination, 10 anime scores are added to the anime_scores database table with the score defaulting to one. There is also a many-to-many relationship defined in this table for the genre combination's ID and the score's associated anime's ID

If a genre combination already exists, we add the current genre combinations animes' scores (1) to the already existing anime scores. The higher the score, the better it is. Thus the score defines how many people with the same genre combination have watched the same anime.

By knowing the genre combination of a user, we can retrieve the anime scores (with the animes associated with them) that have defined a relationship with the user's genre combination.

Things you should know

  1. Your genre combination is calculated based on how you score your animes. If you don't rate them carefully and just spit out random numbers, your genre combination will differ more than what you say you like. A genre combination looks like this: 22010010 And there is an order in this large number that does not make any sense to you. For example, the first number is 22, the second 10 and the third is 1 (the extra zero you see after each genre ID is used as a seperator) Romance (22) comes first. This means that the algorithm has determined that Romance objectively was the most liked genre.

  2. The recommendations you get are not guaranteed to be to your liking. The recommendations are simply animes that come from other users that had the same genre combination as you. The "Top 3 Animes" you see on the website are the highest scored ones, meaning they were the most watched ones among your genre combination group.

  3. The MINIMUM_ANIMELIST_SIZE configuration in anote.toml is why you might get the User AnimeList is too small error in the website. This value can be lowered to a minimum of 10 but I decided to go with 50. I believe this will help avoid newbies getting inaccurate recommendations. I mean, why are they even here. They have a lot more to discover 50 animes is nothing, so why use this as a discovery tool? Am I right?

TODO

  • Add titles to anime cards in the recommendations page
  • Use the user's favorite animes as a way to improve their genre combination calculation
  • Add queueing function to avoid getting rate limited by MAL
    -- OR --
  • Get the user's animelist directly from the client-side
  • Exclude user's already watched animes from the recommendations

License

This project is licensed under the GNU General Public License v3.

You might also like...
A CLI tool for CIs and build scripts, making file system based caching easy and correct (locking, eviction, etc.)

FS Dir Cache A CLI tool for CIs and build scripts, making file system based caching easy and correct (locking, eviction, etc.) When working on build s

Fast Symbol Ranking based compressor. Based on the idea of Matt Mahoney's SR2

Fast Symbol Ranking based compressor. Based on the idea of Matt Mahoney's SR2

Pure-Rust rewrite of the Linux fontconfig library (no system dependencies) - using ttf-parser and allsorts

rust-fontconfig Pure-Rust rewrite of the Linux fontconfig library (no system dependencies) - using allsorts as a font parser in order to parse .woff,

A cross-platform graphical process/system monitor with a customizable interface and a multitude of features
A cross-platform graphical process/system monitor with a customizable interface and a multitude of features

A cross-platform graphical process/system monitor with a customizable interface and a multitude of features. Supports Linux, macOS, and Windows. Inspired by both gtop and gotop.

A system clipboard command line tools which inspired by pbcopy & pbpaste but better to use.

rclip A command line tool which supports copy a file contents to the system clipboard or copy the contents of the system clipboard to a file. Install

Simple system monitoring app that runs on terminal. Made purely with Rust.
Simple system monitoring app that runs on terminal. Made purely with Rust.

What is it? RCTOP is a simple WIP system monitoring app that runs purely on terminal and doesn't feature GUI. One can compare it to htop, but more str

Self-contained template system with Handlebars and inline shell scripts

Handlematters Self-contained template system with Handlebars and inline shell scripts Introduction Handlematters is a template system that combines Ha

Modern file system navigation tool on Unix
Modern file system navigation tool on Unix

monat -- Modern file system Navigator 简体中文 Introduction monat is a Unix shell auxiliary command focusing on the navigation of the file system, especia

🌳 A lightning-fast system fetch tool made with Rust.
🌳 A lightning-fast system fetch tool made with Rust.

🌳 treefetch A lightning-fast minimalist system fetch tool made in Rust. Even faster than neofetch and pfetch. Made to practice my new Rust skills 🦀

Comments
  • Bump h2 from 0.3.25 to 0.3.26

    Bump h2 from 0.3.25 to 0.3.26

    Bumps h2 from 0.3.25 to 0.3.26.

    Release notes

    Sourced from h2's releases.

    v0.3.26

    What's Changed

    • Limit number of CONTINUATION frames for misbehaving connections.

    See https://seanmonstar.com/blog/hyper-http2-continuation-flood/ for more info.

    Changelog

    Sourced from h2's changelog.

    0.3.26 (April 3, 2024)

    • Limit number of CONTINUATION frames for misbehaving connections.
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the Security Alerts page.
    dependencies 
    opened by dependabot[bot] 1
Owner
Tech student and hobbyist that likes open source and anime
null
AniTUI is a CLI (and in the future a TUI) app for searching and wathching anime in MPV.

AniTUI is a CLI (and in the future a TUI) app for searching and wathching anime in MPV. This is a Rust rewrite (quite literally a rewrite) of Pystardu

null 7 Oct 31, 2022
A ln scraper to read light novels and watch anime in your terminal (Written in rust)

Readme Table of content Why use kami Dependencies Install Linux/mac Windows Honorable mentions Why use kami Well its a fast and easy way to watch anim

mrfluffy 26 Dec 23, 2022
Crates.io library that provides high-level APIs for obtaining information on various entertainment media such as books, movies, comic books, anime, manga, and so on.

Crates.io library that provides high-level APIs for obtaining information on various entertainment media such as books, movies, comic books, anime, manga, and so on.

consumet-rs 5 Aug 13, 2023
First project in rust which will be to make an accounts system & Leaderboard/Score system

rust-backend this is my first project in rust which will be to make a backend for compsci project it will include: Accounts, Player Achievements (if I

NaughtyDog6000 2 Jul 13, 2023
Another TUI based system monitor, this time in Rust!

Another TUI based system monitor, this time in Rust!

Caleb Bassi 2.1k Jan 3, 2023
An easy file system based on eazy-fs of rcore.

fs-rs An easy mixed index file system based on eazy-fs of rcore. Usage if you don't have rust environment, you can download rust by: curl https://sh.r

Clstilmldy 9 Dec 21, 2022
An efficient pictures manager based on custom tags and file system organization.

PicturesManager An efficient pictures manager based on custom tags and file system organization. Developed with Tauri (web app) with a Rust backend an

Clément Grennerat 2 Dec 21, 2022
RedMaple offers an oppinionated yet extremely flexible data modeling system based on events for back-end applications.

RedMaple offers an oppinionated yet extremely flexible data modeling system based on events for back-end applications.

Amir Alesheikh 4 Mar 5, 2023
Ideas => Creations, a multi-language CMS(Content Management System) based on Rust Web stacks, with long-term upgrade and maintenance.

Ideas => Creations 中文 RustHub: Rust ideas yesterday, shining creations today! This repository holds source code used to run https://rusthub.org, it's

rusthub.org 4 May 9, 2023
Revolutionize handheld gaming with adaptive game settings. Optimize graphics and gameplay experience based on real-time system metrics. Open-source project empowering developers to enhance games on portable devices

Welcome to the server-side application for the HarmonyLink project. This innovative software is developed with the Rust programming language and is ai

Jordon Brooks 5 Jun 28, 2023