# The Space of Perfect Rhyme and Perfect Similarity

The Space of Perfect Rhyme and Perfect Similarity

Perfect rhyme is the most well known kind of perfect similarity. but there are many other forms. Let’s explore how frequent they really are!

◼

Perfect Rhyme: (cat, sat) (sit, fit) (hello, jello, fellow)

◼

Perfect Assonance: (bat, tab, tack) (meet, seen, week) (go, known, hope)

◼

Perfect Consonance: (black, bleek, bloke, blake) (cut, cat, kit, kate, kite)

Initialization

◼

Before we begin, let’s grab the subset of words from WordData for which there are Phonetic Transcriptions, we will need these for our sound similarity condition tests.

In[7]:=

$wordsWithPhoneticForm=Select[WordData[],!MissingQ[WordData[#,"PhoneticForm"]]&];(*Thisleavesuswith29,795wordsfortheexploration*)

◼

Here we generate a list of all unique word pairs from our dictionary - this excludes identity comparisons.

In[8]:=

allPairs=Join@@Monitor[Table[{$wordsWithPhoneticForm[[i]],$wordsWithPhoneticForm[[j]]},{i,1,10000-1},{j,i+1,10000}],{i,j}]

In[45]:=

vowels="a","æ","ɛ","ʌ","ɔ","ə","e","o","ʊ","i","u","ɪ","ɝ","ɒ";consonants="ŋ","ɡ","ʃ","ʒ","b","d","ð","f","h","j","k","l","m","n","p","r","s","t","v","w","z","θ";

# Perfect Rhyme - User Input

Perfect Rhyme - User Input

Two words are considered to be a perfect rhyme if all their vowels and all following consonants are identical. This is the most strict interpretation of perfect rhyme.

◼

This function will check to see if two words compose a perfect rhyme by our definition (minus stress, which is not available in Wolfram atm):

In[9]:=

checkForPerfectRhyme[word1_,word2_]:=Equal[StringCases[WordData[word1,"PhoneticForm"],RegularExpression["[aæɛʌɔəeoʊiuɪɝɒ]"]~~___~~EndOfString],StringCases[WordData[word2,"PhoneticForm"],RegularExpression["[aæɛʌɔəeoʊiuɪɝɒ]"]~~___~~EndOfString]]

◼

Running the next line of code will prompt you to enter two words for perfect rhyme comparison.

In[10]:=

inputPair=Table[InputString["Choose a word:"],2]

Out[10]=

{stop,drop}

◼

Now we can check if these words constitute a perfect rhyme by our definition

In[12]:=

checkForPerfectRhyme[inputPair[[1]],inputPair[[2]]]

Out[12]=

True

## Perfect Rhyme - Exhaustive Dictionary Search

Perfect Rhyme - Exhaustive Dictionary Search

Perfect rhyme is the most well known kind of perfect similarity, but how many perfect rhymes are there in English according to our definition?

◼

For the time being, we will use a random sample of the exhaustive search for expediency

In[93]:=

allPairsSample=RandomSample[allPairs,100000];

In[15]:=

◼

Use the checkForPerfectRhyme to see if two words compose a perfect rhyme by our definition (minus stress, which is not available in Wolfram atm): This compairedPairs variable will store T/F values for each pair, indicating perfect rhyme or not.

In[68]:=

testedPerfectPairs=AbsoluteTiming[Monitor[Table[checkForPerfectRhyme@@allPairsSample[[i]],{i,Length[allPairsSample]},{1}],i]];

In[140]:=

(*comparedPairs3=Monitor[Table[checkForPerfectRhyme[arr2[[i]][[1]],arr2[[i]][[2]]],{i,Length[arr2]},{1}],i]*)

In[63]:=

Count[comparedPairs2,True,2]

Out[63]=

0

Ok, but how many word pairings are possible?

◼

Lets visualize that amount of word pairings that are perfect rhymes.

In[105]:=

PieChart3D[{0,100000}]

Out[105]=

◼

It turns out our sample wasn’t big enough to find any perfect rhyme, not astonishing since our sample is 100,000 of the 900,000,000 possible pairs, and our definition is very strict.

## Perfect Assonance - Exhaustive Dictionary Search

Perfect Assonance - Exhaustive Dictionary Search

◼

Words pairs are considered to have perfect assonance if all the their vowels are the same.

◼

getVowels is a function from a project by Paruyr Danielian at Wolfram camp, which finds the string of vowels in a word. We will use this to examine the space of perfect assonance (perfect vowel similarity)

In[94]:=

getVowels[word_]:=Replace WordData[word,"PhoneticForm"], s_?StringQStringReplace[s,(Alternatives@@consonants)|"ˌ"|"ˈ"""], any_Missing["NotAvailable"]

◼

Ok, here we are getting all the vowel patterns for each pair of words.

◼

allPairsVowelsSample = Map[getVowels, allPairsSample, {2}];

Out[95]=

◼

Here we check each word pair and output a list of lists, with true values indicating a match has been found

In[74]:=

checkForPerfectAssonance[a_,b_]:=Equal[a,b]

In[101]:=

testedPerfectAssonance=AbsoluteTiming[Monitor[Table[checkForPerfectAssonance@@allPairsVowelsSample[[i]],{i,Length[allPairsVowelsSample]},{1}],i]]

Out[101]=

◼

Let’s visualize the ratio of words pairs in this set that have perfect assonance

In[107]:=

PieChart3D[{Count[testedPerfectAssonance,True,3],100000-Count[testedPerfectAssonance,True,3]}]

Out[107]=

◼

306 of the 100,000 tested pairs had perfect assonance!

## Perfect Consonance - Exhaustive Dictionary Search

Perfect Consonance - Exhaustive Dictionary Search

◼

Here we check for consonance matches

◼

Wow, only 23 of 100,000 pairs had perfect consonance!

## What does this mean?

What does this mean?

### These kinds of patterns are not common, although they stand out in our minds. Of course if we relax the criteria these number will grow quite a bit.

These kinds of patterns are not common, although they stand out in our minds. Of course if we relax the criteria these number will grow quite a bit.

## Unanswered Questions

Unanswered Questions

### We still need to finish running all the data in order to understand what the actual percentages are. Also we need a much more extensive IPA dictionary in order to have any understanding of the real space of perfect similarity. This dictionary has only ~30k words, which is not representative of the English Lexicon. Many others such as, CMU, CEL EX, etc... have at least 100k, we plan to import these into Mathematica to explore more fully.

In the future we will explore the space of similarity using varying degrees of similarity constraints.

We still need to finish running all the data in order to understand what the actual percentages are. Also we need a much more extensive IPA dictionary in order to have any understanding of the real space of perfect similarity. This dictionary has only ~30k words, which is not representative of the English Lexicon. Many others such as, CMU, CEL EX, etc... have at least 100k, we plan to import these into Mathematica to explore more fully.

In the future we will explore the space of similarity using varying degrees of similarity constraints.

In the future we will explore the space of similarity using varying degrees of similarity constraints.

Further Explorations

Slant Rhyme (imperfect rhyme)

Nonce Words

Poetry / Rap / Battle Rap

Phonological Similaity

Authorship information

Jordan Ackerman

June 22 2017

jordan.aackerman@gmail.com