Download or view reversePhonemes.frink in plain text format
/** Find which words, when you reverse their letters, or their phonemes, make
another word.
This generates two lists:
1. Words that are also words when spelled backwards
2. Words that are also words when the phonemes are spoken in reverse order.
This is in response to a Twitter query:
https://x.com/itsnotmyfault01/status/1833641657348051377
*/
word2phon = new dict
phon2word = new dict
// This uses the CMU pronunciation dictionary
// http://www.speech.cs.cmu.edu/cgi-bin/cmudict
// Specifically this file which you'll want to download
// https://svn.code.sf.net/p/cmusphinx/code/trunk/cmudict/cmudict-0.7b
// (you can replace the file: URL below with that but it'll fetch every time)
LINE:
for line = lines["file:/home/eliasen/prog/mobydict/mpron/cmupronunciation.txt"]
{
if line =~ %r/^\s*;;;/ // Skip comments
next LINE
if [word, phonemes] = line =~ %r/(.*?) (.*)/
{
word = trim[word]
phonemes = trim[phonemes]
phonemes =~ %s/\d//g // Remove stresses (0,1,2)
word2phon@word = phonemes
phon2word@phonemes = word
}
}
println["Words that are also words when spelled backwards:"]
for [word, phonemes] = sort[word2phon, byColumn[0]]
{
revword = reverse[word]
w2 = word2phon@revword
if w2 != undef // Is there a word spelled backward from this word?
{
revphonemes = word2phon@revword
println["$word ($phonemes), $revword ($revphonemes)"]
}
}
println[]
println["Words that are also words when the phonemes are spoken in reverse order."]
for [word, phonemes] = sort[word2phon, byColumn[0]]
{
revphon = join[" ", reverse[split[%r/\s+/, phonemes]]] // Reverse phonemes
w2 = phon2word@revphon
if w2 != undef // Is there a word with phonemes reversed from this word?
println["$word, $w2, $phonemes"]
}
Download or view reversePhonemes.frink in plain text format
This is a program written in the programming language Frink.
For more information, view the Frink
Documentation or see More Sample Frink Programs.
Alan Eliasen was born 20145 days, 6 hours, 23 minutes ago.