ovr.news
About

Under the hood

Same story, twenty sources

This section is currently available in English only.

When a species comes back from the brink, every nature outlet covers it. Twenty versions of the same event land in our pipeline within hours. Which one do you keep? And what do the other nineteen tell you?

These are two different questions. The first is about removing repetition. The second is harder than it looks, and the honest answer today is: less than you might hope.

The dedup problem

Our pipeline collects from outlets around the world. Every four hours, new articles arrive. When something genuinely newsworthy happens, a dozen outlets publish within the same day. Showing all of them wastes your attention.

The naive approach is keyword matching: if two titles share enough words, they're the same story. We tried this. Title Jaccard similarity (the overlap between the sets of words in two titles, divided by their union) seemed promising. In practice, it barely works.

Why naive approaches fail

We analyzed duplicate pairs across several weeks of data. The Jaccard scores between titles that humans would call "the same story" ranged from 0.00 to 0.33. That's essentially random.

Why so low? Because different outlets frame the same event with entirely different vocabulary. One writes "Wolf population rebounds in Germany." Another writes "Predator numbers surge in Central Europe." Same story. Zero word overlap after removing stop words.

Multilingual sources make this worse. The same event appears in English, Dutch, German, and Spanish with no lexical overlap at all. That is why the grouping now compares meaning, not words: a multilingual model that compares meaning places the wolf headline and the predator headline close together, in any language.

What we actually do

Three steps, in three services:

From many reports of one event to one card Many outlets report one event. FluxusSource drops exact copies, the same text from several outlets. NexusMind groups the remaining articles on the same story by meaning, across languages. ovr.news picks one version to show and counts the outlets in the group. You see one card, with the number of related sources. The count says how many outlets in our collection were grouped with the story; it does not say they confirmed it independently. Many outlets report one event FluxusSource drops exact copies (the same text from several outlets) NexusMind groups articles on the same story by meaning, across languages ovr.news picks one version to show and counts the outlets in the group What you see one card, with "N related sources" how many were grouped, not who confirmed it what you see on the site

Collection (FluxusSource) drops exact copies: the same text arriving from several outlets. A wire story that an editor lightly rewrote is no longer an exact copy, so it passes through as a separate article.

Scoring (NexusMind) groups articles about the same story by meaning, across languages, and picks one article to represent each group.

The site (ovr.news) shows one version per group. A title-comparison rule (Jaccard similarity) also exists in our editorial layer, but it is switched off: paraphrased titles defeated it.

It errs both ways. Sometimes one story stays split into two cards. Sometimes two different stories on the same topic land in one group: in one check in October 2026 (rated by an AI model, not by people), about four in ten pairs we flagged as the same story coming back within a week were in fact different stories. When two stories land in one group, only one is shown and the other is hidden. We accept that cost for now.

What the source count tells you

Coverage by several outlets looks like evidence. A reef recovery story covered by one blog could be aspirational; the same story covered by a news agency, a research institute and a local paper seems firmer. But we cannot yet tell independent reports apart from one agency story republished by many outlets. So the count says how many outlets in our collection were grouped with this story, not that they confirmed it independently. It can be too low (exact copies were dropped earlier) and too high (a different story sometimes lands in the group).

When several outlets report the same story (grouped by NexusMind's cross-source analysis), we show one version. Once a version has been shown, it stays the one we show; otherwise it is the version NexusMind picked to represent the story, if we have a summary for it, or else the highest-ranked version we can show. Being covered by several outlets does not move a story up the feed.

The result: you see one version of each story. The article page shows how many sources were grouped into the story, counting the one you are reading. It does not name them: when we checked whether a named outlet really covered the same story, it was right somewhere between about half and six times in ten, whether we picked the most credible outlet or one at random. That is not reliable enough to name an organisation, so we stopped showing names.

Grouping vs. the count

Grouping and the source count use the same raw material for different jobs:

Dedup Source count
Goal Remove noise Show how widely a story ran
Input Multiple versions of same story Outlets grouped into one story
Action Keep one, fold the rest Show one version, with the source count
Signal Redundancy (annoying) Outlets grouped, not independent confirmation

What we haven't solved

Independence. Nothing in our pipeline checks whether two outlets reported a story separately or both republished the same agency copy, so the source count cannot mean corroboration in the journalistic sense.

Precision. Grouping by meaning sometimes joins different stories on one topic, and sometimes splits one story. The grouping is being worked on upstream; until then we keep removal conservative.

Technical details

The grouping is NexusMind's, using a multilingual model that compares meaning. Our part, choosing the version to show and counting the outlets, is deterministic code with no AI. A Chief Editor (ADR-029) title-dedup rule (Jaccard similarity, 0.8 threshold, 3-day window) exists in the same codebase but is switched off: paraphrased titles defeat it. Removals by editorial rules are logged with a reason; the grouping step's folds are counted, not recorded one by one. The configuration can be adjusted at runtime via a JSON file without code changes.

Until October 2026 a rule here gave stories with at least 2 other outlets a ranking boost. A later sorting step discarded it, so it never changed the order you saw; we have switched it off. A single match was the same story only about half the time when we checked in October 2026. Duplicate removal stays conservative: we'd rather show a duplicate than hide a unique story.

Last updated: November 2026