feat: improve normalizing of titles

This commit is contained in:
Benex254
2024-08-22 20:35:43 +03:00
parent add35ce682
commit 9639fd8c05
6 changed files with 42 additions and 14 deletions

View File

@@ -3,9 +3,24 @@ Just contains some useful data used across the codebase
"""
# useful incases where the anilist title is too different from the provider title
anime_normalizer = {
"1P": "one piece",
"Magia Record: Mahou Shoujo Madoka☆Magica Gaiden (TV)": "Mahou Shoujo Madoka☆Magica",
"Dungeon ni Deai o Motomeru no wa Machigatte Iru Darouka": "Dungeon ni Deai wo Motomeru no wa Machigatteiru Darou ka",
'Hazurewaku no "Joutai Ijou Skill" de Saikyou ni Natta Ore ga Subete wo Juurin suru made': "Hazure Waku no [Joutai Ijou Skill] de Saikyou ni Natta Ore ga Subete wo Juurin Suru made",
anime_normalizer_raw = {
"allanime": {
"1P": "one piece",
"Magia Record: Mahou Shoujo Madoka☆Magica Gaiden (TV)": "Mahou Shoujo Madoka☆Magica",
"Dungeon ni Deai o Motomeru no wa Machigatte Iru Darouka": "Dungeon ni Deai wo Motomeru no wa Machigatteiru Darou ka",
'Hazurewaku no "Joutai Ijou Skill" de Saikyou ni Natta Ore ga Subete wo Juurin suru made': "Hazure Waku no [Joutai Ijou Skill] de Saikyou ni Natta Ore ga Subete wo Juurin Suru made",
},
"aniwatch": {"My Star": "Oshi no Ko"},
"animepahe": {},
}
def get_anime_normalizer():
"""Used because there are different providers"""
import os
current_provider = os.environ["CURRENT_FASTANIME_PROVIDER"]
return anime_normalizer_raw[current_provider]
anime_normalizer = get_anime_normalizer()

View File

@@ -30,10 +30,9 @@ def anime_title_percentage_match(
Returns:
int: the percentage match
"""
if normalized_anime_title := anime_normalizer.get(
possible_user_requested_anime_title
):
possible_user_requested_anime_title = normalized_anime_title
possible_user_requested_anime_title = anime_normalizer.get(
possible_user_requested_anime_title, possible_user_requested_anime_title
)
# compares both the romaji and english names and gets highest Score
title_a = str(anime["title"]["romaji"])
title_b = str(anime["title"]["english"])

View File

@@ -90,6 +90,7 @@ def download(
from ...AnimeProvider import AnimeProvider
from ...libs.anime_provider.types import Anime
from ...libs.fzf import fzf
from ...Utility.data import anime_normalizer
from ...Utility.downloader.downloader import downloader
from ..utils.tools import exit_app
from ..utils.utils import (
@@ -149,7 +150,10 @@ def download(
if config.auto_select:
selected_anime_title = max(
search_results_.keys(), key=lambda title: fuzz.ratio(title, anime_title)
search_results_.keys(),
key=lambda title: fuzz.ratio(
anime_normalizer.get(title, title), anime_title
),
)
print("[cyan]Auto selecting:[/] ", selected_anime_title)
else:

View File

@@ -33,6 +33,7 @@ def search(config: Config, anime_titles: str, episode_range: str):
from ...libs.anime_provider.types import Anime
from ...libs.fzf import fzf
from ...libs.rofi import Rofi
from ...Utility.data import anime_normalizer
from ..utils.mpv import run_mpv
from ..utils.tools import exit_app
from ..utils.utils import (
@@ -67,7 +68,10 @@ def search(config: Config, anime_titles: str, episode_range: str):
if config.auto_select:
search_result = max(
search_results_.keys(), key=lambda title: fuzz.ratio(title, anime_title)
search_results_.keys(),
key=lambda title: fuzz.ratio(
anime_normalizer.get(title, title), anime_title
),
)
print("[cyan]Auto Selecting:[/] ", search_result)

View File

@@ -145,6 +145,8 @@ class Config(object):
self.anime_list: list = self.user_data.get("animelist", [])
self.user: dict = self.user_data.get("user", {})
os.environ["CURRENT_FASTANIME_PROVIDER"] = self.provider
def update_user(self, user):
self.user = user
self.user_data["user"] = user

View File

@@ -201,13 +201,17 @@ def get_basic_anime_info_by_title(anime_title: str):
anilist_data["data"]["Page"]["media"],
key=lambda anime: max(
(
fuzz.ratio(anime_title, str(anime["title"]["romaji"])),
fuzz.ratio(anime_title, str(anime["title"]["english"])),
fuzz.ratio(
anime_title.lower(), str(anime["title"]["romaji"]).lower()
),
fuzz.ratio(
anime_title.lower(), str(anime["title"]["english"]).lower()
),
)
),
)
return {
"idAilist": anime["id"],
"idAnilist": anime["id"],
"idMal": anime["idMal"],
"title": {
"english": anime["title"]["english"],