didoesdigital/typey-type

Estimate possible stroke improvements across words on finished page

didoesdigital opened this issue · 5 comments

Overview

The finished page for each lesson makes some guesses about possible stroke improvements steno students could make, showing intermediate strokes they made and misstrokes they made on their way to writing each word.

Problem

Sometimes a student might misstroke a word where the first letters are correct but the stroke actually writes extra letters after the word that would be incorrect. The word is then deemed to be typed correctly and the next word deemed to be misstroked. In this example, the student used TPREFRPBS to write “Frenches” (accidentally hitting -S, which is the suffix for "^s" and with orthography rules can sometimes append "es"), which splits over to the next word, incorrectly marking “French” as stroked successfully, and adds incorrect letters to “character”, incorrectly marking it as a misstroke:
image

Approach

Idea: Before the revision list, show a form containing pairs of strokes that might have been marked as right/wrong incorrectly so students can adjust them. This is a first draft wireframe UI concept that needs a lot more thought:

image

This might use a heuristic to guess when a misstroke is probably a result of the previous word being misstroked. It might consider:

  • When using "Space before output" spacing setting, the second word might start without a space, indicating it might have been a suffix or final letters of a previous word.
  • If the first stroke of a misstroked word matches a suffix and does not appear in the first few letters of the word, it is probably a misstroke from the previous word.
  • If a translation exists in the dictionary matching the previous word plus the first stroke of the misstroked word it is probably a misstroke from the previous word.

Once a pair of words are identified as a possible miscalculation, the student might mark the “misstroked” word as correct, adjusting the “met words” count. If the first word was also incorrectly marked as right (although it could independently be wrong anyway), they could mark it as incorrect, adjusting the "met words" count.

Other considerations:

  • There's likely to be lots of edge cases to look for while implementing the code, e.g. don't compare the current misstroked word to the previous word if it's the first word of the lesson
  • There's likely to be lots of false positives and false negatives so it will need lots of testing with real steno practice to refine the heuristic.
  • After marking a word or pair as correct/incorrect, should the revision list update? Should the checked items update? Should it show the adjustments you've made?

As this is a heuristic, it might be worth showing a feedback form next to it to gather feedback on its accuracy e.g. “How useful was this suggestion?”/“Was this useful?”

This issue needs a full UI solution designed before starting development. If you want to work on this issue, let me know!

Currently the combination space matching rulings "space after output" and Plover configuration "space placement: after output" works best, as long as the word is always stroked with a single stroke. The rest doesn't work very well.

Using a heuristic like how fast new text was entered into the subsequent word might mess with the behaviour of phrasing briefs such as "of the" to type "of" and "the" rapidly.

One way to address this is to not proceed when there are excess characters, that doesn't start with , after the expected string. For example for word "French":

  1. type "Frenches" (don't proceed yet)
  2. type "(backspace)(backspace)" proceed to next word
    1. (or: type "(delete a strokne)" and "French" or whatever correct)

I think this strategy won't need as much changes as #62. I made a prototype: b97becc cd57d8f see how it works and caveats in the comment.

Nice one, @na2hiro! That seems like an approach worth exploring. A single frame/16ms buffer shouldn't affect the user experience. It would be nice to see this Issue resolved. I'd love to see a PR that:

  • addresses the stats
  • A) fails "Frenches" for "French" in /lessons/drills/top-1000-words/
  • B) fails "too bads" for "too bad" as 1 word in /lessons/collections/two-word-briefs-same-beginnings/too/
  • C) passes "You can" for "You" and "can" as 2 words typed quickly (in 1 stroke) in /lessons/stories/proverbs/proverbs-starting-with-y/

Since the latest deployment of Typey Type, when anyone manually sets the cookie batchUpdate set to 1 and hard refreshes Typey Type, they will see that lessons won't progress when a word has extra, incorrect letters. With this behaviour we expect to see:

  • fails "Frenches" for "French", and fails "yours" for "you" in /lessons/stories/proverbs/proverbs-starting-with-y/
  • fails "too bads" for "too bad" as 1 word in /lessons/collections/two-word-briefs-same-beginnings/too/
  • passes "You can" for "You" and "can" as 2 words typed quickly (in 1 stroke) in /lessons/stories/proverbs/proverbs-starting-with-y/

Assuming this approach proves reliable, we'll remove the cookie requirement soon.