Split special case mappings into logical groups

This commit is contained in:
Jared Miller 2025-12-25 10:34:12 -05:00
parent 0931663f57
commit 5e7146e3cc
No known key found for this signature in database

View file

@ -61,31 +61,54 @@ searchInput?.addEventListener("input", (event) => {
}); });
}); });
const specialCaseMap = { // OCR/formatting errors from epub conversion
const typoFixes = {
"GAY MA G E": "GAY MAGE",
"MORE ON RIVERS RIVERS": "RIVERS",
"REEK OF WRONG NESS": "REEK OF WRONGNESS",
"WITCH LIGHT": "WITCHLIGHT",
};
// truncated possessives and hyphenated terms
const partialMatches = {
"A KING'S": "KINGS",
"KING'": "KINGS",
"MERCHANT'": "MERCHANTS",
"POWER-": "POWER",
"WIZARD'": "WIZARDS",
"WIZARD'S": "WIZARDS",
"WIZARD'S BREEDING PROGRAMME": "BREEDING PROGRAMMES",
"WIZARD'S STAFF": "STAFFS",
};
// British/American spelling and verb forms
const spellingVariants = {
AMBUSHED: "AMBUSHES",
BACKLASHES: "BACKLASH OF MAGIC",
CURSED: "CURSES",
"FELLOW TRAVELLER": "FELLOW TRAVELERS",
"FELLOW TRAVELLERS": "FELLOW TRAVELERS",
};
// different terms mapping to canonical entries
const synonyms = {
"A BARD": "BARDS", "A BARD": "BARDS",
"A COURTIER": "COURTIERS", "A COURTIER": "COURTIERS",
"A DEMON": "DEMONS", "A DEMON": "DEMONS",
"A GODDESS OR GOD": "GODDESSES AND GODS", "A GODDESS OR GOD": "GODDESSES AND GODS",
"A HERBWOMAN": "HERBWOMAN", "A HERBWOMAN": "HERBWOMAN",
"A KING'S": "KINGS",
"A MAGIC USER": "MAGIC USERS", "A MAGIC USER": "MAGIC USERS",
"A SEER": "SEER", "A SEER": "SEER",
"A WIZARD": "WIZARDS", "A WIZARD": "WIZARDS",
AMBUSHED: "AMBUSHES",
ASSASSIN: "ASSASSINS, GUILD OF", ASSASSIN: "ASSASSINS, GUILD OF",
ASSASSINS: "ASSASSINS, GUILD OF", ASSASSINS: "ASSASSINS, GUILD OF",
BACKLASHES: "BACKLASH OF MAGIC",
BALLAD: "BALLAD, How to Compose a", BALLAD: "BALLAD, How to Compose a",
BALLADS: "BALLAD, How to Compose a", BALLADS: "BALLAD, How to Compose a",
BLOCKED: "MOUNTAIN PASS, BLOCKED", BLOCKED: "MOUNTAIN PASS, BLOCKED",
CHILD: "CHILDREN", CHILD: "CHILDREN",
CURSED: "CURSES",
ETERNAL: "ETERNAL QUEST", ETERNAL: "ETERNAL QUEST",
"EVIL SPELLS": "SPELLS", "EVIL SPELLS": "SPELLS",
FEMALE: "SLAVES, FEMALE,", FEMALE: "SLAVES, FEMALE,",
"FELLOW TRAVELLER": "FELLOW TRAVELERS",
"FELLOW TRAVELLERS": "FELLOW TRAVELERS",
"GAY MA G E": "GAY MAGE",
"GIFT OF SIGHT": "SIGHT", "GIFT OF SIGHT": "SIGHT",
GOD: "GODDESSES AND GODS", GOD: "GODDESSES AND GODS",
GODDESS: "GODDESSES AND GODS", GODDESS: "GODDESSES AND GODS",
@ -102,43 +125,40 @@ const specialCaseMap = {
"HOW TO INTERACT WITH WIZARDS": "WIZARDS", "HOW TO INTERACT WITH WIZARDS": "WIZARDS",
IMPORT: "IMPORT/EXPORT", IMPORT: "IMPORT/EXPORT",
"JOURNEY CAKE": "WAYBREAD OR JOURNEY CAKE", "JOURNEY CAKE": "WAYBREAD OR JOURNEY CAKE",
"KING'": "KINGS",
"LOST LAND": "LOST LANDS,", "LOST LAND": "LOST LANDS,",
"LOST LANDS": "LOST LANDS,", "LOST LANDS": "LOST LANDS,",
MAGELIGHT: "MAGELIGHT OR MAGEFIRE", MAGELIGHT: "MAGELIGHT OR MAGEFIRE",
MALE: "SLAVES, MALE,", MALE: "SLAVES, MALE,",
"MERCHANT'": "MERCHANTS",
MINION: "MINIONS OF THE DARK LORD", MINION: "MINIONS OF THE DARK LORD",
"MINION OF THE DARK LORD": "MINIONS OF THE DARK LORD", "MINION OF THE DARK LORD": "MINIONS OF THE DARK LORD",
MINIONS: "MINIONS OF THE DARK LORD", MINIONS: "MINIONS OF THE DARK LORD",
"MORE ON RIVERS": "RIVERS",
"MORE ON RIVERS RIVERS": "RIVERS",
MOON: "MOON(S)", MOON: "MOON(S)",
"MORE ON RIVERS": "RIVERS",
"MOUNTAIN PASS": "MOUNTAIN PASS, BLOCKED", "MOUNTAIN PASS": "MOUNTAIN PASS, BLOCKED",
"NORTHERN BARBARIANS DWELL": "NORTHERN BARBARIANS", "NORTHERN BARBARIANS DWELL": "NORTHERN BARBARIANS",
PANCELTIC: "PANCELTIC TOURS", PANCELTIC: "PANCELTIC TOURS",
"PANCELTIC TOUR": "PANCELTIC TOURS", "PANCELTIC TOUR": "PANCELTIC TOURS",
PENTAGRAM: "PENTAGRAM OR PENTACLE", PENTAGRAM: "PENTAGRAM OR PENTACLE",
PENTAGRAMS: "PENTAGRAM OR PENTACLE", PENTAGRAMS: "PENTAGRAM OR PENTACLE",
"POWER-": "POWER",
"PRACTICE RING": "PRACTICE RING OR COMBAT RING", "PRACTICE RING": "PRACTICE RING OR COMBAT RING",
PRIESTESSES: "HIGH PRIESTESSES", PRIESTESSES: "HIGH PRIESTESSES",
"SECRET VALLEY": "VALLEYS",
RIVERBOAT: "RIVERS", RIVERBOAT: "RIVERS",
"REEK OF WRONG NESS": "REEK OF WRONGNESS", "SECRET VALLEY": "VALLEYS",
SLAVE: "GALLEY SLAVE", SLAVE: "GALLEY SLAVE",
SLAVES: "SLAVES, MALE,", SLAVES: "SLAVES, MALE,",
"STANDING STONES": "STONE CIRCLES", "STANDING STONES": "STONE CIRCLES",
THIEVES: "THIEVES GUILD", THIEVES: "THIEVES' GUILD",
"TOWN COUNCIL": "COUNCIL",
"TOUR COMPANIONS": "COMPANIONS", "TOUR COMPANIONS": "COMPANIONS",
"TOWN COUNCIL": "COUNCIL",
TROTS: "TROTS, THE", TROTS: "TROTS, THE",
WAYBREAD: "WAYBREAD OR JOURNEY CAKE", WAYBREAD: "WAYBREAD OR JOURNEY CAKE",
"WITCH LIGHT": "WITCHLIGHT", };
"WIZARD'": "WIZARDS",
"WIZARD'S": "WIZARDS", const specialCaseMap = {
"WIZARD'S BREEDING PROGRAMME": "BREEDING PROGRAMMES", ...typoFixes,
"WIZARD'S STAFF": "STAFFS", ...partialMatches,
...spellingVariants,
...synonyms,
}; };
const resolveTerm = (term) => { const resolveTerm = (term) => {