Avion

An “avion” is an abbreviation of a word created from sequential letters in the word.
For example, “avion” is an avion of the word “abbreviation” :
The avion was proposed as a poetic form in 1999 by Michelle Grangaud, a member of the Ouvroir de Littérature Potentielle (OuLiPo). The OuLiPo, established in 1960 by mathematician François Le Lionnais and writer Raymond Queneau, is a group of French-speaking writers who, among other experimental writing work, develop mathematically-inspired poetic constraints.
I learned about avions at OuLiPo’s annual Récréations writing workshop, so named to emphasize the process of re-creation. Many of OuLiPo’s writing exercises involve “ré-écriture” (“re-writing”) of existing texts. In this spirit, I endeavored to create avions from some of the most canonical pieces of writing in the English language : Shakespeare’s sonnets.
She parses/pants/eases/eats/
parents/parts/passes/pees/
presses/resets/rests/rots/
seasons/sees/spans/spots
The poem above is built from a collection of avions of the string “Shakespeare’s sonnets”
The word French word “avion” translates to “airplane,” which makes it a particularly nice name for a poetic form. Some English translations opt to call this form a “ration,” which is another avion of “abbreviation” that happens to be an English word. For this post, I stick with the French “avion”... with a modification, as I explain in the next section.

aVERSion

There are many, many, many avions one could craft from a sonnet. Each individual word in the sonnet could be considered an avion, as could any pair of words, or any triplet of words, and so on, not to mention choices of letters that span multiple words. Therefore, I added an additional constraint to my search for avions in Shakespeare’s sonnets : I would construct all possible single-word avions one can create by taking a single letter from each line of the sonnet.
For example, the letters of the word “ridiculousness” can be found sequentially, one in each of the lines of Shakespeare’s sonnet #1 :
It turns out that there are 27 words that meet this avion requirement for sonnet #1 :
Out[]=
{abstemiousness,abstractedness,administration,counterculture,courageousness,disorderliness,farsightedness,fastidiousness,friendlessness,inarticulately,inconsistently,intermittently,meaningfulness,meticulousness,micrometeorite,mistranslation,motionlessness,osteoarthritis,overwhelmingly,radiotelegraph,relentlessness,ridiculousness,satisfactorily,superintendent,undersecretary,untruthfulness,weightlessness}
The French word for a line of poetry is “vers.” Therefore, I started referring to this subset of avions -- a single word constructed with a single letter from each line (vers) of a poem -- as aVERSions. I’m not in love with this name, but I’ve used it in the code below nonetheless. If you have a better idea for the name of this one-letter-per-line avion form, please share it in a comment below!
I now embark upon programmatically finding all aversions of all of Shakespeare’s sonnets.

All aversions of all of Shakespeare’s sonnets

154 sonnets

I retrieved the complete text of all of Shakespeare’s sonnets from shakespeares-sonnets.com to get a list of the 154 sonnets :
sonnetsList =
Head: List
Length: 154
Byte count: 100896
Uniconize
;
Note: see the “Working with HTML” section below for the importing code

Counting lines

Most of Shakespeare’s sonnets follow the traditional 14-line format. There are two sonnets, however, that stray from the 14-line constraint :
In[]:=
Position[sonnetsList,s_String/;(StringCount[s,"\n"]+1!=14)]​​StringCount[sonnetsList[[#]],"\n"]+1&/@%
Out[]=
{{99},{126}}
Out[]=
{{15},{12}}
The 99th sonnet has 15 lines and the 126th sonnets has 12 lines. We will keep these two special cases in mind later on.

Collecting words

For the majority of the sonnets, we will craft an aversion by finding a 14-letter word such that the word’s first letter appears in the first line of the sonnet, the second letter in the second line, and so on. We can generate a list of 14-letter words with WordList :
In[]:=
fourteenLetterWords = StringSplit[#, ""]& /@ ToLowerCase​​ Cases[WordList[], s_String /; StringLength[s] == 14]​​;
In[]:=
RandomChoice[fourteenLetterWords]
Out[]=
{f,e,a,t,h,e,r,b,r,a,i,n,e,d}

Matching words to lines

Given a sonnet as a single string with a \`[NewLine]` designating line breaks, we can use StringSplit to get a list of the individual lines of a sonnet (here using sonnet #2 as an example) :
In[]:=
lines = StringSplit[sonnetsList[[2]], ""]
Out[]=
{When forty winters shall beseige thy brow,,And dig deep trenches in thy beauty's field,,Thy youth's proud livery, so gazed on now,,Will be a tatter'd weed, of small worth held:,Then being ask'd where all thy beauty lies,,Where all the treasure of thy lusty days,,To say, within thine own deep-sunken eyes,,Were an all-eating shame and thriftless praise.,How much more praise deserved thy beauty's use,,If thou couldst answer 'This fair child of mine,Shall sum my count and make my old excuse,',Proving his beauty by succession thine!,This were to be new made when thou art old,,And see thy blood warm when thou feel'st it cold.}
Next, we turn each line into a list of the letters in that line :
In[]:=
lineLetters = StringCases[#, _?LetterQ]& /@ ToLowerCase[lines];
In[]:=
lineLetters[[1]]
Out[]=
{w,h,e,n,f,o,r,t,y,w,i,n,t,e,r,s,s,h,a,l,l,b,e,s,e,i,g,e,t,h,y,b,r,o,w}
Now, we find the aversions. We check to see which of the list of acceptable 14-letter words have their first letter contained in the first line of the sonnet, the second letter contained in the second line of the sonnet, and so on :
In[]:=
aversions = Cases[ Transpose[{lineLetters, #}]& /@ fourteenLetterWords,​​l_ /; MatchQ[(FreeQ @@@ l),{False..}] :> (Last /@ l)];
For sonnet #2, we find 21 aversions :
In[]:=
aversions//Length​​StringJoin/@aversions
Out[]=
21
Out[]=
{advantageously,aggressiveness,antidepressant,bullheadedness,businesspeople,egalitarianism,hypothyroidism,indistinctness,ingratiatingly,intelligentsia,interdependent,interferometer,obstreperously,oppressiveness,ostentatiously,representation,superannuation,supersaturated,superstructure,tatterdemalion,territoriality}

Poem display

To display the aversions within the sonnets, we must now find the indexes at which each desired letter appears in each line.
We start by making a list of each line with the letter we want to locate within it, using the aversion “advantageously” of sonnet #2 as an example :
In[]:=
linesAndLetters = (Transpose[{lines, #}]& /@ aversions)[[1]]
Out[]=
{{When forty winters shall beseige thy brow,,a},{And dig deep trenches in thy beauty's field,,d},{Thy youth's proud livery, so gazed on now,,v},{Will be a tatter'd weed, of small worth held:,a},{Then being ask'd where all thy beauty lies,,n},{Where all the treasure of thy lusty days,,t},{To say, within thine own deep-sunken eyes,,a},{Were an all-eating shame and thriftless praise.,g},{How much more praise deserved thy beauty's use,,e},{If thou couldst answer 'This fair child of mine,o},{Shall sum my count and make my old excuse,',u},{Proving his beauty by succession thine!,s},{This were to be new made when thou art old,,l},{And see thy blood warm when thou feel'st it cold.,y}}
Sometimes, the desired letter appears multiple times in the line. In that case, we just randomly choose one of the appearances. The code below returns one possible index of each desired letter within the given line. In this example, the resulting list of indexes indicates that the 22nd character of the first line of sonnet #2 is an “a,” the 3rd character (or 5th, 9th, or 43rd letter, depending on the random choice) of the 2nd line is a “d,” the 21st character of the 3rd line is a “v,” and so on :
In[]:=
letterIndexes = Function{line, letter}, ​​ First[RandomChoice[StringPosition[ToLowerCase[line], letter]]]​​ @@@ linesAndLetters
Out[]=
{22,9,21,12,4,15,5,18,23,10,39,28,41,11}
To nicely display the aversion within the sonnet, we apply a style (bold, red, and uppercase) to the selected letters and display the lines in a column :

Consolidating code

This aversionDisplay function takes a sonnet (as a single string with line breaks) as an input and returns a list of all of that sonnet’s aversions displayed within the sonnet (returned as a List of Columns). The code takes into account that the number of lines of the sonnet may vary from the traditional 14 (looking at you, sonnets #99 and #126...). In fact, this code can display an aversion of any text of any number of lines, sonnet or otherwise.

Results

Each of Shakespeare’s sonnets produces at least one aversion :
The 14th and 107th sonnets have 84 aversions each, more than any other sonnets :
The 5th sonnet has just 4 aversions, the fewest of any sonnet :
The word that most frequently appears as an aversion is “osteoarthritis” -- it is an aversion of 62 of the 154 sonnets. Other common aversions are “motionlessness” (51/154), “amateurishness” (42/154) and “relentlessness” (42/154) :
There are 129 aversions that occur only once across all 154 sonnets :
One of my favorite aversions comes from sonnet #14, which contains the line “Or else of thee this I prognosticate” and the aversion “prognosticator”... almost makes you wonder if Shakespeare meant to do it :
The infamous sonnet #99 of 15 lines contains the aversion “individualistic” and sonnet #126 of 12 lines contains the aversion “transgressor”.
Sonnet #34, in which the narrator complains that the sun has hidden behind a cloud and “let base clouds o’ertake me,” contains the aversions “meteorological” and “photosensitive.” The narrator says that the sun’s behavior is unforgivable (“no man well of such a Salve can speak/ That heals the wound and cures not the disgrace”) and the aversion “irreconcilable” floats into view, before it is revealed that the sun is a metaphor for the narrator’s lover, who cries tears that “are rich and ransom all ill deeds” ...perhaps the words of a “sentimentalist”?
I encourage you to look through all of the aversions (available on this website) and comment below if you find any others that seem particularly poetic.

Working with HTML

I imported and processed the text of the sonnets from shakespeares-sonnets.com using the following code :
I like to do a lot of my work in Mathematica and the Wolfram Language, but there are some limitations when it comes to sharing this work with people who are not familiar with the Wolfram world. However, it can be straightforward to transform some Wolfram Language results into a form compatible with HTML and JavaScript.
Below is the code I used to create HTML-compatible .txt files of the aversions data, which I then used in a JavaScript program to create an avions website :
A little wrangling (JS indexing starts at 0, so we need to add 1 to verify the structure in the Wolfram Language) shows that this data does indeed return what we want :

CITE THIS NOTEBOOK

Aversion constraint search across Shakespeare's 154 sonnets: frequency analysis & display function​
by AnneMarie Torresen​
Wolfram Community, STAFF PICKS, August 7, 2025
​https://community.wolfram.com/groups/-/m/t/3526601