Making sense of customer feedback with NLP
Six years of NPS surveys sat in one unreadable pile — thousands of free-text comments in a dozen languages, typed on shop floors. I built the pipeline that turned it into praised vs. criticised, by theme, by country, over time.
Problem
Every NPS survey since 2013 landed in the same pile: a score, a country, a date, and a free-text comment — thousands of them, in a dozen languages, typed on shop floors with the spelling to match (“relibility”, “servise”, “sparepart” as one word). There was real signal in there, but no split by theme or reason, no way to see patterns, and no chance anyone would ever read it end-to-end.
Approach
I built a pipeline that read all of it:
- Language detection first — the multilingual pile was split, and the mining ran on the English corpus while other languages were routed to their own track.
- Hostile-input scrubbing — lowercase, lemmatise, drop stopwords, then spell-correct the whole vocabulary and re-segment glued words, because shop-floor typing defeats any dictionary-based method that isn’t prepared for it.
- The core trick: terms that carry the score. Group comments by the n-grams they share and look at the statistics of their scores. A term with a high average lives in praise; a low average with a tight spread is a systematic problem, not bad luck; a wide spread is a fight — the same words appearing in 0s and 10s.

- Topics without labeled data. Nobody was going to hand-label thousands of comments, so a handful of anchor words defined each theme (service, price, precision, part…) and semantic similarity did the stretching — every term scored against the anchors with WordNet path-similarity and spaCy word vectors, so “technician”, “hotline” and “callback” all pulled toward service without anyone listing them.
- Clustering as a cross-check — DBSCAN parameter sweeps scored by label entropy, then a k-means pass over the ensemble, to surface recurring situations the seed topics might have missed.

The pattern that mattered: promoters talked about things — machine quality, accuracy, skilled technicians. Detractors talked about time — their vocabulary was “still”, “days”, “weeks”, “without”. And some terms, like spare parts, were a genuine fight: the same words in 0s and 10s, two different experiences hiding under one theme.
See it working
The original ran on a confidential corpus, so I rebuilt the pipeline as a demo on a fictional one: the same stages — language gate, spell-correction, n-grams, score statistics, topic tagging — running live in your browser on a seeded multilingual survey pile. Click any comment for its x-ray: every processing step applied to that exact text.

Runs entirely in your browser — filter by country and watch every figure recompute, read the corpus the way the tool did, and open any comment to see the pipeline dissect it. Every comment, score and figure is fictional.
Result
The quality department could finally track, year over year, where the company was praised and where it was criticised — by theme, by country — and search straight from a finding to the exact comments behind it. It turned a data dump into something you could actually reason about.

Client confidential — company name withheld.