The anatomy of a writing voice: 45 measured attributes across 8 layers

By Jack Stovell · published 2026-09-21 · checked 2026-09-20

A writing voice can be described as 45 measurable attributes across 8 layers, from vocabulary choices down to punctuation habits. Most of them are things the writer never notices doing. Sentence length variance, comma placement, which filler words creep in when you're not looking: none of it is conscious, all of it is countable.

What a writing voice is made of

Here's the thing about voice: everyone assumes it's a feeling. It's not, not entirely. Underneath the feeling sits a set of habits, and habits can be measured. The 45 attributes in this framework split into 8 layers: lexical, syntactic, tone and register, rhetorical structure, punctuation and format, function words, content patterns, and quirks and cadence. Each layer captures a different kind of decision a writer makes without deciding. Word choice lives in one layer. Sentence rhythm lives in another. Whether you hedge or state things plainly lives in a third. Stack them together and you get something closer to a fingerprint than a style guide. For the mechanics behind how these layers get scored and combined, see the voice measurement framework.

AttributeLayerTypeUnit or values
vocabulary_diversity_indexLexicalnumber0 to 1
preferred_wordsLexicallistrecurring distinctive words
word_length_distributionLexicalsharesshort (1 to 4 letters) / medium (5 to 7) / long (8+)
rare_word_rateLexicalnumberrare words per 1,000
filler_phrasesLexicallistcatalogued fillers
contraction_frequencyLexicalnumbercontractions per 1,000 words
avg_sentence_lengthSyntacticnumberwords
sentence_length_varianceSyntacticnumbervariance of sentence lengths
complexity_preferenceSyntacticlabelsimple / compound / complex / mixed
clause_orderingSyntacticlabelfront-loaded / build-to-point / mixed
parenthetical_rateSyntacticnumberper 300 words
dash_frequencySyntacticnumberper 1,000 words
semicolon_frequencySyntacticnumberper 1,000 words
formality_scoreTone and registernumber0 to 10
humour_registerTone and registerlabeldry / sarcastic / self-deprecating / warm / none
emotional_expressivenessTone and registerlabellow / medium / high
contraction_rateTone and registernumberrate
confidence_vs_hedgingTone and registernumber0 (heavy hedger) to 1 (declarative)
audience_adaptationTone and registeryes/noregister shifts by audience
opening_styleRhetoricallabelhook / context / direct / anecdote / question
closing_patternRhetoricaltexthow pieces end
metaphor_usage_rateRhetoricalnumberper 1,000 words
repetition_as_emphasisRhetoricalyes/norepeats for effect
transition_styleRhetoricaltexthow paragraphs connect
argument_structureRhetoricallabelevidence-first / conclusion-first / narrative
comma_densityPunctuation and formatnumberper sentence
exclamation_ratePunctuation and formatnumberper 1,000 words
ellipsis_usagePunctuation and formatlabelfrequent / occasional / rare / never
question_mark_in_bodyPunctuation and formatyes/noquestions in body copy
capitalisation_quirksPunctuation and formattextany noted
list_preferencePunctuation and formatlabelbullets / numbered / inline / mixed / avoids
the_a_an_ratioFunction wordssharesthe / a / an
but_however_yet_preferenceFunction wordslabelbut / however / yet / mixed
pronoun_distributionFunction wordssharesI / we / you
discourse_markersFunction wordslistconnecting phrases
paragraph_opener_wordsFunction wordslistrecurring first words
specificity_levelContent patternslabelabstract / balanced / data-driven
anecdote_usage_rateContent patternsnumberper 1,000 words
claim_densityContent patternsnumberclaims per paragraph
analogy_preferenceContent patternsyes/noreaches for analogies
consistent_misspellingsQuirks and cadencelisthabitual spellings
rhythm_patternQuirks and cadencelabelpunchy / flowing / mixed
paragraph_length_preferenceQuirks and cadencelabelshort / medium / long / varied
power_sentence_positionQuirks and cadencelabelstart / end / both / varied
structural_signaturesQuirks and cadencetextnotable patterns

Lexical: the words

Six attributes here, and they're the most visible layer, the one readers half-notice even without a framework.

Vocabulary diversity index measures how repetitive a writer's word choices are, scored 0 to 1. A high score reads like this: "The house creaked, groaned, and finally surrendered to the storm." A low score sounds like this: "The house made a noise. Then it made another noise." Preferred words are the small set of recurring, distinctive words a writer leans on without realising it: "genuinely," "distinctive," "frankly." Word length distribution splits vocabulary into short (1 to 4 letters), medium (5 to 7), and long (8+) words; a writer heavy on short words sounds like "We cut the cost. Fast." while a long-word-heavy writer produces "We implemented a comprehensive cost-reduction methodology." Rare word rate counts unusual words per 1,000; a high rate gives you "the ineffable quality of dusk," a low rate gives you "the nice light in the evening." Filler phrases are catalogued fillers such as "to be fair" or "at the end of the day." Contraction frequency counts contractions per 1,000 words: "we don't think it'll work" scores high, "we do not believe it will work" scores zero.

Syntactic: the sentences

Seven attributes, and this is where rhythm lives.

Average sentence length is exactly what it sounds like, measured in words. Sentence length variance measures how much that length swings from sentence to sentence; low variance reads like a metronome, high variance reads like conversation. Complexity preference tags a writer as simple, compound, complex, or mixed. Clause ordering is front-loaded, build-to-point, or mixed: front-loaded gives you "We're cancelling the launch because the numbers don't work," build-to-point gives you "The numbers don't work. So we're cancelling the launch." Parenthetical rate counts asides per 300 words (like this one). Dash frequency counts dashes per 1,000 words. Semicolon frequency counts semicolons per 1,000 words; a writer who loves them produces long chained clauses, a writer who avoids them breaks everything into fragments instead.

Tone and register

Six attributes, and this is the layer that decides how a piece feels to sit inside.

Formality score runs 0 to 10. A 2 sounds like "yeah, that's basically it." An 8 sounds like "the findings indicate a consistent pattern." Humour register tags the flavour: dry, sarcastic, self-deprecating, warm, or none. Emotional expressiveness is low, medium, or high; low reads flat and reportorial, high reads like it's leaning towards you. Contraction rate overlaps with the lexical layer but tracks the ratio rather than the raw count. Confidence versus hedging runs 0 to 1, where 0 is a heavy hedger ("it might perhaps be the case that...") and 1 is fully declarative ("this is the case"). Audience adaptation simply asks whether the register shifts depending on who's reading, yes or no.

Rhetorical structure

Six attributes governing how an argument gets built and landed.

Opening style is hook, context, direct, anecdote, or question. Closing pattern describes how a piece signs off, wry, abrupt, summarising, or something else entirely. Metaphor usage rate counts figurative comparisons per 1,000 words. Repetition as emphasis is yes or no: does the writer repeat a phrase on purpose to hammer a point home. Transition style describes how paragraphs connect, whether through short declarative bridges or longer signposted clauses. Argument structure is evidence-first, conclusion-first, or narrative; conclusion-first states the point immediately and backfills the reasoning, evidence-first builds up to the point, narrative tells it as a story.

Punctuation and format

Six attributes, and this is the layer most people mistake for "just style."

Comma density counts commas per sentence. Exclamation rate counts exclamation marks per 1,000 words; a rate near zero produces flat, controlled prose, a high rate produces something closer to shouting. Ellipsis usage is frequent, occasional, rare, or never. Question mark in body is yes or no, whether the writer poses rhetorical questions mid-argument rather than saving them for headings. Capitalisation quirks catch things like sentence case versus title case, or ironic emphasis via quotation marks. List preference is bullets, numbered, inline, mixed, or avoids entirely.

Function words: the unconscious layer

Five attributes, and this is the layer writers have the least awareness of, which makes it one of the most reliable. See the glossary entry on function words for the broader case on why these small words matter so much.

The a/an/the ratio tracks how often a writer reaches for each article; it sounds trivial until you notice how consistent it is per person. But/however/yet preference tracks which contrastive word a writer defaults to; some writers never touch "however," others use nothing else. Pronoun distribution measures the share of I, we, and you; a piece heavy on "you" reads like direct address, heavy on "we" reads institutional, heavy on "I" reads personal. Discourse markers are the small connective phrases: "so," "here's the thing," "that's why." Paragraph opener words catalogue how paragraphs tend to start, whether with "Here's," "So," "The," or something else that recurs without the writer noticing.

Content patterns

Four attributes describing what kind of material a writer reaches for, not how it's phrased.

Specificity level is abstract, balanced, or data-driven. An abstract writer says "growth was strong." A data-driven writer says "growth ran at roughly this rate over this period." Anecdote usage rate counts anecdotes per 1,000 words. Claim density counts claims made per paragraph; high density reads assertive and fast, low density reads cautious and padded. Analogy preference is yes or no, whether a writer instinctively reaches for comparisons to explain things rather than stating them flat.

Quirks and cadence

Five attributes, the catch-all layer for the habits that don't fit elsewhere but still identify a writer instantly.

Consistent misspellings catch recurring errors a writer never fixes. Rhythm pattern is punchy, flowing, or mixed. Paragraph length preference is short, medium, long, or varied. Power sentence position is start, end, both, or varied, describing where a writer tends to place the sentence carrying the most weight. Structural signatures cover the recurring shapes a piece takes: fragments after long build-up sentences, numbered steps, direct address to the reader.

How the attributes are extracted

Extraction runs in two passes. Pass one reads each writing sample separately and measures it on its own terms. Pass two synthesises a single profile from everything pass one produced, reconciling the samples into one coherent voice rather than an average of disconnected readings.

Sample size matters here. A profile needs at least one sample of 50 or more words to run at all, but that's the floor, not the recommendation. The product recommends three or more pieces and roughly 3,000 words total. Below that, the numbers get shaky; above it, they settle. Extraction itself takes roughly one to three minutes, and every profile that comes out carries a confidence score from 0 to 1, a measure of how stable the reading is given what it had to work with.

The same 45 attributes travel as structured JSON, available live through the API and through the MCP server, so the profile isn't a document you export once and forget. It's read fresh wherever it's called. You can put the framework to work directly with the writing style analysis tool.

What the taxonomy cannot tell you

The taxonomy describes habits. It doesn't grade them. A profile can tell you a writer favours short sentences and avoids semicolons; it can't tell you whether that makes the writing good. Quality is a judgement call sitting on top of the measurements, not something the measurements produce on their own.

It can't prove authorship either. Two people can share overlapping habits by coincidence, and one person's voice drifts depending on mood, subject, or how much coffee they've had. Treat a profile as a strong description, not a signature.

The enumerated labels (humour register, argument structure, and the like) are a model's reading of the text, not a fact carved into the sentence itself. Reasonable readers, human or otherwise, might tag the same paragraph slightly differently.

And short samples make everything noisier. Rates calculated from 50 words wobble in ways that settle down once you're working with a few thousand. This is exactly what SGR-002 found when testing a measured profile against bare and prompted generation: on the ChatGPT vs a measured voice study, a profile built from 2,447 words across three posts, then tested against two held-out posts, produced a mean voice match of 0.83 against the study profile, against 0.74 for bare GPT-5 and 0.62 for GPT-5 working from a one-page prompt. Against the held-out posts themselves, the same three scored 0.91, 0.82, and 0.80. The prompt arm asked for about 14 contractions per 1,000 words and a formality score of 3.7; GPT-5 delivered 0.5 contractions per 1,000 and a judged formality of 7.2, while still following the countable instructions, fewer em dashes, more short sentences. That gap between rule-following and voice-matching is the whole argument for measuring properly rather than describing loosely.

Questions

What counts as one attribute versus one layer?

An attribute is a single measurable trait, like average sentence length or contraction frequency. A layer is a group of related attributes; syntactic groups seven of them, tone and register groups six. The 45 attributes sit inside 8 layers, and no attribute belongs to more than one layer.

Can a voice profile change over time?

Yes. A profile reflects the samples it was built from, and a writer's habits shift with subject matter, mood, or practice. Feeding fresh samples through extraction produces an updated profile rather than amending the old one, which is why sample recency matters as much as sample size.

Does a higher confidence score mean better writing?

No. Confidence score measures how stable the extraction is given the sample size and consistency across passes, not how good the prose is. A confidently measured voice can still be dull; a shaky one can still be sharp. The two questions are unrelated.

Why does sample size matter so much?

Short samples make rates noisy. A filler phrase or a dash might appear once in a 50-word sample and swing the whole reading. Across 3,000 words, individual quirks average out and the genuine, recurring habits surface. That's why the recommendation sits well above the technical minimum.

How is this different from a style guide?

A style guide prescribes rules a writer should follow. This taxonomy describes what a writer already does, measured rather than mandated. One tells you what's supposed to happen; the other tells you what actually did, including the habits, like filler phrases and paragraph openers, the writer never noticed.

Methodology

The 45 attributes and their units are read from the profile schema ScriptGrain extracts (two-pass stylometric analysis, pass 1 per sample, pass 2 synthesis) and match the fields returned by GET /v1/profiles/{id}. Definitions were written by ScriptGrain on 2026-09-20; no statistic on this page originates anywhere else.

Sources