{"id":16908094,"url":"https://github.com/cjrh/rhymomatic","last_synced_at":"2025-10-11T13:45:11.346Z","repository":{"id":50126868,"uuid":"363099311","full_name":"cjrh/rhymomatic","owner":"cjrh","description":"Static, offline, command-line rhyming dictionary","archived":false,"fork":false,"pushed_at":"2021-06-06T13:29:33.000Z","size":917,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-11T13:45:09.484Z","etag":null,"topics":["alliteration","pairing","perfect-rhymes"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cjrh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-04-30T10:00:10.000Z","updated_at":"2025-03-26T15:19:07.000Z","dependencies_parsed_at":"2022-09-03T08:52:48.837Z","dependency_job_id":null,"html_url":"https://github.com/cjrh/rhymomatic","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/cjrh/rhymomatic","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjrh%2Frhymomatic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjrh%2Frhymomatic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjrh%2Frhymomatic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjrh%2Frhymomatic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cjrh","download_url":"https://codeload.github.com/cjrh/rhymomatic/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjrh%2Frhymomatic/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279007346,"owners_count":26084282,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-11T02:00:06.511Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alliteration","pairing","perfect-rhymes"],"created_at":"2024-10-13T18:50:08.718Z","updated_at":"2025-10-11T13:45:11.304Z","avatar_url":"https://github.com/cjrh.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# rhymomatic\n\n## Demo\n\nImagine you want to find rhymes for the word `twitch`:\n\n```shell\n$ ./target/release/rhymomatic -w twitch | column\nbewitch\t\tfritsch\t\tkrych\t\tpitch\t\ttriche\t\twich\nbewitch\t\tfritsche\tlich\t\tpitsch\t\ttritch\t\twich\nbitch\t\tfritzsche(2)\tmich\t\trich\t\ttritsch\t\twitch\nblitch\t\tglitch\t\tmitch\t\triche\t\ttwitch\t\twitch\nbritsch\t\thitch\t\tmitsch\t\tritch\t\ttwitch\t\tzich\nditch\t\tich\t\tniche(1)\tsnitch\t\tunhitch\nenrich\t\titch\t\tnitsch\t\tstich\t\twhich\nenrich(1)\tkitch\t\tnitsche\t\tstitch\t\twhich\nfitch\t\tkitsch\t\tnycz\t\tswitch\t\twhich(1)\nfritch\t\tklich\t\tpiche\t\tswitch\t\twhich(1)\n```\n\n### vowel-matching\n\nYou could also find rhymes only on the vowel parts of `twitch`:\n\n```shell\n$ ./target/release/rhymomatic -w twitch -s vowel -m 3 | column\n'til\t\tdear\t\tgwynne\t\tmenear\t\trid\t\ttherein\n'tis\t\tdechine(1)\tgym\t\tmere\t\tridge\t\tthick\nabridge\t\tdeer\t\tgyn\t\tmib\t\triff\t\tthill\nabril\t\tdeere\t\tgyp\t\tmic\t\triffe\t\tthin\nabyss\t\tdemille(1)\thandpick\tmich\t\trig\t\tthing\nacquit\t\tdemisch\t\thasid\t\tmick\t\trigg\t\tthis\nad-lib\t\tdesir\t\therein\t\tmicke\t\trihn\t\tthis'\n\u003csnip many other hits\u003e\n```\n\nThis produces many more results, because there are many more matches. Would\nyou consider `gym` in the results above, to rhyme with `twitch`? Maybe not,\nbut the inner vowel part of the words is the same, and so even though\nsuch a pairing is not a perfect rhyme, they match enough to be able to, \nfor example, sing them in a rhyming pattern. \n\n### consonant-matching\n\nWe can also find rhymes that match only on the consonant parts:\n\n```shell\n$ ./target/release/rhymomatic -w twitch -s consonant -m 3 | column\nIH-1\t\tcolorwatch\tklanwatch\tsandwich\ttwitch\t\twich\nbalcerowicz\tcorporatewatch\tkolowich\tsandwich(1)\twach\t\twiech\nbaywatch\tcreditwatch\tkrulwich\tsandwich(2)\twatch\t\twitch\nbewitch\t\tcurrencywatch\tmoneywatch\tstopwatch\twatch(1)\twristwatch\nbogdanowicz\tdeathwatch\tnorwich\t\tswatch\t\tweech\t\twyche\nbromwich\tdulwich\t\tprestwich\tswiech\t\twhich\nbutkiewicz\tgreenwich(1)\tquach\t\tswitch\t\twhich(1)\n```\n\nConsider the pairing of `twitch` and `watch`: while not perfect rhymes, they\nare certainly close enough to use then in many situations, again such as\nsong lyrics.\n\n### Alliteration\n\nFinally, consider searching for rhyming words that match _from the start_\nrather than at the end. This is like alliteration:\n\n```shell\n$ ./target/release/rhymomatic -w twitch -t alliteration | column\n'twas\t\t\ttweezerman\t\ttwiddling\t\ttwinge\t\t\ttwins'\t\t\ttwisty\ntrois\t\t\ttweezers\t\ttwiddy\t\t\ttwinge\t\t\ttwinsburg\t\ttwisty\ntuolumne\t\ttwelfth\t\t\ttwiddy\t\t\ttwining\t\t\ttwinsburg\t\ttwitch\ntuomi\t\t\ttwelve\t\t\ttwiford\t\t\ttwinjet\t\t\ttwirl\t\t\ttwitch\ntwaddell\t\ttwelvth\t\t\ttwiford\t\t\ttwinjet\t\t\ttwirled\t\t\ttwitched\ntwaddle\t\t\ttwenties\t\ttwig\t\t\ttwinjets\t\ttwirler\t\t\ttwitched\ntwain\t\t\ttwentieth\t\ttwig\t\t\ttwinjets\t\ttwirling\t\ttwitchell\ntwain's\t\t\ttwentieth(1)\t\ttwigg\t\t\ttwinkie\t\t\ttwirls\t\t\ttwitchell\ntwang\t\t\ttwenty\t\t\ttwigg\t\t\ttwinkie\t\t\ttwiss\t\t\ttwitches\ntwangy\t\t\ttwenty's\t\ttwigged\t\t\ttwinkies\t\ttwiss\t\t\ttwitches\ntwardowski\t\ttwenty-first\t\ttwigged\t\t\ttwinkies\t\ttwist\t\t\ttwitching\ntwardy\t\t\ttwenty-five\t\ttwiggs\t\t\ttwinkle\t\t\ttwist\t\t\ttwitching\ntwarog\t\t\ttwenty-four\t\ttwiggs\t\t\ttwinkle\t\t\ttwisted\t\t\ttwite\n\u003csnip\u003e\n```\n\nAn example one might use from these results could be something like\n\"twitchy twig\" or something similar.\n\n## CLI\n\nThis is what is printed out with the `-h` or `--help` parameter:\n\n```shell\n$ rhymomatic -h\nrhymomatic x.y.z\n\nUSAGE:\n    rhymomatic [FLAGS] [OPTIONS] --word \u003cword\u003e\n\nFLAGS:\n    -h, --help       Prints help information\n    -n, --noemph     This setting will disable the requirement to match the emphasis in the given word\n    -V, --version    Prints version information\n\nOPTIONS:\n    -m, --minphonemes \u003cmin-phonemes\u003e    The minimum number of phonemes to match. The lower this is, the more matching\n                                        words will be found, but the strength of the rhyme gets weaker. For example,\n                                        with a min length of 1, the words \"SANDALS\" and \"HIPPOS\" will be matched because\n                                        they share a single matching phoneme in the trailing \"S\" sound. Usually this is\n                                        not what you want. A min length of 2-3 is recommended [default: 2]\n    -s, --style \u003crhyme-style\u003e           The style of rhyming. \"syllabic\" means to match both vowel and consonant sounds.\n                                        \"vowel\" means to match only vowel sounds with consonants allowed to not match\n                                        those in the given word. \"consonant\" is the opposite: only consonants in the\n                                        given word will be matched, with vowels being allowed to be different [default:\n                                        syllabic]\n    -t, --type \u003crhyme-type\u003e             The type of rhyme. \"rhyme\" means to try to match the given word from the end,\n                                        like \"POCUS\" and \"FOCUS\". Alternatively you can give \"alliteration\", which will\n                                        start matching from the front of the given word, like \"POCUS\" and \"POCKET\".\n                                        Finally, you can provide \"any\", which means that phonemes in the given word will\n                                        be allowed to match anywhere [default: rhyme]\n    -w, --word \u003cword\u003e                   Provide the word to find rhymes for\n```\n\n## On Rhyme\n\nThis section is taken verbatim from [Rhyme](https://en.wikipedia.org/wiki/Rhyme):\n\nThe word rhyme can be used in a specific and a general sense. In the specific sense, two words rhyme if their final stressed vowel and all following sounds are identical; two lines of poetry rhyme if their final strong positions are filled with rhyming words. A rhyme in the strict sense is also called a perfect rhyme. Examples are sight and flight, deign and gain, madness and sadness, love and dove.\nPerfect rhymes\nMain article: Perfect rhyme\n\nPerfect rhymes can be classified by the location of the final stressed syllable.\n\n    single, also known as masculine: a rhyme in which the stress is on the final syllable of the words (rhyme, sublime)\n    double, also known as feminine: a rhyme in which the stress is on the penultimate (second from last) syllable of the words (picky, tricky)\n    dactylic: a rhyme in which the stress is on the antepenultimate (third from last) syllable (amorous, glamorous)\n\nFeminine and dactylic rhymes may also be realized as compound (or mosaic) rhymes (poet, know it).\nGeneral rhymes\n\nIn the general sense, general rhyme can refer to various kinds of phonetic similarity between words, and to the use of such similar-sounding words in organizing verse. Rhymes in this general sense are classified according to the degree and manner of the phonetic similarity:\n\n    syllabic: a rhyme in which the last syllable of each word sounds the same but does not necessarily contain stressed vowels. (cleaver, silver, or pitter, patter; the final syllable of the words bottle and fiddle is /l/, a liquid consonant.)\n    imperfect (or near): a rhyme between a stressed and an unstressed syllable. (wing, caring)\n    weak (or unaccented): a rhyme between two sets of one or more unstressed syllables. (hammer, carpenter)\n    semirhyme: a rhyme with an extra syllable on one word. (bend, ending)\n    forced (or oblique): a rhyme with an imperfect match in sound. (green, fiend; one, thumb)\n    assonance: matching vowels. (shake, hate) Assonance is sometimes referred to as slant rhymes, along with consonance.\n    consonance: matching consonants. (rabies, robbers)\n    half rhyme (or slant rhyme): matching final consonants. (hand , lend)\n    pararhyme: all consonants match. (tick, tock)\n    alliteration (or head rhyme): matching initial consonants. (ship, short)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcjrh%2Frhymomatic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcjrh%2Frhymomatic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcjrh%2Frhymomatic/lists"}