Contraction rate analyser
By Jack Stovell X · Instagram · LinkedIn · published 2026-09-24
Contraction rate is the share of places where you could contract (do not or don't, it is or it's) and did. It runs from 0 to 1 and Since November 2026 ScriptGrain counts it in code from your samples. On the homepage demo's client-work post, Claude Sonnet 5.5 alone contracted 0.23 of its possible places; ScriptGrain's draft contracted 0.92.
Analyse your contraction rate free
Your free voice profile measures contraction rate among all 45 attributes, from a sample of your own writing. No card needed.
Try the six-signal check first
At a glance
- API field: contraction_rate
- How it is measured: Measured in code
- Group: Tone and register (ScriptGrain voice profile, 45 attributes in 8 groups)
- Scale: 0 to 1, the share of possible contractions used (ScriptGrain attribute definitions)
- Voice match: Not scored (ScriptGrain voice-match engine (published method))
What contraction rate measures
Contraction rate measures a choice: when the chance to contract came up, how often did you take it? The app's own definition says it plainly: "Of the places you could contract (do not or don't, it is or it's), the share where you do. Counted from your samples." The scale is 0 to 1, stored as a float under the API key `contraction_rate`, and it sits in the tone and register group.
It's easy to confuse with contraction frequency, so here's the difference. Frequency counts how many contractions appear per 1,000 words. Rate counts the share of opportunities taken. A formal writer on a topic full of "do not" and a chatty writer on a topic with few chances can share a frequency and differ completely on rate. The rate strips out how many chances the topic gave you.
Since November 2026, code does the counting. When a profile is built or re-analysed, it finds every place in your samples where a contraction was possible, from a fixed list of pairs (do not or don't, it is or it's, I am or I'm, will not or won't, cannot or can't, and others), and stores the share written contracted. Possessive 's never counts. "Have" counts only before a past participle, so "I have been" is a place and "I have a dog" isn't. "It is not" counts once, as one place. With fewer than 5 such places in the samples, the value is left empty rather than guessed.
Profiles built before November 2026 keep the extraction model's earlier reading, a number with no fixed scale. ScriptGrain's sample data held values from 0.08 to 35.2, so an old profile's figure isn't comparable with a new one until the profile is re-analysed.
How contraction rate is scored
Contraction rate doesn't move your voice match score at all. The voice-match engine has no comparator for this attribute, so it never moves the score and polish cannot target it. Voice match scores a text from 0 to 1 against a profile, and 27 of the 45 attributes can move it; this one isn't among them.
That doesn't make it decorative. The value still shapes how a profile writes during generation (more on that below). It just isn't graded afterwards. For the full method, see the voice measurement framework, and for the score itself, the voice match glossary entry.
How to analyse contraction rate in your own writing
You can work out your contraction rate by hand with a pen and a few hundred words of your own writing. It's tedious, but it works.
- Pick samples written for one audience. Contraction habits shift with register, so don't mix a client email with a legal notice.
- Mark every place a contraction was possible: do not, it is, I am, will not, cannot, and similar pairs.
- Skip the false positives. Possessive 's doesn't count, "I have a dog" doesn't count, and "it is not" counts once.
- Count how many of those places you actually wrote as a contraction.
- Divide contracted places by total places. That's your rate, between 0 and 1.
- Check you have at least 5 places. Fewer than that and the number is noise.
ScriptGrain's free voice profile reads contraction rate from a writing sample among all 45 attributes.
Typical contraction rate in published writing
There's no published-writing figure for contraction rate itself. The reference corpus holds 299 pieces from 47 public sources, built on 2026-09-20, and it measures the other contraction measure, contraction frequency, in contractions per 1,000 words (n=299).
The spread: p10 8.1, p25 13.8, median 19.4, p75 24.7, p90 32.2. So a typical published piece contracts about 19 times per 1,000 words, and the busiest tenth runs past 32. Treat those as a guide to frequency only. A writer sitting at the median could have a rate of almost anything, because the rate depends on how many chances the topic gave them.
How to make AI contract words the way you do
To make AI use contractions naturally, tell it the register and show it your own writing. The same steps answer how to make ChatGPT sound less stiff, because full forms where you'd have contracted are one cause of stiffness.
- Name the register of the piece, because contraction habits shift with register. In ScriptGrain, the Conversational register uses contractions freely.
- Give it a sample written for the same audience, so it sees your habit rather than a generic one.
- Check the result against your own count. If you contract 9 times in 10 and the draft does it 2 times in 10, say so.
A ScriptGrain profile applies the attribute when it writes. It's sent in the voice profile JSON block of the system prompt under "Treat every attribute as a hard constraint, not a suggestion", and the register overrides govern contractions: Formal says "Avoid contractions", Professional says "Allow selective contractions", Conversational says "Use contractions freely". The profile reaches ChatGPT, Claude and other tools through the API and MCP server.
How to make AI stop contracting in formal copy
To make AI stop contracting in formal copy, set a formal register and say where full forms must stay. It's the same lever pulled the other way.
- In ScriptGrain, pick Formal (avoids contractions) or Professional (selective ones).
- Ask for full forms in openings, conclusions and instructions, where a contraction reads as casual.
- Keep contractions out of terms, prices and quoted figures.
Related attributes help here. Formality score tracks the same dial from another angle, and audience adaptation covers how a writer shifts register for different readers. The full set lives on the attributes page.
Questions
What is a contraction rate analyser?
A contraction rate analyser finds every place a contraction was possible in your writing and reports the share you actually contracted, from 0 to 1. ScriptGrain counts it in code from your samples when a profile is built or re-analysed, using a fixed list of pairs such as do not and don't.
What's the difference between contraction rate and contraction frequency?
Frequency counts contractions per 1,000 words. Rate counts the share of possible places where you contracted. A formal writer on a topic full of "do not" and a chatty writer on a topic with few chances can share a frequency and differ completely on rate.
How is contraction rate measured?
Code finds each place in your samples where a contraction was possible, then stores the share written contracted. Possessive 's never counts, "have" counts only before a past participle, and "it is not" counts once. With fewer than 5 such places, the value is left empty.
How do I make ChatGPT sound less stiff?
Tell it the register, give it a sample written for the same audience, and compare its contraction habit with yours. A ScriptGrain profile carries your rate to ChatGPT through the API and MCP server, with the Conversational register using contractions freely.
How do I make AI write in a conversational register?
Set the register to Conversational, where ScriptGrain's override says "Use contractions freely", and supply a sample for the same audience. Then compare the draft's contraction habit with your own samples before you publish. For tone beyond contractions, see tone and register and humour register.
Related
- Tone and register attributes
- Formality score
- Humour register
- Emotional expressiveness
- Tone and register, measured: the attributes behind 'that sounds like us'