Background
I am a college senior who built this skill on my own.
What it does
Bookworm teaches your child to read by providing a story for your child to read and then providing feedback to your child based on your child's performance. To start, Bookworm listens to your child read to determine a reading level; once the child's skill level is calculated, Bookworm presents stories for the child to practice reading. These stories are custom written and tailored to your child's reading level. Bookworm rewards progress with encouraging words and trophies to keep your child engaged. Bookworm is built for the Echo Show, but supports any Alexa enabled devices.
Bookworm has a robust system of detecting mistakes. It is capable of detecting multiple incorrect words, missing words, added words, or any combination of these.
For example, if a single word is misread, it'll correct the child by letting the child know the incorrect word it heard, and what the word should have been.
If a word is left out or added, it'll let the child know which word was missing or added.
To keep your child engaged, trophies are awarded based on progress. When you child completes one of our custom written stories or achieves a high enough accuracy in a reading level, they'll level up and earn a trophy that is displayed on the trophy screen.
How I built it
The skill is entirely hosted within AWS. A lambda function hosts the main skill functionality, communicating with a DynamoDB database for session management.
Due to the freeform nature of stories, I couldn't use a normal intent and slot structure to build the skill. Instead, I opted to use the literal slot. Due to other intents causing interference with my intent containing the literal slot, I solely used one intent with a literal slot and did all the input processing myself. The skill detects mistakes using the Levenshtein distance. Use of this algorithm is important since it not only allows the skill to detect mistakes, but allows it to provide an acceptable level of error for the mistake. The algorithm allows the skill to process input of homonyms or incorrectly heard words rather than automatically throwing errors for such input. The longer the expected word, the higher the Levenshtein distance allowed. This system also allowed me to detect not only when a word was missing or added, but which word. If the number of words in the input varied from the number of words expected, the Levenshtein distance was calculated for every word until multiple mistakes in a row occured. The place where the mistakes start is either the added or missing word.
While intended for use on the Echo Show, in order to pass certification my skill needed to support all Alexa enabled devices. To allow this, I set up a second lambda function accessed through AWS API gateway and connected to another database that allows users to access the service through a web interface on their tablet or computer. If a device with no screen directive is detected, the skill automatically adjusts itself and provides a room code to be entered on the site to connect to the service.
Challenges I ran into
The biggest challenge was building the mistake detection and correction system described above. It required a lot of testing of different algorithms to settle on the system I use now. In addition, I had trouble with the literal slot being too picky sometimes, but I found that keeping the stories broken into small fragments helped improve the accuracy.
Accomplishments that I'm proud of
Completing the entire skill and website on my own within two weeks over my college winter break.
Video Demo https://youtu.be/x33gE_siQM4
Log in or sign up for Devpost to join the conversation.