s2underground_search · How we calculate

How we calculate this score

We use a free, open-source semantic quantifier Python package called NRCLex (version 4.x) that you can install yourself with pip install NRCLex or browse on GitHub at github.com/metalcorebear/NRCLex. It is built on the public NRC Emotion Lexicon, which labels words along ten dimensions — fear, anger, disgust, sadness, negative, trust, positive, joy, anticipation and surprise. We feed each Wire report or transcript into that library, count the hits on each list we care about, divide by the word count and multiply by 1,000, so a short daily Wire and a long briefing compare fairly.

The formula

We weight four of those dimensions and ignore the rest:

fear = 1.00 × fear_nrc + 0.12 × threat_lex + 0.35 × anger + 0.20 × disgust − 0.25 × positive

Currently deployed as freakout_v3 — fear + 0.12*threat + 0.35*anger + 0.20*disgust - 0.25*positive.

Why negative is left out

Negative is the single largest negative category in the lexicon, so its absence looks like an oversight. It is deliberate. Measured over a 219-document sample of this corpus it correlates r = +0.73 with fear — it substantially is fear plus the other negative emotions. Adding it would inflate the score without adding information. Anger (+0.63) and disgust (+0.36) overlap less and earn their weight; positive is essentially orthogonal to everything threat-shaped (+0.13 against fear), which is exactly what makes it useful.

The bands on the meter

The needle is that weighted number. The centre mark is the long-run average across the full corpus, and the ticks either side are one standard deviation below and above it. Current baselines, recomputed from 1,044 Wire and Intel Update texts (882 Wire, 162 Intel, 2021-08-06 to 2026-10-30):

Mean (centre)
40.22
Median
39.16
Standard deviation
±19.32
Elevated (±1σ)
59.55
Crisis band (mean + 1.5σ)
69.21

Because a positive term is subtracted, a sufficiently reassuring document can score below zero. That is meaningful rather than broken: it means the language is net-calm, not merely unthreatening. The distribution chart on /metrics shows the full range.

In plain steps

  1. Take the text of the report, stripped of its source header, bibliography and site navigation.
  2. Run it through NRCLex, which tags words against the ten NRC emotion lists.
  3. Turn the four dimensions we use into hits per 1,000 words.
  4. Add our own military-vocabulary density at a small weight.
  5. Apply the weights above and store the result once; charts read that stored number rather than re-deriving it.
  6. Compare it to the corpus mean and spread to place it on the meter.

What it is not

NRCLex matches words against a list. It does not parse sentences. That has consequences we cannot engineer away in this layer:

The NRC valence/arousal/dominance lexicon, which is a separate resource from the emotion lexicon, is not used. Arousal — raw intensity regardless of valence — is the obvious next axis to add.

Back to search