Akbub's picture
deploy: Nexus AI v0.2.0 - SAP C4C Lead Creation UI included in fresh frontend build
d1f3f31
Raw
History Blame Contribute Delete
1.93 kB
import json
from pathlib import Path
import re
TAXONOMY_PATH = Path(__file__).parent / "taxonomy.json"
class SemanticMapper:
def __init__(self):
self.taxonomy = {}
self._load_taxonomy()
def _load_taxonomy(self):
try:
with open(TAXONOMY_PATH, 'r', encoding='utf-8') as f:
self.taxonomy = json.load(f)
except Exception as e:
print(f"Error loading taxonomy: {e}")
self.taxonomy = {"products": {}, "brands": {}, "use_cases": {}}
def extract_gpu(self, text: str) -> str:
"""Extract GPU models separately so they aren't confused with budgets."""
text = text.lower()
gpu_patterns = [r'rtx\s*\d{4}', r'gtx\s*\d{3,4}', r'rx\s*\d{4}', r'radeon', r'geforce']
for pattern in gpu_patterns:
match = re.search(pattern, text)
if match:
return match.group(0)
return ""
def map_term(self, term: str) -> list[tuple[str, str]]:
"""Maps a raw term to a list of normalized (value, label) tuples."""
term_lower = term.lower()
results = []
# Check Products
for category, keywords in self.taxonomy.get("products", {}).items():
if category in term_lower or any(kw in term_lower for kw in keywords):
results.append((category, "PRODUCT"))
# Check Brands
for brand, aliases in self.taxonomy.get("brands", {}).items():
if brand in term_lower or any(alias in term_lower for alias in aliases):
results.append((brand, "BRAND"))
# Check Use Cases
for use_case, keywords in self.taxonomy.get("use_cases", {}).items():
if use_case in term_lower or any(kw in term_lower for kw in keywords):
results.append((use_case, "USE_CASE"))
# Eliminate duplicates
return list(set(results))
mapper = SemanticMapper()