Shakespearean sonnets are composed with the rhyme scheme ABAB CDCD EFEF GG , which means that each verse with the same label needs to rhyme. An example is the famous sonnet 18:
A: Shall I compare thee to a summers day?
B: Thou art more lovely and more temperate.
A: Rough winds do shake the darling buds of May,
B: And summers lease hath all too short a date.
C: Sometime too hot the eye of heaven shines,
D: And often is his gold complexion dimmed;
C: And every fair from fair sometime declines,
D: By chance or natures changing course untrimmed.
E: But thy eternal summer shall not fade,
F: Nor lose possession of that fair thou owst,
E: Nor shall Death brag thou wandrest in his shade,
F: When in eternal lines to time thou growst.
G: So long as men can breathe or eyes can see,
G: So long lives this, and this gives life to thee.
To analyse the rhymes we first import it into Mathematica:
sonnets = Select[StringTrim@StringSplit[#, "\n"] & /@
StringSplit[ToLowerCase@Import@"Shakespeare's Sonnets.txt", "\n\n"], Length@# == 14 &];
*The file is attached below and we select only sonnets with 14 verses (there are 2 outside this pattern).
The next step is the select the last word of each verse and remove punctuation:
lastWords = Map[Last@*StringSplit, sonnets, {2}] //. s_String :> StringReplace[s, {
RegularExpression@"[,.;:!?-]$" -> "",
RegularExpression@"'(.+)'" -> "$1",
RegularExpression@"(.+)[,.;:!?]'" -> "$1"}
];
*The code is a bit awkward, but it works...
Using the rhyme scheme, we pair the words that rhyme to form a graph:
data = Union@Flatten@Table[Thread[lastWords[[All, i]] \[DirectedEdge]
lastWords[[All, i+If[i==13,1,2]]]], {i, {1,2,5,6,9,10,13}}];
We are now ready to plot a graph of the word rhymes and segment each graph since most of them are disjoint.
(g=Graph[data]) // WeaklyConnectedComponents;
Select[Union /@ %, Length@# > 6 &] // Reverse@*SortByLength;
Manipulate[Subgraph[g, %[[i]], VertexLabels -> "Name", ImageSize -> 600],
{i, 1, Length@%, 1}]
In the graph bellow you can see that key ([kee]) rhymes with survey (ser-vey) in Shakespeare time, hence it was probably pronouced [key].

A more in deep analysis of this subject can be found in the NativLang video What Shakespeare's English Sounded Like - and how we know.
Attachments: