News Perspective

April 12, 2026 · 4 min mins read

Problem

Lately I've been reading a lot of news and noticed that articles covering the same story often felt completely different depending on the source. The language was charged, the framing selective, but subtle enough that I'd have to read carefully to catch it. As a solution to this I decided to build News Perspective, a tool that could surface that automatically.

Solution

The extension highlights language in news articles that indicates bias/extreme wording, generalizations, opinion statements presented as fact. It also scores the overall sentiment and political leaning of the piece, and surfaces related articles for comparison.

The goal was to make bias visible without telling the reader what to think. The extension shows you where the signals are. What you do with that is up to you.

There are two parts: a browser extension (TypeScript) and a Python API.

News Perspective extension showing highlighted bias in a news article alongside the analysis sidebar Figure 1. The extension analyzing "Another election, another round of Nigel Farage hype, with no lessons learned" by Aurelien Mondon for The Conversation (June 2024). Highlights show extreme language (orange) and hedging language (yellow). The right panel shows the extension's bias, sentiment, and political-leaning analysis, along with related coverage from other outlets.

Thinking process

The hardest part wasn't the NLP it was deciding what to show. An overall bias score felt reductive. A wall of flagged phrases felt overwhelming. The final UI tries to show just enough: a summary score, a handful of highlighted phrases in context, and the political leaning breakdown.

I also ran into the fundamental problem of defining bias. Any classifier reflects the assumptions of whoever built it. I tried to make the extension transparent about this, it shows its evidence rather than just a verdict.

Tech stack

  • TypeScript browser extension: extracts article text from the page and renders the highlights and sidebar.
  • OpenAI API + NLTK: the NL processing layer. OpenAI's model handles the contextual judgment calls, bias, sentiment, and framing are language problems, not keyword-matching problems, while NLTK handles the cheaper deterministic text processing (tokenizing, keyword extraction) that doesn't need a model call.
  • News API: once the processing layer pulls the article's core keywords, it queries News API for other coverage of the same story, which feeds back into the analysis instead of being a bolt-on search result.
  • NLP over keyword matching, because framing lives in word choice. "Illegals flood the border" and "undocumented immigrants cross the border" describe the same event, and only contextual understanding catches the difference.

Architecture

News Perspective architecture: an article goes to NL processing built on OpenAI and NLTK, which extracts keywords, queries News API for related coverage, folds it back into the analysis, and returns the result to the user

The extension sends the article text to the NL processing layer. That layer extracts the story's core keywords and queries News API for related coverage, folds those related articles back into its own analysis, and returns the bias, sentiment, and leaning breakdown plus the related coverage to the user. The extension renders all of it as inline highlights and a sidebar.