{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artwaste.land/data/rhyme-anchors/schema.json",
  "title": "Rime bands of English, under a stated anchor rule",
  "description": "One row per headword, pronunciation and anchor candidate. The word and its phonemes are CMUdict's; the anchor, the rime fragment and the three corrections are this project's, and each correction is flagged rather than applied silently.",
  "type": "object",
  "required": [
    "word",
    "variant",
    "phones",
    "band",
    "anchor_index",
    "anchor_stress",
    "nucleus",
    "onset",
    "raw_onset",
    "coda",
    "tail",
    "has_tail",
    "final_cons",
    "fragment",
    "raw_fragment",
    "rime",
    "normalised",
    "secondary"
  ],
  "additionalProperties": false,
  "properties": {
    "word": {
      "type": "string",
      "description": "The headword, lowercased. Variants such as word(2) are folded into one headword and separated by `variant`.",
      "x-origin": "redistributed",
      "x-source": "src:cmudict"
    },
    "variant": {
      "type": "integer",
      "minimum": 1,
      "description": "Which pronunciation of this headword, 1-based, in the dictionary's order.",
      "x-origin": "built",
      "x-source": "src:aw-anchor-rule"
    },
    "phones": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "ARPAbet phonemes as printed, vowels carrying their stress digit 0, 1 or 2.",
      "x-origin": "redistributed",
      "x-source": "src:cmudict"
    },
    "band": {
      "type": [
        "integer",
        "null"
      ],
      "description": "SCOWL commonness band, 10 commonest to 95 rarest. Null for the 67,705 headwords SCOWL's ordinary-word lists do not contain; the intersection rule that decides membership is ours.",
      "x-origin": "redistributed",
      "x-source": "src:scowl"
    },
    "anchor_index": {
      "type": "integer",
      "minimum": 0,
      "description": "Index into `phones` of the vowel this reading is anchored on.",
      "x-origin": "built",
      "x-source": "src:aw-anchor-rule"
    },
    "anchor_stress": {
      "type": "integer",
      "enum": [
        0,
        1,
        2
      ],
      "description": "The stress digit on the anchor vowel. THE RULE: the last vowel carrying stress of ANY grade, not the last primary-stressed one. That is the whole difference from an ordinary rhyming dictionary.",
      "x-origin": "built",
      "x-source": "src:aw-anchor-rule"
    },
    "nucleus": {
      "type": "string",
      "description": "The anchor vowel, bare of its stress digit.",
      "x-origin": "built",
      "x-source": "src:aw-anchor-rule"
    },
    "onset": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "The anchor syllable's onset AFTER the maximal-onset correction, which is what stops quicksilver reading as a perfect rhyme for silver.",
      "x-origin": "built",
      "x-source": "src:aw-anchor-rule"
    },
    "raw_onset": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "The onset before that correction. Where the two differ, the correction fired.",
      "x-origin": "built",
      "x-source": "src:aw-anchor-rule"
    },
    "coda": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Consonants closing the anchor syllable.",
      "x-origin": "built",
      "x-source": "src:aw-anchor-rule"
    },
    "tail": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Everything after the anchor syllable. Empty means a masculine ending.",
      "x-origin": "built",
      "x-source": "src:aw-anchor-rule"
    },
    "has_tail": {
      "type": "boolean",
      "description": "Whether anything follows the anchor syllable.",
      "x-origin": "built",
      "x-source": "src:aw-anchor-rule"
    },
    "final_cons": {
      "type": [
        "string",
        "null"
      ],
      "description": "The last consonant of the word, used for consonance.",
      "x-origin": "built",
      "x-source": "src:aw-anchor-rule"
    },
    "fragment": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "The rime: the anchor vowel and everything after it, AFTER the pre-rhotic neutralisation.",
      "x-origin": "built",
      "x-source": "src:aw-anchor-rule"
    },
    "raw_fragment": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "The rime before that neutralisation.",
      "x-origin": "built",
      "x-source": "src:aw-anchor-rule"
    },
    "rime": {
      "type": "string",
      "description": "fragment joined by single spaces. Two rows sharing this string are a perfect rhyme under this rule; it is the join key of the dataset.",
      "x-origin": "built",
      "x-source": "src:aw-anchor-rule"
    },
    "normalised": {
      "type": "boolean",
      "description": "True where fragment differs from raw_fragment, i.e. the match needed the pre-rhotic IH/IY neutralisation because the source is inconsistent before /r/ (hear HH IY1 R against clear K L IH1 R).",
      "x-origin": "built",
      "x-source": "src:aw-anchor-rule"
    },
    "secondary": {
      "type": "boolean",
      "description": "True where this reading anchors on a secondary stress. These rows exist because the final non-primary stress digit is close to a coin toss in the source (willow OW2 against pillow OW0), so both readings are kept rather than one being chosen.",
      "x-origin": "built",
      "x-source": "src:aw-anchor-rule"
    }
  }
}
