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.
- Fear carries the full weight. It is the dimension the “threat language” label was always shorthand for.
- Threat lexicon is our own list of military wording (attack, strike, kill, bombing) that the general NRC list tends to under-weight, added at a deliberately small fraction so it nudges the gauge without dominating it.
- Anger and disgust catch hostility that reads as aggression or degradation rather than as fear. A briefing dominated by “shelling”, “seized” and “rejected” is hot even when few words are literally fear words.
- Positive is subtracted. This is the important one, and it was missing entirely before v3. Without a positive term a uniformly calm briefing and a neutral-but-vivid one scored almost the same, and the long-run average drifted with the corpus instead of being pinned by it. Subtracting reassurance language is what makes “not scary” read differently from “not measured at all”.
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
- Take the text of the report, stripped of its source header, bibliography and site navigation.
- Run it through NRCLex, which tags words against the ten NRC emotion lists.
- Turn the four dimensions we use into hits per 1,000 words.
- Add our own military-vocabulary density at a small weight.
- Apply the weights above and store the result once; charts read that stored number rather than re-deriving it.
- 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:
- No negation. “not afraid”, “no credible threat” and “called for calm” all score as their constituent words. In a corpus that quotes officials reassuring one another this is a systematic over-count, and no threshold removes it.
- No sarcasm, no irony, no register.
- No real-world grounding. The score says nothing about whether any event happened.
- Military vocabulary lifts calm analysis. A careful study of a war can outscore a terse operational report.
- Not a mental-state measure. It is a relative “threat-language density” index for this corpus.
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.