{"id":4202,"date":"2026-10-08T10:02:07","date_gmt":"2026-10-08T00:02:07","guid":{"rendered":"https:\/\/hoptanglish.com\/?page_id=4202"},"modified":"2026-10-08T14:54:14","modified_gmt":"2026-10-08T04:54:14","slug":"rhymes","status":"publish","type":"page","link":"https:\/\/hoptanglish.com\/?page_id=4202","title":{"rendered":"Rhymes"},"content":{"rendered":"\n<section aria-label=\"Rhymes sample\"><h1>Rhymes<\/h1><p>Explore published Hoptanglish words by their recorded sounds. Follow a word into its full dictionary article, or compare another kind of sound match.<\/p><p><small>Only published dictionary articles are eligible. Rhymes are suggested from recorded pronunciations; hidden entries are excluded.<\/small><\/p><div id=\"hp-rhymes\" data-article=\"\/index.php?rest_route=\/hoptanglish\/v1\/article\"><\/div><noscript><p><a href=\"https:\/\/hoptanglish.com\/?page_id=111#entry-tlex-2507875\">amphishyena<\/a> \u00b7 <a href=\"https:\/\/hoptanglish.com\/?page_id=111#entry-25c577511c5144cbf710\">bellerina<\/a><\/p><p><a href=\"https:\/\/hoptanglish.com\/?page_id=111#entry-5ae8731c918a61ede7b0\">ballerooma<\/a> \u00b7 <a href=\"https:\/\/hoptanglish.com\/?page_id=111#entry-fd469cbddf9edb94e91f\">gloomer<\/a><\/p><\/noscript><\/section><style>#hp-rhymes label{display:inline-block;margin:.5rem 1rem .5rem 0}#hp-rhymes input,#hp-rhymes select{max-width:100%;padding:.4rem}#hp-rhymes details{margin:1rem 0;padding:.7rem;border:1px solid #cabf9e}#hp-rhymes summary{cursor:pointer}#hp-rhymes a{margin:.25rem}#hp-rhymes p{line-height:1.6}.hp-rhyme-popup{position:fixed;z-index:99999;top:12vh;right:3vw;width:min(560px,90vw);max-height:75vh;overflow:auto;background:#fff;color:#222;border:1px solid #888;box-shadow:0 8px 28px #0005;padding:1rem;border-radius:6px}<\/style><script>(function () {\n'use strict';\nconst vowels = new Set(Array.from('aeiou\u0251\u0252\u00e6\u025b\u0259\u025c\u026a\u028a\u028c\u0254\u0250\u0268\u0289\u026f\u0264\u00f8\u0153y\u0276'));\nconst pairs = ['\u0259\u028a','\u028c\u026a','a\u026a','a\u028a','e\u026a','\u0254\u026a','\u026a\u0259','\u025b\u0259','e\u0259','\u028a\u0259','o\u028a','t\u0283','d\u0292'];\nfunction analyse(raw) {\n  const p = raw.trim().replace(\/^\\\/|\\\/$\/g,'').replaceAll('\u04d9','\u0259').replaceAll('\u04d5','\u00e6').replaceAll('\u0261','g').replaceAll('\u02a4','d\u0292').replaceAll('\u02a7','t\u0283');\n  if (!p || \/[0-9?=^()\\[\\],;]\/.test(p)) return null;\n  const tokens=[], nuclei=[], positions=[], stressed=[]; let pending=false;\n  for(let i=0;i<p.length;) {\n    const ch=p[i];\n    if(ch==='\u02c8'){pending=true;i++;continue;}\n    if(ch==='\u02cc'||ch==='.'||\/\\s\/.test(ch)){i++;continue;}\n    let t=pairs.find(x=>p.startsWith(x,i))||ch;i+=t.length;\n    if(p[i]==='\u02d0'||p[i]==='\u02d1')t+=p[i++];\n    if(!\/^[a-z\u0251\u0252\u00e6\u025b\u0259\u025c\u026a\u028a\u028c\u0254\u0250\u0268\u0289\u026f\u0264\u00f8\u0153\u0276\u014b\u0272\u0273\u0274\u0283\u0292\u03b8\u00f0\u0279\u027b\u027e\u0280\u0281\u03c7\u00e7\u0263\u03b2\u0278\u028b\u0265\u028d\u0294\u0295\u028e\u026b\u026c\u0288\u0256\u025f\u0262\u0282\u0290\u029d\u0255\u0291\u0299\u029c\u02a2\u02a1\u02d0\u02d1]+$\/u.test(t))return null;\n    if(vowels.has(t[0])){positions.push(tokens.length);nuclei.push(t);if(pending)stressed.push(nuclei.length-1);pending=false;}\n    tokens.push(t);\n  }\n  if(!nuclei.length)return null;\n  const stress=stressed.length?stressed[stressed.length-1]:(nuclei.length===1?0:null);\n  const tail=stress===null?null:tokens.slice(positions[stress]).join('');\n  const palindrome=a=>a.every((x,i)=>x===a[a.length-1-i]);\n  return {tokens,nuclei,perfect:tail,ending:tokens.slice(positions.at(-1)).join(''),assonance:nuclei.join('\u00b7'),consonance:tokens.filter(t=>!vowels.has(t[0])).join('\u00b7'),palindrime:nuclei.length>1&&palindrome(nuclei),glost:tokens.length>1&&palindrome(tokens)};\n}\nif(typeof module!=='undefined')module.exports={analyse};\nif(typeof document==='undefined')return;\nconst root=document.querySelector('#hp-rhymes');if(!root)return;\nconst labels={perfect:'Perfect rhymes',ending:'Same final vowel and ending',assonance:'Assonance \u2014 matching vowel sequences',consonance:'Consonance \u2014 matching consonant sequences',palindrime:'Palindrimes \u2014 reversible vowel sequences',glost:'Glosts \u2014 sonic palindromes',solo:'No perfect-rhyme partner found'};\nroot.innerHTML='<label>Find a word <input type=\"search\" aria-label=\"Find a rhyme word\"><\/label> <label>Rhyme style <select><\/select><\/label><p class=\"hp-rhyme-explanation\"><\/p><div class=\"hp-rhyme-results\"><\/div><p role=\"status\">Loading published pronunciations\u2026<\/p>';\nconst input=root.querySelector('input'), select=root.querySelector('select'),results=root.querySelector('.hp-rhyme-results'),status=root.querySelector('[role=status]'),explanation=root.querySelector('.hp-rhyme-explanation');\nfor(const [value,label]of Object.entries(labels)){const o=document.createElement('option');o.value=value;o.textContent=label;select.append(o);}\nlet rows=[]; const cache=new Map();let popup=null,serial=0,closeTimer;\nfunction close(){serial++;popup?.remove();popup=null;}\nfunction scheduleClose(){clearTimeout(closeTimer);closeTimer=setTimeout(close,180);}\nasync function preview(a){clearTimeout(closeTimer);close();const ticket=serial;popup=document.createElement('aside');popup.className='hp-rhyme-popup';popup.setAttribute('role','region');popup.setAttribute('aria-label','Dictionary definition');popup.textContent='Loading definition\u2026';popup.onmouseenter=()=>clearTimeout(closeTimer);popup.onmouseleave=scheduleClose;document.body.append(popup);try{if(!cache.has(a.dataset.id)){const r=await fetch(root.dataset.article+'&id='+encodeURIComponent(a.dataset.id));if(!r.ok)throw Error();cache.set(a.dataset.id,(await r.json()).html);}if(ticket===serial&&popup){const doc=new DOMParser().parseFromString(cache.get(a.dataset.id),'text\/html');doc.querySelectorAll('script,iframe,object,embed').forEach(n=>n.remove());doc.querySelectorAll('*').forEach(n=>{for(const x of [...n.attributes])if(x.name.startsWith('on'))n.removeAttribute(x.name);});popup.replaceChildren(...doc.body.childNodes);}}catch(e){if(ticket===serial&&popup)popup.textContent='Open the word to read its Dictionary article.';}}\nfunction link(r){const a=document.createElement('a');a.href=r.url;a.textContent=r.name;a.dataset.id=r.id;a.addEventListener('mouseenter',()=>preview(a));a.addEventListener('mouseleave',scheduleClose);a.addEventListener('focus',()=>preview(a));a.addEventListener('blur',scheduleClose);return a;}\nfunction render(){close();results.replaceChildren();const mode=select.value,q=input.value.trim().toLocaleLowerCase();const groups=new Map();for(const r of rows){let k=r.sound[mode];if(mode==='solo')k=r.sound.perfect;if(!k)continue;if(mode==='palindrime'||mode==='glost')k=mode==='palindrime'?r.sound.assonance:r.sound.tokens.join('');if(!groups.has(k))groups.set(k,[]);groups.get(k).push(r);}let shown=0;\nfor(const [k,members]of [...groups].sort((a,b)=>a[0].localeCompare(b[0]))){const distinct=new Set(members.map(r=>r.name.toLowerCase())).size;if(mode==='solo'?distinct!==1:!['palindrime','glost'].includes(mode)&&distinct<2)continue;if(q){if(!members.some(r=>r.name.toLocaleLowerCase().includes(q)))continue;}const d=document.createElement('details'),s=document.createElement('summary');s.textContent='\/'+k.replaceAll('\u00b7',' \u00b7 ')+'\/ ('+members.length+')';d.append(s);const branches=new Map();for(const r of members){const nuclei=r.sound.nuclei;const key=nuclei.length>=2?nuclei.slice(-2).join('\u00b7'):nuclei.join('\u00b7');if(!branches.has(key))branches.set(key,[]);branches.get(key).push(r);}if(branches.size===1){const p=document.createElement('p');for(const [i,r]of members.entries()){if(i)p.append(' \u00b7 ');p.append(link(r));}d.append(p);}else{for(const [sound,items]of [...branches].sort((a,b)=>b[1].length-a[1].length||a[0].localeCompare(b[0]))){const sub=document.createElement('details'),head=document.createElement('summary'),p=document.createElement('p');head.textContent='Vowels \/'+sound+'\/ \u00b7 '+items.length+' words';sub.append(head);for(const [i,r]of items.entries()){if(i)p.append(' \u00b7 ');p.append(link(r));}sub.append(p);d.append(sub);}}if(q)d.open=true;results.append(d);shown++;}\nexplanation.textContent=mode==='perfect'?'Matching sounds from the last primary-stressed vowel to the end. Unmarked multisyllabic stress is not guessed.':mode==='ending'?'Matches the final vowel and following sounds regardless of stress; these are not necessarily perfect rhymes.':mode==='solo'?'No other differently spelled word in this sample with a recorded matching perfect rhyme was found. This does not mean no rhyme exists.':'Matches are computed from recorded pronunciations; vowel length and diphthongs are preserved.';\nstatus.textContent=shown+' groups \u00b7 '+rows.length+' published entries with recorded pronunciation. Entries without pronunciation are omitted; that is not necessarily an error.';}\ninput.oninput=render;select.onchange=render;document.addEventListener('keydown',e=>{if(e.key==='Escape')close();});\nfetch('\/index.php?rest_route=\/hoptanglish\/v1\/published-rhymes').then(r=>{if(!r.ok)throw Error('Feed unavailable');return r.json();}).catch(()=>([{\"id\":\"entry-tlex-2507875\",\"name\":\"amphishyena\",\"url\":\"https:\/\/hoptanglish.com\/?page_id=111#entry-tlex-2507875\",\"pron\":\"\u02cc\u04d5mf\u04d9\u0283\u028c\u026a\u02c8i\u02d0n\u04d9\"},{\"id\":\"entry-25c577511c5144cbf710\",\"name\":\"bellerina\",\"url\":\"https:\/\/hoptanglish.com\/?page_id=111#entry-25c577511c5144cbf710\",\"pron\":\"\u02ccb\u025bl\u04d9\u02c8ri\u02d0n\u04d9\"},{\"id\":\"entry-5ae8731c918a61ede7b0\",\"name\":\"ballerooma\",\"url\":\"https:\/\/hoptanglish.com\/?page_id=111#entry-5ae8731c918a61ede7b0\",\"pron\":\"\u02ccb\u0254\u02d0l\u04d9\u02c8ru\u02d0m\u04d9\"},{\"id\":\"entry-fd469cbddf9edb94e91f\",\"name\":\"gloomer\",\"url\":\"https:\/\/hoptanglish.com\/?page_id=111#entry-fd469cbddf9edb94e91f\",\"pron\":\"\u02c8\u0261lu\u02d0m\u04d9\"}])).then(data=>{rows=data.map(r=>({...r,sound:analyse(r.pron)})).filter(r=>r.sound);render();});\n})();<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Rhymes Explore published Hoptanglish words by their recorded sounds. Follow a word into its full dictionary article, or compare another kind of sound match. Only published dictionary articles are eligible. Rhymes are suggested from recorded pronunciations; hidden entries are excluded. amphishyena \u00b7 bellerina ballerooma \u00b7 gloomer<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-4202","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/hoptanglish.com\/index.php?rest_route=\/wp\/v2\/pages\/4202","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hoptanglish.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/hoptanglish.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/hoptanglish.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hoptanglish.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4202"}],"version-history":[{"count":12,"href":"https:\/\/hoptanglish.com\/index.php?rest_route=\/wp\/v2\/pages\/4202\/revisions"}],"predecessor-version":[{"id":4218,"href":"https:\/\/hoptanglish.com\/index.php?rest_route=\/wp\/v2\/pages\/4202\/revisions\/4218"}],"wp:attachment":[{"href":"https:\/\/hoptanglish.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4202"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}