Extension: Rooster Observer - Edit LingQs for all lesson words

ROOSTER WEB EXTENSIONS CATALOGUE

ROOSTER OBSERVER FOR LINGQ
Browser extensions to enhance the LingQing process.

Rooster Observer LITE / Rooster Observer V1.51

TESTIMONIALS

ROOSTER OBSERVER FOR LINGQ (FREE)

LATEST PATCH

Patch 1.30 - 1.52

HOW DOES OBSERVER WORK?

How does Observer Work?

BASICS | FEATURES

BASICS
→ Open any lesson → Click Display → Click the best meaning for each word

FEATURES
→ Ordered by popularity (left → right)
→ Orange words are from a translator
→ Selector for status 1/2/3/4
→ Add own definition
→ Add or edit associated grammar
→ Display related phrase
→ Click a LingQ to display in the menu
→ Dynamic website page updates
→ Extra tabs for current LingQed, known and ignored words
→ Personalized Dictionary Menu
→ Add sentence starters (Columns to LingQs)
→ Audio of fragment and word (click it!)
→ Buttons for marking word known / skipped.

TEXT TO SPEECH VOICE MAP
    const voicesMap = {
        'af':[
            {appName: "msspeak", voice: "af-ZA:Female"},
            {appName: "msspeak", voice: "af-ZA:Male"}
        ],
        'ar': [{appName: 'polly', voice: 'Zeina'}],
        'be': [{appName: 'msspeak', voice: 'be-BE:Female'}],
        'bg':[
            {appName: "msspeak", voice: "bg-BG:Female"},
            {appName: "msspeak", voice: "bg-BG:Male"}
        ],
        'ca':[
            {appName: 'msspeak', voice: 'ca-ES:Female'},
            {appName: 'msspeak', voice: 'ca-ES:Male'}
        ],
        'cs':[
            {appName: "gCloudTTS", voice: "cs-CZ:female"},
            {appName: "msspeak", voice: "cs-CZ:Male"}
        ],
        'da':[
            {appName: "polly", voice: "Sofie"},
            {appName: "gCloudTTS", voice: "da-DK:female"},
            {appName: "polly", voice: "Mads"}
        ],
        'de':[
            {appName: 'polly', voice: 'Marlene'},
            {appName: 'polly', voice: 'Vicki'},
            {appName: 'msspeak', voice: 'de-DE:Female'},
            {appName: 'polly', voice: 'Hans'}
        ],
        'el':[
            {appName: 'msspeak', voice: 'el-GR:Female'},
            {appName: 'gCloudTTS', voice: 'el-GR:female'}
        ],
        'en':[
            {appName: 'msspeak', voice: 'en-US:Female'},
            {appName: 'polly', voice: 'Nicole'},
            {appName: 'polly', voice: 'Brian'},
            {appName: 'polly', voice: 'Matthew'}
        ],
        'eo':[{appName: 'eSpeak', voice: 'eo'}],
        'es':[
            {appName: "polly", voice: "Lucia"},
            {appName: "polly", voice: "Conchita"},
            {appName: "polly", voice: "Mia"},
            {appName: "polly", voice: "Lupe"},
            {appName: "polly", voice: "Enrique"},
            {appName: "polly", voice: "Miguel"},
            {appName: "polly", voice: "Sergio"},
            {appName: "polly", voice: "Andres"},
            {appName: "polly", voice: "Pedro"}
        ],
        'fa': [
            { appName: "msspeak", voice: "fa-IR:Female" },
            { appName: "msspeak", voice: "fa-IR:Male" },
        ],
        'fi': [
            { appName: "msspeak", voice: "fi-FI:Female:SelmaNeural" },
            { appName: "gCloudTTS", voice: "fi-FI:female" },
            { appName: "msspeak", voice: "fi-FI:Female" }
        ],
        'fr':[
            {appName: 'polly', voice: 'Celine'},
            {appName: 'polly', voice: 'Lea'},
            {appName: 'polly', voice: 'Mathieu'},
            {appName: 'gCloudTTS', voice: 'fr-CA:female'}
        ],
        'gu': [
            { appName: "msspeak", voice: "gu-IN:Female" },
            { appName: "msspeak", voice: "gu-IN:Male" },
        ],
        'he':[
            {appName: "msspeak", voice: "he-IL:Male"},
            {appName: "msspeak", voice: "he-IL:Female"},
        ],
        'hk': [
            {appName: 'msspeak', voice: 'zh-HK:Female'},
            {appName: "msspeak", voice: "zh-HK:Male"}
        ],
        'hrv': [
            {appName: "msspeak", voice: "hr-HR:Female"},
            {appName: "msspeak", voice: "hr-HR:Male"}
        ],
        'hu': [
            {appName: "msspeak", voice: "hu-HU:Female"},
            {appName: "msspeak", voice: "hu-HU:Male"}
        ],
        'hy': [
            {appName: "msspeak", voice: "hy-AM:Female"},
            {appName: "msspeak", voice: "hy-AM:Male"}
        ],
        'id': [
            {appName: "gCloudTTS", voice: "id-ID:female"},
            {appName: "msspeak", voice: "id-ID:Male"}
        ],
        'is':[
            {appName: "polly", voice: "Dora"},
            {appName: "polly", voice: "Karl"},
        ],
        'it': [
            {appName: 'polly', voice: 'Carla'},
            {appName: 'polly', voice: 'Bianca'},
            {appName: 'msspeak', voice: 'it-IT:Female'},
            {appName: 'polly', voice: 'Giorgio'}
        ],
        'ja': [
            {appName: 'polly', voice: 'Takumi'},
            {appName: 'polly', voice: 'Mizuki'},
            {appName: 'gCloudTTS', voice: 'ja-JP:male'},
            {appName: 'gCloudTTS', voice: 'ja-JP:female'}
        ],
        'ka': [
            {appName: "msspeak", voice: "ka-GE:Female"},
            {appName: "msspeak", voice: "ka-GE:Male"}
        ],
        'ko': [
            {appName: 'polly', voice: 'Seoyeon'},
            {appName: 'msspeak', voice: 'ko-KR:Female'},
            {appName: "msspeak", voice: "ko-KR:Male"}
        ],
        'la':[{appName: 'gtts', voice: 'la'}],
        'mk':[{appName: "msspeak", voice: "mk-MK:Female"}],
        'ms': [
            {appName: "msspeak", voice: "ms-MY:Female"},
            {appName: "msspeak", voice: "ms-MY:Male"}
        ],
        'nl': [{appName: 'polly', voice: 'Lotte'}],
        'no':[
            {appName: "msspeak", voice: "nb-NO:Female"},
            {appName: "polly", voice: "Liv"},
            {appName: "msspeak", voice: "nb-NO:Male"}
        ],
        'pl':[
            {appName: "polly", voice: "Ewa"},
            {appName: "msspeak", voice: "pl-PL:Female"},
            {appName: "polly", voice: "Jacek"},
            {appName: "msspeak", voice: "pl-PL:Male"}
        ],
        'pt':[
            {appName: 'polly', voice: 'Vitoria'},
            {appName: 'polly', voice: 'Ricardo'},
            {appName: 'polly', voice: 'Cristiano'},
            {appName: 'polly', voice: 'Camila'}
        ],
        'ro': [
            {appName: 'polly', voice: 'Carmen'},
            {appName: "msspeak", voice: "ro-RO:Male"}
        ],
        'ru': [
            {appName: 'polly', voice: 'Tatyana'},
            {appName: 'polly', voice: 'Maxim'}
        ],
        'sk': [
            {appName: "gCloudTTS", voice: "sk-SK:female"},
            {appName: "msspeak", voice: "sk-SK:Male"}
        ],
        'sl':[
            {appName: 'msspeak', voice: 'sl-SI:Female'},
            {appName: 'msspeak', voice: 'sl-SI:Male'}
        ],
        'srp': [{appName: 'gCloudTTS', voice: 'sr-RS:female'}],
        'sv': [
            {appName: 'polly', voice: 'Astrid'},
            {appName: 'msspeak', voice: 'sv-SE:Female'}
        ],
        'sw': [
            {appName: "msspeak", voice: "sw-KE:Female"},
            {appName: "msspeak", voice: "sw-KE:Male"}
        ],
        'tl': [
            {appName: "msspeak", voice: "fil-PH:Female"},
            {appName: "msspeak", voice: "fil-PH:Male"}
        ],
        'tr': [
            {appName: "polly", voice: "Filiz"},
            {appName: "msspeak", voice: "tr-TR:Female"},
            {appName: "msspeak", voice: "tr-TR:Male"},
        ],
        'uk': [
            {appName: "gCloudTTS", voice: "uk-UA:female"},
            {appName: "msspeak", voice: "uk-UA:Female"},
            {appName: "msspeak", voice: "uk-UA:Male"},
        ],
        'zh': [
            {appName: 'polly', voice: 'Zhiyu'},
            {appName: 'msspeak', voice: 'zh-HK:Female'},
        ],
        'zh-t':[
            {appName: 'msspeak', voice: 'zh-CN:Female'},
            {appName: 'polly', voice: 'Zhiyu'}
        ]
        // ... add other languages here
    };
INSTALL THIS SOFTWARE

FIREFOX | CHROME | SOURCE CODE

ROOSTER OBSERVER LITE (FREE)
NOTE: OBSERVER LITE HAS BEEN MERGED INTO OBSERVER PATCH 1.26

PICTURE AND VIDEO

VIDEO V1.10

BASICS | FEATURES

BASICS
→ A compact GUI menu of new card information.
→ Click a meaning to create a LingQ

FEATURES
→ Ordered by popularity (left → right)
→ Blue words are from a translator
→ Compacted and simple GUI
→ Click on new LingQs to open them in the display

INSTALL THIS SOFTWARE

OBSERVER LITE IS NOW INCLUDED IN OBSERVER → USE THIS FOR STANDALONE INSTALL

FIREFOX | CHROME | SOURCE CODE

4 Likes

Where the most populars come from? Because if it is from LingQ (based on number of selections), it is all messed up. The most popular doesn’t mean the best translation, unfortunately, and often are also wrong translations or misleading. But this come from the old system and all the clicks that came through from previous users to what there was available at that moment.

By clicking the most popular, users are reinforcing all mistakes made from the beginning and that word will keep staying the most popular forever. Not sure if you should invest much time to give it too much importance and reinforce them with priority and green color.

Best to match them with GPT/Wiki definitions for sure.

You make a very good point here. I even identified this problem in my other post but still wrote the code this way.

I suppose in the early days a lot of people just clicked the only option (google translate). And its now stuck near the top of most words popularity.

I agree, I’ll remove the colour from the popularity in the next update and move the colour coding to like blue is wiki, orange translator, green is gpt etc.

The whole UI will be overhauled anyway because I still need to add in all that other information as well.

3 Likes

The fact is that I write a ton of translations because I don’t like what I generally have. It is not precise at all.

When we usually read and don’t have time to translate, we just click the first definition that appear without thinking too much about it. This is also why all those “popular” translations got so many clicks.

Unfortunately, there is not a system to identify the best translations amongst the ones available. We have to always click and open the entire list. It would be better if we didn’t have to click and see immediately all translations available so we can choose quicker.

Your wiki/gpt/etc. idea could be a good reference for others to match the existing ones and click better choices.

2 Likes

The problem we are trying to solve! I have an idea about how to bring the wiki definitions to the free version of this app. I’m basically going to host the wiki database from my pc or webserver and filter the results. See picture below.


image

While not entirely free, I can bring every language wiki directly into the LingQ system for basically nothing.

GPT requires a developer account and people would be billing me for every call, so ill need to incorporate a premium version or a space to enter your own developer key to recieve the result.

2 Likes

Should I see something here?

Sorry, I’m over here fumbling around. I do see the “CURRENT LINQGS” and the “KNOWN LINGQS” columns, btw.

Just not sure how the “NEW LINQGS” column is supposed to work.

P.S. Not sure what the “Get Hints” button does. Nor do I see the “boxes” below words like in your Screenshot:

Does this mean there’s no data on it, currently?

Edit: Just noticed this, but should I be using Observer LITE over Observer?

Just added it, and it looks like the Observer LITE has some definition possibilities:

Screenshot 2023-08-19 at 14.40.05

I’ll play around with it a bit more.

1 Like

Hey @jpp025
Thanks for the feedback

It should be populated with all the ‘Blue’ words in the lesson.

If you have no ‘Blue’ words the list will be empty.

The “Get Hints” button will just show options like the ‘New Words’ column. Only the new word’s hints are loaded at the start. Is there a problem with the current/known hints not appearing in Korean? Let me know.

This version of Observer can only find 500 words. If your first ‘Blue Word’ is the 501st word or later you won’t see anything in the menu.

Great to hear! It’s all slowly coming together now.

2 Likes

For some reason, it’s not. I defiantly have at least one word ( 시간입니다 ) that is blue in the first 500 words (it’s in the second-ish sentence).

I also tried a lesson with mostly blue words all over the first page.

The hints don’t seem to be appearing (?) I see what would look like grammar tags in LingQ (grey boxes).
There might be a problem with current/known hints not appearing in Korean.

Here is the before and after of clicking the “Get Hints” button:

Also, are those grey looking “tags” supposed to disappear when you click on them?

P.S. Love the “Drag me” message on the pop-up! Definitely helps!

Screenshot 2023-08-20 at 07.00.18

Note: All of the above is in relation to LingQ Observer.

2 Likes

Hello @jpp025

This may be to do with how words are sourced. Is it a long lesson? I’m guessing that 500 words are returned not in any particular order.

I will investigate this issue and get back to you.

If you click a tag it will remove that grammar from the word. This removes it for all future users too. Treat it with respect. Remember to press save after removing or adding a tag!

I’ll look at making some more friendly design choices in the future.

When I have looked into that Korean bug I’ll send you a message about how to install the no limit version.

Thanks for your feedback!

2 Likes

@jpp025

I fixed this problem. Basically LingQ expects character encoding in the URL for asian languages. (See the first 2 lines of first picture) Now we have another problem. Somehow Korean has 76 hints for this word. Shall we limit it to say the most popular 6? (See second picture). Third picture is a bit of a meme where i show all 76 hints. Haha. I’ll push a fix for this within the hour and also a fix for the colors dropping off the other boxes.

Edit: Patch is now live → I also increased word limit to 750.

2 Likes
  • First one was shorter: 11 LingQ pages

  • Other one I checked was longer: 40 pages

Thank you for your hard work and for being so responsive! :smiley:

2 Likes

Oh, this is cool to know!

Yes, the “Get hints section” seems to be working much better now!

this is likely due to the fact that Korean is a very context heavy language, so users are creating LingQs for words in a variety of ways:

  • Direct meaning of word
  • Context-dependent meaning of word
  • The above types of meanings + additional grammar or word endings their word had
  • the root word of the word they’re linking + the above + every possible direct meaning of the word
  • Etc.

I’m used to this, so it doesn’t bother me as much. What would be great through your extension is getting the 6 most popular meanings to get a better idea of the LingQ I want to create for whatever learning stage I’m in.

So, it makes sense to limit it to the most popular meanings, even though it can be an incorrect meaning or not quite formatted the way I may want overall. For the type of language learning I tend to do, I can always consult multiple resources (like dictionaries, Reddit, etc.), but having a place to start is great!

^^ This gives you a good idea what the meanings section looks like for Korean learners, lol ^^

Like I said I’ve gotten used to it and actually appreciate it (though sometimes it would be nice if an advanced Korean learner went through this every so often to avoid to much clutter for users over time—not every personal meaning needs to public :laughing: but it’s better than no community dictionary at all.

Still zero resutls under the “New Words Category for me” but the “Current Lingqs” and the “Known Lings” improved with the “Hints” (as I mentioned, so progress!!)

But, like I mentioned previously, I seem to get lingQs using Observer Lite (as long as I toggle off Observer while I’m using Observer Lite—otherwise nothing shows up for Observer Lite, but it makes sense that the Observer extension would interfer with the Observer Lite extension)


P.S. I figured this might be the case which is why I immediately closed my tab instead of saving anything when I clicked on the tag, and it disappeared :laughing: So, glad I didn’t save that!

Also being able to resize the windows is another great user feature I just noticed!

Again, thank you for your hard work on these extensions! Super exciting stuff!

2 Likes

This is definitely a issue for longer lessons. Basically… LingQs have ‘Ids’ assigned to them and are returned in order they were first created. ‘paljon’ (a lot) always returns first for me in Finnish, this could be based on the first person ever to LingQ that word or the first word that you LingQed. I’m not sure yet. (sorry about being technical here, I just wanted you to know why the problem may still exist)

My solution here is to fetch the entire word list, reorganize it by new words first and then slice it to the free version word limit. There is also another mechanism that exists that I’m looking into, which should be released today… An option to toggle LingQs for entire lesson or LingQs for current page.

Here is an idea which I’ll let you get back to me on. Do you want new LingQs to start with a column and when you enter the definition it would be like

Direct Meaning: "your text here"
Context derived meanings: "your text here"
Root word: "your text here"
Root word meanings: "your text here"

This could be a toggle-able setting and allow user input to change the column names.

Hopefully the upcoming Wikipedia import function reduces the need for this!

Observer Lite can see 2000 words opposed to Observer’s 750 which is likely why you are seeing results.

todo for 1.20

→ Fix for word limit → get new words first
→ Columns for new LingQs
→ Native button
→ Settings menu
→ Get more Hints for new words
→ Show extended hints in a scrollable menu
→ Show LingQs for this page only

1 Like

@jpp025

I’ll be pushing patch 1.20 within the hour with some of the things mentioned above. (Its lunch time and I want to get this patch out)

→ I have increased the word limit on Observer for testing purposes. (more than LITE)
→ Ability to add columns to LingQs
image

→ Get More and ALL hints for a word (Not really all, it displays 6 or 30 in popular descending order)

→ Added Rooster Observer Button to the menu
image

Should be live in 30 mins.

Edit: → Patch 1.24 is now up on Firefox with the word restriction entirely removed

1 Like

Yes! This would be great! (Had to sleep on this because it was later in the evening for me)

Yes! Hopefully!

Note: I have noticed for Korean that it can be very tricky to get good definitions consistently from one source (though I have been very happy with Papago for free definitions overall — with some caveats and DeepL for free limited use. But, they mainly excel in translating sentence by sentence).

I note this because I have noticed “Wikitionary” and Navar Dictionary don’t always pull up results for Korean words consistently. So I look forward to seeing how the Wikipedia import function performs for Korean.

Makes sense!

Great idea! I think there might be more to me not being able to see this column (unless it counts the word count for this as “lifetime links” and seriously have a lot of links built up as a LingQ user, lol).

I’m still just seeing a blank box in the “NEW WORD” section like before:

This works great! I was having trouble picturing it (how it would work/process) until you added it. “Line Starters” is user-friendly wording, and I like it a lot!

Had to un-install and reinstall to get the updated version (guess my audio updates aren’t set right or something). These buttons work great. Also, love this!

Side note/complete guess: But it seems like clicking “More Hints” can result in hint results that seem a bit better and less cluttered with the word appearing in Korean Characters (Hangeul) within the meaning!

So you may be on to something here:

It may take a good while to get those popular definitions that aren’t exactly the best weeded out. (This may make things tricky with an "add all blue LingQs in one click feature that I thought I saw somewhere in one of the posts. Since, the most popular will continue to be the most popular, even though it may not be the best definition.)

Nice! Makes things easier!

2 Likes

Dictionaries coming in the next update (just need to figure out how to design this damn UI to be user friendly!)

Audio when you click on the word at the top and the fragment should be out tomorrow too.

Ok. I’ll increase the limit to something dumb in the next update and we will see if it works.

Im thinking about a dropdown box where you just select the line starters that you want in the LingQ. With 1 button to add all if you want.

Maybe i"ll display the ‘All Hints’ result in a separate popup for that word. like a Grid or Rows. Then can close it instead of leaving 30 hints clogging up the screen.

I don’t think its happening soon. We just need to use our best judgment right now.

2 Likes

I like this idea! Then it offers more customization for users who may want more/fewer columns.

Other potential column ideas:

  • Hanja: [“common Hanja in South Korea written as 父母 for parents, 學生 for students, and 學校 for school.”]
  • Phonetic: [Note: This would allow users to create their own pronunciations of the word, or what I would love to use is the “Phonetic Hangeul” of words so I can use Korean characters to create the pronunciation “hints” for Korean words because romanization/transliteration throws me off as a beginner learner. Could also be called “Pronunciation”]

Ex. Of Phonetic Hangeul: Word: 전화 [Phonetic: 저놔]

2 Likes

Hey roosterburton,

Would you be able to make a LingQ extension to easily customize keyboard/mouse-button hotkeys for this site, easy enough to use for non-scripters?

3 Likes

Hi @Vardan_Yervadian

I can look at this but I’ll need some help. I don’t use the shortcuts currently. Can you tell me what there are currently shortcuts for and how to access the keybindings on this site?

2 Likes

I second this, if there could be a way to modify keyboard shortcuts that would be unreal!

This post has a breakdown of the current shortcuts if it helps.

2 Likes