如何从分类关键词列表排除特定关键词?现有实现未达预期
解决分类关键词排除组合词的问题
你当前的代码逻辑存在偏差——它试图修改categories["Voće"]的关键词列表,但你的核心需求是保留"banana"作为关键词,同时排除"krem banana"、"choco banana"这类带修饰词的产品被归类到Voće分类,而非删除基础关键词。
正确实现思路
需要调整的是产品分类的匹配逻辑,而非修改原始关键词列表。流程应为:
- 先检查产品是否匹配目标分类的关键词
- 再校验产品是否不属于需要排除的组合词范围
代码实现
// 保留原始分类关键词列表不变 const categories = { "Meso": ["snicla", "šnicla", "krmenadla", "pileca prsa", "belo meso", "pileća prsa", "krilca"], "Čokolada": ["čokolada", "cokolada"], "Majonez": ["majonez"], "Kečap": ["kečap", "kecap"], "Senf": ["senf"], "Paradajz": ["paradajz"], "Kobasice": ["kobasica"], "Posebne kobasice / Salame": ["posebna kobasica", "pileca posebna", "salama"], "Pileća prsa": ["pileća prsa", "pileca prsa"], "Pašteta": ["pašteta", "pasteta"], "Ćevapi": ["ćevapi", "cevapi", "ćevapčići"], "Šnicla": ["šnicla"], "Krilca": ["krilca"], "Voće": ["banana", "banane", "jabuka", "jabuke", "mandarine"], "Sokovi": ["borovnica", "borovnice", "jabuka", "jabuke", "narandža", "pomorandže", "breskva", "breskve"], "Kuhinjski aparati": ["Ketler za vodu", "Seckalica MC 400"], "Za domaćice": ["daska za peglanje", "bokal", "čistač", "cistac"], "Vileda": ["vileda"], "Filtriranje vode": ["Akvafor", "Akvaphor"], "Alati": ["metla", "auto set"], "Maziva": ["majonez", "kečap", "kecap", "senf", "sos"] }; // 单独维护各分类的排除规则,便于管理 const exclusionRules = { "Voće": ["krem banana", "choco banana"] }; // 产品分类匹配函数 function categorizeProduct(productName) { const lowerProduct = productName.toLowerCase(); for (const [category, keywords] of Object.entries(categories)) { // 检查产品是否匹配当前分类的关键词 const matchesKeyword = keywords.some(keyword => lowerProduct.includes(keyword.toLowerCase()) ); if (!matchesKeyword) continue; // 校验是否符合排除规则 const exclusions = exclusionRules[category] || []; const notExcluded = !exclusions.some(exclusion => lowerProduct.includes(exclusion.toLowerCase()) ); if (notExcluded) { return category; } } return "Nije klasificirano"; // 返回未分类标识 } // 测试用例 console.log(categorizeProduct("banana")); // 输出: Voće console.log(categorizeProduct("krem banana")); // 输出: Nije klasificirano console.log(categorizeProduct("jabuka")); // 输出: Voće console.log(categorizeProduct("choco banana")); // 输出: Nije klasificirano
补充:若需从关键词列表中删除特定组合词
如果你的需求是清理关键词列表本身(比如列表中存在"krem banana"这类无效关键词),可使用以下代码:
function filterKeywords(category, exclusions) { return categories[category].filter(keyword => { const lowerKeyword = keyword.toLowerCase(); return !exclusions.some(exclusion => lowerKeyword.includes(exclusion.toLowerCase()) ); }); } // 模拟关键词列表中存在无效项的场景 categories["Voće"].push("krem banana"); // 执行过滤 categories["Voće"] = filterKeywords("Voće", ["krem banana"]); console.log(categories["Voće"]); // 输出: ["banana", "banane", "jabuka", "jabuke", "mandarine"]
内容的提问来源于stack exchange,提问作者No Tools No Craft
相关产品推荐
相关产品推荐

