Skip to content

articulate-writing 0.17.0

Latest

Choose a tag to compare

@HarperZ9 HarperZ9 released this 26 Oct 05:43
530dab4

You can now see the rhetorical devices in a draft, hear the findings read
aloud, and see how much of each property an edit kept. The intensifier rule no
longer blocks learner writing under the default profile.

  • filler-intensifier no longer blocks under the default profile. It still
    shows on every report, as a LOW finding labelled report only:. On the Liang
    et al. (2023) essays it blocked 26 of 91 TOEFL learner texts against 2 of 70
    length-matched US college essay windows. With the change, the TOEFL minus
    college blocked-rate gap on a held-out half goes from +0.24 to 0.00. A profile
    that wants the rule to block names it in gate_promote. The decision record
    is docs/calibration.md.

  • A HIGH or MEDIUM finding inside a quotation attributed to someone else (a
    speech or citation verb beside the quote) moves to LOW with the label prefix
    quoted:. Quotation marks around your own paragraph change nothing.

  • Both changes live in a new layer, articulate.calibration (calibration/1),
    after the pinned detector. The ruleset and its fingerprint are unchanged. A
    receipt names the layer when it moved a finding, and receipts made before it
    still verify.

  • articulate devices reads thirteen rhetorical devices: antithesis,
    tricolon, anaphora, chiasmus, alliteration, assonance, polysyndeton,
    asyndeton, anadiplosis, epizeuxis, isocolon, zeugma and oxymoron. It reports
    where each one is and never gates. Rates on a held-out set written without
    sight of the readers are in docs/devices.md.

  • --speak and --ssml on articulate devices, and --speak on
    articulate check, give a script of the findings to read aloud.

  • The change report from --explain carries survival: a clarity value for
    each fact, device, rhythm, sentence order and register, 1 kept, below 1 lost.

  • Reports and receipts now name their limit field scope, and each scope says
    what the result covers. The field was named does_not_prove before. These
    schemas move to version 2: changes, meaning, corpus-report, corpus-receipt,
    desk, interview, titles, restructure, voice-compare, house-receipt,
    process-summary, editor-receipt and the dialogue report. articulate verify
    still accepts version 1 corpus receipts, voice comparisons, house receipts and
    process summaries. To read either version in your own code, read scope and
    fall back to does_not_prove; articulate.scope.scope_of does this.

  • Tool descriptions say "Runs on your machine". The findings tools say "Use the
    findings to improve writing. Use other evidence to decide who wrote a text."
    The CLI describes Articulate as a tool that finds writing patterns and shows
    where they are.

  • articulate campaign reads a JSON list of short social texts and reports
    promotional templates in posts, stock-persona slot grammar in bios, and
    clusters of near-duplicate or templated posts with their shared skeleton.
    Each finding names the pattern, its offsets and its cost to a reader. The
    report format is articulate-campaign-report/1, with a JSON schema at
    docs/campaign-schema.json. Python API: articulate.campaign.analyze.

  • A labelled synthetic corpus in corpus/campaign/ with ESL, dialect,
    translated, code-switched and non-English hard negatives, a per-platform
    split, a per-stratum fairness bound and controls that must fail. Run it with
    python -m articulate.campaign_bench. No change to the prose checker or its
    ruleset.