TermNorm — Excel add-in
An Excel add-in that turns free-form text into standardized database identifiers — cache, then fuzzy match, then web research and LLM reasoning, with a confidence score and an audit trail on every match.
The problem
Anywhere a controlled vocabulary meets a human typing into a cell, the two disagree. Someone writes “stainless sheet, 2mm”; the database accepts exactly one identifier out of 11,750. Closing that gap is expert work — you have to know the vocabulary well enough to tell near-duplicates apart — and it is precisely the work that doesn’t scale. In life-cycle-assessment projects that mapping is a large share of the effort before any analysis begins.
TermNorm does that matching in the tool the data already lives in: Excel.
What it does
- Matches free-form text against a standardized term database, in-cell.
- Escalates through three tiers — cache → fuzzy / token match → AI research — so the cheap path handles the easy cases and the LLM only sees the hard ones.
- Returns a confidence score with colour-coded feedback, so a low-confidence guess looks different from a certain one.
- Writes an audit trail for every match: what was searched, what was ranked, why this identifier won.
- Runs standalone or against an existing database, with multi-user support and IP-based auth.
- Custom LLM prompts, validated against fuzzy matching before a result is accepted.
How it works
| Layer | Stack |
|---|---|
| Frontend | Excel Office Add-in — Office.js, JavaScript |
| Backend | Python, FastAPI |
| LLM | Groq (recommended) or OpenAI |
| Build / test | Webpack, Babel, Jest |
The part worth stealing is the pipeline engine. Every processing step is a node exposed through a JSON contract, and the nodes split into two kinds:
- Session-free — web search, entity profiling, LLM ranking. These need nothing but the query.
- Session-dependent — fuzzy and token matching. These need an indexed term list loaded first.
Because that distinction is explicit, a pipeline can be recomposed — reordered, shortened, extended — without touching the engine. It also makes the add-in a reusable pattern rather than a one-off: an Excel front end over a Python backend is a shape most offices need and almost nobody wants to build twice.
Deployment is the unglamorous half. End users get a pre-built release, run one .bat to start the server, and upload the manifest through Excel — no toolchain on their machine. Desktop rollouts add IIS hosting and a network share.
What I’d carry forward
The three-tier escalation was the decision that made the rest work: sending everything to an LLM is both slower and less trustworthy than letting a cache and a fuzzy matcher answer what they can. The LLM earns its place on the residue — the entries where a human would also have to go read something.
The second lesson is that a matching tool is only adopted if it shows its reasoning. Confidence scores and the audit trail exist because a silent, authoritative-looking answer is worse than no answer when the identifier lands in a report someone has to defend.