From 5ca7c5b28300b62e8c18431ded05bc7400be2e62 Mon Sep 17 00:00:00 2001 From: Kaisa Kuivalahti Date: Thu, 9 Jan 2025 17:00:48 +0200 Subject: [PATCH] EKIR-206 Add rules for missing fiction genres --- core/classifier/bisac.py | 53 +++++++++ tests/core/classifiers/test_bisac.py | 157 +++++++++++++++++++++++++++ 2 files changed, 210 insertions(+) diff --git a/core/classifier/bisac.py b/core/classifier/bisac.py index e3b2ceb0f..030f59442 100644 --- a/core/classifier/bisac.py +++ b/core/classifier/bisac.py @@ -564,6 +564,7 @@ class BISACClassifier(Classifier): m(Horror, fiction, "Vampires"), m(Horror, fiction, "Werewolves & Shifters"), m(Horror, fiction, "Zombies"), + m(Humorous_Fiction, fiction, "Absurdist"), m(Humorous_Fiction, fiction, "Humorous Stories"), m(Humorous_Nonfiction, "Young Adult Nonfiction", "Humor"), m(Law, nonfiction, "Law & Crime"), @@ -597,6 +598,58 @@ class BISACClassifier(Classifier): # well for now. # For nonfiction, "Social Topics" covers both Juvenile and YA. m(Life_Strategies, nonfiction, social_topics), + m(General_Fiction, fiction, "Adaptations & Pastiche"), + m(General_Fiction, fiction, "African American & Black"), + m(General_Fiction, fiction, "Amish & Mennonite"), + m(General_Fiction, fiction, "Animals"), + m(General_Fiction, fiction, "Asian American & Pacific Islander"), + m(General_Fiction, fiction, "Biographical"), + m(General_Fiction, fiction, "Buddhist"), + m(Urban_Fiction, fiction, "City Life"), + m(General_Fiction, fiction, "Coming of Age"), + m(Folklore, fiction, "Cultural Heritage"), + m(General_Fiction, fiction, "Disabilities"), + m(General_Fiction, fiction, "Disaster"), + m(General_Fiction, fiction, "Diversity & Multicultural"), + m(General_Fiction, fiction, "Epistolary"), + m(General_Fiction, fiction, "Family Life"), + m(General_Fiction, fiction, "Feminist"), + m(General_Fiction, fiction, "Friendship"), + m(Urban_Fiction, fiction, "Hispanic & Latino", "Urban & Street Lit"), + m(General_Fiction, fiction, "Hispanic & Latino"), + m(General_Fiction, fiction, "Holidays"), + m(General_Fiction, fiction, "Immigration"), + m(Urban_Fiction, fiction, "Indigenous", "City Life"), + m(Science_Fiction, fiction, "Indigenous", "Indigenous Futurism"), + m(Folklore, fiction, "Indigenous", "Oral Storytelling & Teachings"), + m(General_Fiction, fiction, "Indigenous"), + m(General_Fiction, fiction, "Indigenous Peoples of Turtle Island"), + m(General_Fiction, fiction, "Legal"), + m(General_Fiction, fiction, "Mashups"), + m(General_Fiction, fiction, "Media Tie-In"), + m(General_Fiction, fiction, "Medical"), + m(General_Fiction, fiction, "Middle Eastern & Arab American"), + m(General_Fiction, fiction, "Multiple Timelines"), + m(General_Fiction, fiction, "Muslim"), + m(General_Fiction, fiction, "Native American"), + m(General_Fiction, fiction, "Nature & the Environment"), + m(General_Fiction, fiction, "Neurodiversity"), + m(General_Fiction, fiction, "Own Voices"), + m(General_Fiction, fiction, "Performing Arts"), + m(General_Fiction, fiction, "Political"), + m(General_Fiction, fiction, "Psychological"), + m(General_Fiction, fiction, "Small Town & Rural"), + m(General_Fiction, fiction, "Southern"), + m(General_Fiction, fiction, "Sports"), + m(General_Fiction, fiction, "Suburban"), + m(Urban_Fiction, fiction, "Urban & Street Lit"), + m(General_Fiction, fiction, "Women"), + m(Historical_Fiction, fiction, "World Literature", something, "Colonial & Revolutionary Periods"), + m(Historical_Fiction, fiction, "World Literature", something, "Colonial & 19th Century"), + m(Historical_Fiction, fiction, "World Literature", something, "16th & 17th Century"), + m(Historical_Fiction, fiction, "World Literature", something, "18th Century"), + m(Historical_Fiction, fiction, "World Literature", something, "19th Century"), + m(General_Fiction, fiction, "World Literature"), ] @classmethod diff --git a/tests/core/classifiers/test_bisac.py b/tests/core/classifiers/test_bisac.py index 7ea903fc8..f71738718 100644 --- a/tests/core/classifiers/test_bisac.py +++ b/tests/core/classifiers/test_bisac.py @@ -250,6 +250,161 @@ def test_genre_spot_checks(self): genre_is("JUVENILE FICTION / Dystopian", "Dystopian SF") genre_is("JUVENILE FICTION / Stories in Verse (see also Poetry)", "Poetry") + # These tests cover the missing rules for new BISAC codes + genre_is("FICTION / Absurdist", "Humorous Fiction") + genre_is("FICTION / Adaptations & Pastiche", "General Fiction") + genre_is("FICTION / African American & Black / General", "General Fiction") + genre_is("FICTION / African American & Black / Women", "General Fiction") + genre_is("FICTION / Amish & Mennonite", "General Fiction") + genre_is("FICTION / Animals", "General Fiction") + genre_is("FICTION / Asian American & Pacific Islander", "General Fiction") + genre_is("FICTION / Biographical", "General Fiction") + genre_is("FICTION / Buddhist", "General Fiction") + genre_is("FICTION / City Life", "Urban Fiction") + genre_is("FICTION / Coming of Age", "General Fiction") + genre_is("FICTION / Cultural Heritage", "Folklore") + genre_is("FICTION / Disabilities", "General Fiction") + genre_is("FICTION / Disaster", "General Fiction") + genre_is("FICTION / Diversity & Multicultural", "General Fiction") + genre_is("FICTION / Epistolary", "General Fiction") + genre_is("FICTION / Family Life / General", "General Fiction") + genre_is("FICTION / Family Life / Marriage & Divorce", "General Fiction") + genre_is("FICTION / Family Life / Siblings", "General Fiction") + genre_is("FICTION / Feminist", "General Fiction") + genre_is("FICTION / Friendship", "General Fiction") + genre_is("FICTION / Hispanic & Latino / Family Life", "General Fiction") + genre_is("FICTION / Hispanic & Latino / General", "General Fiction") + genre_is("FICTION / Hispanic & Latino / Inspirational", "General Fiction") + genre_is("FICTION / Hispanic & Latino / Urban & Street Lit", "Urban Fiction") + genre_is("FICTION / Hispanic & Latino / Women", "General Fiction") + genre_is("FICTION / Holidays", "General Fiction") + genre_is("FICTION / Immigration", "General Fiction") + genre_is("FICTION / Indigenous / General (see also Indigenous Peoples of Turtle Island or Native American)", "General Fiction") + genre_is("FICTION / Indigenous / City Life", "Urban Fiction") + genre_is("FICTION / Indigenous / Elders", "General Fiction") + genre_is("FICTION / Indigenous / Family Life", "General Fiction") + genre_is("FICTION / Indigenous / Indigenous Futurism", "Science Fiction") + genre_is("FICTION / Indigenous / Life Stories", "General Fiction") + genre_is("FICTION / Indigenous / Oral Storytelling & Teachings", "Folklore") + genre_is("FICTION / Indigenous / Women", "General Fiction") + genre_is("FICTION / Indigenous / Indigenous Peoples of Turtle Island", "General Fiction") + genre_is("FICTION / Legal", "General Fiction") + genre_is("FICTION / Mashups", "General Fiction") + genre_is("FICTION / Media Tie-In", "General Fiction") + genre_is("FICTION / Medical", "General Fiction") + genre_is("FICTION / Middle Eastern & Arab American", "General Fiction") + genre_is("FICTION / Multiple Timelines", "General Fiction") + genre_is("FICTION / Muslim", "General Fiction") + genre_is("FICTION / Native American", "General Fiction") + genre_is("FICTION / Nature & the Environment", "General Fiction") + genre_is("FICTION / Neurodiversity", "General Fiction") + genre_is("FICTION / Own Voices", "General Fiction") + genre_is("FICTION / Performing Arts / General", "General Fiction") + genre_is("FICTION / Performing Arts / Dance, Theater & Musicals", "General Fiction") + genre_is("FICTION / Performing Arts / Film, Television & Radio", "General Fiction") + genre_is("FICTION / Performing Arts / Music", "General Fiction") + genre_is("FICTION / Political", "General Fiction") + genre_is("FICTION / Psychological", "General Fiction") + genre_is("FICTION / Small Town & Rural", "General Fiction") + genre_is("FICTION / Southern", "General Fiction") + genre_is("FICTION / Sports", "General Fiction") + genre_is("FICTION / Suburban", "General Fiction") + genre_is("FICTION / Urban & Street Lit", "Urban Fiction") + genre_is("FICTION / Women", "General Fiction") + genre_is("FICTION / World Literature / Africa / East Africa", "General Fiction") + genre_is("FICTION / World Literature / Africa / General", "General Fiction") + genre_is("FICTION / World Literature / Africa / Nigeria", "General Fiction") + genre_is("FICTION / World Literature / Africa / Southern Africa", "General Fiction") + genre_is("FICTION / World Literature / Africa / West Africa", "General Fiction") + genre_is("FICTION / World Literature / American / 19th Century", "Historical Fiction") + genre_is("FICTION / World Literature / American / 20th Century", "General Fiction") + genre_is("FICTION / World Literature / American / 21st Century", "General Fiction") + genre_is("FICTION / World Literature / American / Colonial & Revolutionary Periods", "Historical Fiction") + genre_is("FICTION / World Literature / American / General", "General Fiction") + genre_is("FICTION / World Literature / Argentina", "General Fiction") + genre_is("FICTION / World Literature / Asia (General)", "General Fiction") + genre_is("FICTION / World Literature / Australia", "General Fiction") + genre_is("FICTION / World Literature / Austria", "General Fiction") + genre_is("FICTION / World Literature / Brazil", "General Fiction") + genre_is("FICTION / World Literature / Canada / 20th Century", "General Fiction") + genre_is("FICTION / World Literature / Canada / 21st Century", "General Fiction") + genre_is("FICTION / World Literature / Canada / Colonial & 19th Century", "Historical Fiction") + genre_is("FICTION / World Literature / Canada / General", "General Fiction") + genre_is("FICTION / World Literature / Caribbean & West Indies", "General Fiction") + genre_is("FICTION / World Literature / Central America", "General Fiction") + genre_is("FICTION / World Literature / Central Asia", "General Fiction") + genre_is("FICTION / World Literature / Chile", "General Fiction") + genre_is("FICTION / World Literature / China / 19th Century", "Historical Fiction") + genre_is("FICTION / World Literature / China / 20th Century", "General Fiction") + genre_is("FICTION / World Literature / China / 21st Century", "General Fiction") + genre_is("FICTION / World Literature / China / General", "General Fiction") + genre_is("FICTION / World Literature / Colombia", "General Fiction") + genre_is("FICTION / World Literature / Czech Republic", "General Fiction") + genre_is("FICTION / World Literature / Denmark", "General Fiction") + genre_is("FICTION / World Literature / England / 16th & 17th Century", "Historical Fiction") + genre_is("FICTION / World Literature / England / 18th Century", "Historical Fiction") + genre_is("FICTION / World Literature / England / 19th Century", "Historical Fiction") + genre_is("FICTION / World Literature / England / 20th Century", "General Fiction") + genre_is("FICTION / World Literature / England / 21st Century", "General Fiction") + genre_is("FICTION / World Literature / England / Early & Medieval Periods", "General Fiction") + genre_is("FICTION / World Literature / England / General", "General Fiction") + genre_is("FICTION / World Literature / Europe (General)", "General Fiction") + genre_is("FICTION / World Literature / Finland", "General Fiction") + genre_is("FICTION / World Literature / France / 18th Century", "Historical Fiction") + genre_is("FICTION / World Literature / France / 19th Century", "Historical Fiction") + genre_is("FICTION / World Literature / France / 20th Century", "General Fiction") + genre_is("FICTION / World Literature / France / 21st Century", "General Fiction") + genre_is("FICTION / World Literature / France / General", "General Fiction") + genre_is("FICTION / World Literature / Germany / 20th Century", "General Fiction") + genre_is("FICTION / World Literature / Germany / 21st Century", "General Fiction") + genre_is("FICTION / World Literature / Germany / General", "General Fiction") + genre_is("FICTION / World Literature / Greece", "General Fiction") + genre_is("FICTION / World Literature / Hungary", "General Fiction") + genre_is("FICTION / World Literature / India / 19th Century", "Historical Fiction") + genre_is("FICTION / World Literature / India / 20th Century", "General Fiction") + genre_is("FICTION / World Literature / India / 21st Century", "General Fiction") + genre_is("FICTION / World Literature / India / General", "General Fiction") + genre_is("FICTION / World Literature / Ireland / 19th Century", "Historical Fiction") + genre_is("FICTION / World Literature / Ireland / 20th Century", "General Fiction") + genre_is("FICTION / World Literature / Ireland / 21st Century", "General Fiction") + genre_is("FICTION / World Literature / Ireland / General", "General Fiction") + genre_is("FICTION / World Literature / Italy", "General Fiction") + genre_is("FICTION / World Literature / Japan", "General Fiction") + genre_is("FICTION / World Literature / Korea", "General Fiction") + genre_is("FICTION / World Literature / Mexico", "General Fiction") + genre_is("FICTION / World Literature / Middle East / Arabian Peninsula", "General Fiction") + genre_is("FICTION / World Literature / Middle East / Egypt & North Africa", "General Fiction") + genre_is("FICTION / World Literature / Middle East / General", "General Fiction") + genre_is("FICTION / World Literature / Middle East / Israel", "General Fiction") + genre_is("FICTION / World Literature / Netherlands", "General Fiction") + genre_is("FICTION / World Literature / New Zealand", "General Fiction") + genre_is("FICTION / World Literature / Norway", "General Fiction") + genre_is("FICTION / World Literature / Oceania", "General Fiction") + genre_is("FICTION / World Literature / Pakistan", "General Fiction") + genre_is("FICTION / World Literature / Peru", "General Fiction") + genre_is("FICTION / World Literature / Poland", "General Fiction") + genre_is("FICTION / World Literature / Portugal", "General Fiction") + genre_is("FICTION / World Literature / Russia / 19th Century", "Historical Fiction") + genre_is("FICTION / World Literature / Russia / 20th Century", "General Fiction") + genre_is("FICTION / World Literature / Russia / 21st Century", "General Fiction") + genre_is("FICTION / World Literature / Russia / General", "General Fiction") + genre_is("FICTION / World Literature / Scotland / 19th Century", "Historical Fiction") + genre_is("FICTION / World Literature / Scotland / 20th Century", "General Fiction") + genre_is("FICTION / World Literature / Scotland / 21st Century", "General Fiction") + genre_is("FICTION / World Literature / Scotland / General", "General Fiction") + genre_is("FICTION / World Literature / South America (General)", "General Fiction") + genre_is("FICTION / World Literature / Southeast Asia", "General Fiction") + genre_is("FICTION / World Literature / Spain / 19th Century", "Historical Fiction") + genre_is("FICTION / World Literature / Spain / 20th Century", "General Fiction") + genre_is("FICTION / World Literature / Spain / 21st Century", "General Fiction") + genre_is("FICTION / World Literature / Spain / General", "General Fiction") + genre_is("FICTION / World Literature / Sweden", "General Fiction") + genre_is("FICTION / World Literature / Switzerland", "General Fiction") + genre_is("FICTION / World Literature / Turkey", "General Fiction") + genre_is("FICTION / World Literature / Uruguay", "General Fiction") + genre_is("FICTION / World Literature / Wales", "General Fiction") + + def test_deprecated_bisac_terms(self): """These BISAC terms have been deprecated. We classify them the same as the new terms. @@ -308,6 +463,8 @@ def fiction_is(name, expect): fiction_is("YOUNG ADULT FICTION / Lifestyles / Country Life", True) fiction_is("HISTORY / General", False) + fiction_is("JUVENILE FICTION / General", True) + def test_audience_spot_checks(self): def audience_is(name, expect): subject = self._subject("", name)