The brief
A place name in a document is not a coordinate. Between the two sits a sequence of decisions, about which country, which administrative level and which historical moment, that standard geocoding tools make silently and without any awareness of what the document is about.
For most applications that silence is a minor nuisance. For research on conflict, forced displacement and modern slavery it corrupts the evidentiary record, and it does so in patterned rather than random ways. Village names repeat dozens of times within a country and the most prominent one wins. Administrative boundaries shift during a conflict, so the current map does not describe the geography the document was written in. Arabic, Burmese, Amharic and Lingala names are romanised differently across sources, degrading or failing the match. And forced labour sites, transit camps and rural detention locations are precisely the places a popularity ranking buries under the nearest city.
Topodex does not replace the gazetteers. It makes their output accountable to the document it came from, wrapping nine open sources in a disambiguation engine that reasons from context and a validator that checks whether the document’s full set of locations is geographically plausible at all.
The insight
Two ideas do most of the work, and both come from refusing to treat a toponym as an isolated lookup key.
The first is that the document already contains the evidence needed to disambiguate. Co-occurring place names constrain the plausible region. The prose implies an administrative level, since a report naming a camp is not naming a governorate. The temporal frame rules out entities that did not exist yet or no longer existed. Building a profile from those signals before querying anything turns a string into a question with constraints attached, and reranking on seven weighted components then replaces generic popularity with contextual relevance.
The second is that a document is a unit of validation, not just a container of names. A single resolution can look entirely reasonable and still be wrong, and the tell is usually its relationship to everything else the document mentions. Checking the resolved set for implausible spans, statistical outliers and contextual contradictions catches errors that no per-name confidence score can, which is why the coherence score is computed across the document rather than attached to individual results.
Making the weight budget respond to detected risk follows from both. If the profile flags a likely homonym, popularity is exactly the wrong signal to trust, so the system suppresses it and leans on proximity instead.
What it does not do
The benchmark is small. Forty-two annotated toponyms across twelve conflict zones, drawn from ICTY judgments, ReliefWeb situation reports and ACLED event data, is enough to demonstrate the failure modes and not enough to make strong claims about generalisation. The expansion target is 300 to 500 annotations across Bosnia, Sudan, the DRC, Myanmar, Haiti and historical English-language sources, and until that exists the reported numbers should be read as indicative.
It inherits gazetteer coverage. Where no open source records a place, no amount of reranking will find it, and the regions with the thinnest coverage correlate uncomfortably well with the regions this work most wants to serve.
Learned weights are promising rather than proven. The estimate that 20 to 30 corrections adapt the system to a new conflict zone comes from simulation, not from deployment. And the disambiguation profile depends on a language model, which introduces a component whose failures are harder to characterise than the six the taxonomy names. The audit trail is designed so that those failures stay visible, which is a mitigation rather than a solution.







