kantord / LibreLingo

🐢 🌎 📚 a community-owned language-learning platform
https://librelingo.app
GNU Affero General Public License v3.0
1.94k stars 214 forks source link

Add challenges for characters and their pronunciation #1143

Open adnan360 opened 3 years ago

adnan360 commented 3 years ago

Is your feature request related to a problem? Please describe.

Sometimes seeing letters on screens is not enough to learn how to write them on paper. Writing is an important part of learning a language and without such guidelines, learning is not complete. Right now there's no way to show how to write a letter.

Actually the idea came from @kantor and I'm just opening an issue for it:

I don't know the Bengali script, so there's no way for me to know how to pronounce or read the words that I see. LibreLingo should add some way to teach the characters in Bengali script, and how to combine those characters together to form words/sentences.

And possibly there should be challenges to test what they've learned.

Describe the solution you'd like @kantor describes it better:

...One of the main idea that I have for solving this is adding another section along with Words and Phrases. It would be something like Characters. And it would generate challenges similar to the ones for words, but it would be only about characters and their pronunciation

Previous quote talks about "teaching" and this one about "challenges". So there's 2 aspects to it.

I have prepared a letter handwriting animation code to aid with the teaching part. Maybe it can help in the process or not (feel free to discuss).

Describe alternatives you've considered I've thought about video recording a handwriting gesture. But it can't be done by everyone or won't be of same quality and it would need more bandwidth to serve.

Additional context Well, since we're talking about challenges here, how would we collect a correct answer? Through drawing? If so, we'd need OCR or something like that to validate input. Or is there other simple ways? Feel free to discuss possibilities.

kantord commented 3 years ago

Well, since we're talking about challenges here, how would we collect a correct answer? Through drawing? If so, we'd need OCR or something like that to validate input. Or is there other simple ways? Feel free to discuss possibilities.

As a first, super-simple idea I can imagine simply a version of the listening challenges. You just have to listen to an audio and select out of a list, which character you heard. In the case of Bengali, maybe this could be a combination of 2 characters, so you'd basically hear a syllable and choose with character combination it belongs to.

The reverse of that could also be possible, basically seeing a character and choosing which sound matches it. This reverse one could show the hand-writing animation, for example.

stale[bot] commented 3 years ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

kantord commented 3 years ago

I'm gonna pin this, it should not be terribly hard to solve so maybe someone is interested in implementing it

stale[bot] commented 2 years ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

jowodo commented 1 year ago

I would be interested in giving this issue a shot, but I have no experience with nodejs or sveite, but Linux+Apache+PHP is my stack at the moment. So a lot of things will be new.

I'm currently learning the arabic script on duolingo. I think the problem to solve is quite similar. The challenges to learn the script include:

  1. seeing target script letter/syllable/bogus word/real world and hearing it - choose from 1 out of 3 latin representations
  2. only hearing letter/syllable/bogus word/real word - choose from 1 out of 4 latin representations
  3. seeing latin representation - choose 1 out of 4 target script representation (when choosing the audio is played)
  4. tap the matching pairs with left 5 target scripts (when choosing the audio is played) and right 5 respective latin representations

    I think these challenges make sense and their order too. Matching pairs could also be introduced for words in general. The current challenges for words and phrases can be seen at docs/courses/skill.md. There are cards, short input, listening, options and chips challenges. The 1. letter challenge is similar to options challenge and 2. letter challenge looks similar to cards challenge

Naming

I found the code for the challenges under apps/web/src/components but they seem to to be partly named differently than in the challenges doc. I propose:

  1. matching names in docs and src
  2. add location of src to docs (and locations of docs to src)
  3. put source files for a challenge type in a folder named after the challenge (even if only a sigle file; for consistency)

There is also the question on how to name the new challenges.

I will inspect the files in apps/web/src/components, try to understand which files correspond to which challenge and try to create a new challenge for characters.

jowodo commented 1 year ago

As I imagine it, a minimal character skill.yaml could look like this:

Skill:
   Name: Alphabet   
   Id: alphabet000
   Thumbnails:
     - abc1

New Characters:
   - Character: α
     Transliteration: a

Which files must I change in order to get options challenges for such a character class?

Where is defined which class uses which challenges as in the docs?

Skivling commented 2 months ago

Transliteration definition would be great for typo detection if a macron or diacretic is missing but it's the same base letter, e.g. 'a' when it's 'ā'.

kantord commented 2 months ago

Transliteration definition would be great for typo detection if a macron or diacretic is missing but it's the same base letter, e.g. 'a' when it's 'ā'.

for this, some kind or normalization could be used, I don't know if it can be modeled in such a simple way though. I mean for some languages it might be simple (just remove accents) where in others it might have complicated rules that involve multiple characters, etc

Skivling commented 2 months ago

True. This could get complicated in some languages very easily, although I think a basic version for the easy ones is worth implementing first.