Three visitors from Reddit
I was reviewing where kimbundu.org's traffic comes from. Organic search, direct visits, the usual. Then: three visitors from reddit.com.
I do not post on Reddit. Traffic from a source you never seeded means the site is circulating on its own. I went looking for the thread, half hoping to find a Kimbundu learners' community I could join.
What I found was a two-year-old review from r/Angola. Someone had recommended kimbundu.org, and the OP had already tried it. Their verdict: "definitely useful, but incomplete."
The first word they searched was tarde. They wanted the Kimbundu word for afternoon. The site gave them nothing useful. They also flagged concerns about orthography and tone marking, and wished the site had been written by a linguist rather than, in their words, someone from "the commendable passion project of a software engineer."
A learner had found the failure path. Two years ago. To everyone Googling "learn Kimbundu."
It is a fair review. It is also, as it turns out, not a completeness report. It is a bug report about search ranking.
The gap list
I sat down as a learner and searched for the words any beginner needs. Sun. Heart. Today. Yes. Red. Hand. Sea. Wind. Friend. Over and over, nothing useful.
I compiled a spreadsheet of about 130 "verified missing" foundational words. Annotated with sources. Ready to send to a native-speaker professor for sourcing. The list said things like:
- sol / sun: "NOT IN CORPUS. Critical gap."
- céu / sky: "NOT IN CORPUS"
- coração / heart: "NOT IN CORPUS"
It was ~85% wrong. I had reproduced the Redditor's mistake at scale.
The audit
Instead of trusting the search box, I checked every claim directly against the corpus JSON. Two passes: lemma lookup with diacritic folding, then a word-boundary regex over all 20,188 sense definitions in Portuguese and English.
Nearly everything was there.
| Concept | Found in the corpus |
|---|---|
| afternoon | Ngóloxi (the Redditor's word) |
| sun | Kumbi ("O sol; o dia") |
| heart | Muxima |
| sea | Kalúnga |
| today / yesterday | Lêlu / Māza |
| week | Sumanu, Sóna |
| wind | Kitembu |
| friend | Rikámba |
Then I stress-tested the rest of a beginner's core vocabulary. All six personal pronouns. The full interrogative set. Twenty verbs. Food, animals, household nouns, adjectives, weather. All were in the corpus. The 1940s dictionary covers most A1 vocabulary.
The words were never missing. They were unfindable.
Why search failed
The site's search indexes definitions. But all of an entry's senses are concatenated into one field. So Kumbi ("O sol; o dia") scored no better for sol than any rambling definition that merely mentions the sun.
Prefix matching made it worse. Short Portuguese queries exploded: sol matched solo, solteiro, soltar. 213 hits, most of them irrelevant. Fuzzy matching added noise.
"coração" did not put Muxima in the top 5. For a learner, #40 means missing.
The fix
Same day, the index got a new shape. A hierarchy of trust, most-authoritative field first:
- Exact headword match.
- Curated aliases (for words the corpus text simply never uses).
- A short-gloss field: definition segments of three words or fewer get their own high-boost field. "Coração." "Hoje." "Semana."
- Mechanical gender/plural twins of gloss words, at low boost. Venta (nostril) twins to vento (wind) and must never outrank the real thing.
- The full definitions blob, last resort.
Plus: no prefix expansion for queries shorter than four characters. Lower BM25 length normalization (a dictionary inverts the usual IR assumption: the long entry is often the canonical one). Multi-word queries drop Portuguese stopwords and append OR-matches below AND-matches.
The most interesting failures were the ones no tuning could fix. Kitembu's definition says "Ventania," never vento. Kalúnga's gloss is buried in a sub-clause while dozens of "peixe do mar" stubs literally contain the word mar. For those, a curated alias file: sixteen human-reviewed anchors layered on top of the 1940s text. Reviewable, in one file.
Final numbers: the expected word ranks #1 for 72% of queries, top-3 for 89%, top-10 for 100%. Zero misses. Zero regressions on headword search. And tarde now returns Ngóloxi at #1.
What was missing
The genuine gaps are not random. They are a portrait of what a 1940s dictionary of a Bantu language would not have.
North and south do not exist. But east (Lúnda) and west (Uómbe, toward the sunset) do. Orientation ran sunrise to sunset, not compass rose.
Colour terms are mostly verbs. Kukusuka, "to be red." Kuléla, "to turn yellow." There is no noun for "colour" because colour is something things do.
"To have" does not exist as a verb. Possession is kukala ni, "to be with." A grammar note, not a dictionary entry.
A word for cousin is probably not missing at all. Bantu kinship merges siblings and cousins under pange. The "gap" is a different family model.
Each missing entry is either a modern concept, a different conceptual system, or a different grammar. That is the material a learning platform should teach.
The reply, two years late
I fixed the search. Then I replied to the review. I waited until production verified every claim: tarde returned Ngóloxi #1, coração returned Muxima #1, vento returned Kitembu #1.
The review sat unanswered for two years because nobody was listening in that channel. The analytics were. The site had users I had never met, in conversations I had never seen.
Lessons
Blame the index before the data. "Not in the corpus" is a strong claim. It needs a data-level check, not a UI-level one. The cheap explanation should be eliminated before the expensive one.
Users report symptoms. The diagnosis is your job. The review said "incomplete." The disease was ranking. Months of sourcing words we already had was the wrong fix.
The reply is on Reddit, threaded under the original review.