A month ago, we opened the API of our dictionary, offered everyone to use it in their applications and services, and even announced a competition among developers. Since that time, we have received 18 bids, among them several ready-made solutions. Today we decided in our blog to give the authors of four of them the opportunity to talk about their product (and we will comment on it).
If you missed the post about our ecosystem, where the competition was announced - here is the link . At that time, the conditions of the competition were not yet ready for us - here they are . The prize fund of our competition is 200 thousand rubles - money for the developer of a new application or service is not superfluous!
And now - to get acquainted with the first participants.
Lenny is a chatbot that helps users replenish their vocabulary by 10 words per day. Central Asia - these are people who are learning English right now or have studied it earlier. A large vocabulary is needed in order to speak well, easy to read, understand others and just think.
So that words are not forgotten, they need to be regularly “refreshed” in their memory. We did not go far and built an algorithm of repetition based on the Ebingausa forgetting curve. In practice, this means that the user repeats words after 30 minutes, 1 day, 1 week, 1 month, and 1 year. Thus, the words are fixed long-term memory. And at the right moment you can get them from there and apply.
Now about the content. Before the start of the competition, we already had a base of 10,000 words. And when Skyeng provides an opportunity to make the base even better, it needs to be used. We did so by receiving and saving everything necessary in separate files.
Namely:
import requests import time from content import dictionary def skyeng_word(word): url = "http://dictionary.skyeng.ru/api/public/v1/words/search?_format=json&search={}".format(word) response = requests.get(url) try: ids = response.json()[0]['meanings'][0]['id'] return skyeng_meaning(ids) except: return None def skyeng_meaning(ids): url = "http://dictionary.skyeng.ru/api/public/v1/meanings?_format=json&ids={}".format(ids) response = requests.get(url) return response.json()[0]['examples'][0]['text'] def get_example(word): example = skyeng_word(word) if example is not None: return example else: return '!!! {} !!!'.format(word) def add_example(): i = 1 while i <= 10000: time.sleep(1) example = get_example(dictionary[i]['word']) with open('examples.py', 'a') as file: file.write("{}: \"{}\"\n".format(i, example)) print(i) i += 1 if __name__ == '__main__': add_example()
import requests import time from content import dictionary def skyeng_word(word): url = "http://dictionary.skyeng.ru/api/public/v1/words/search?_format=json&search={}".format(word) response = requests.get(url) try: ids = response.json()[0]['meanings'][0]['id'] return skyeng_meaning(ids) except: return None def skyeng_meaning(ids): url = "http://dictionary.skyeng.ru/api/public/v1/meanings?_format=json&ids={}".format(ids) response = requests.get(url) return response.json()[0]['definition']['text'] def get_definition(word): definition = skyeng_word(word) if definition is not None: return definition else: return '!!! {} !!!'.format(word) def add_definition(): i = 1 while i <= 10000: time.sleep(1) definition = get_definition(dictionary[i]['word']) with open('definitions.py', 'a') as file: file.write("{}: \"{}\"\n".format(i, definition)) print(i) i += 1 if __name__ == '__main__': add_definition()
import requests import time from content import dictionary def skyeng_word(word): url = "http://dictionary.skyeng.ru/api/public/v1/words/search?_format=json&search={}".format(word) response = requests.get(url) try: voice_url = "http:{}".format(response.json()[0]['meanings'][0]['soundUrl']) return requests.get(voice_url) except: return None def get_voice(): i = 1 while i <= 10000: time.sleep(1) voice = skyeng_word(dictionary[i]['word']) file_name = '{}.ogg'.format(i) if voice is not None: with open(file_name, 'wb') as file: file.write(bytes(voice.content)) print(i) i += 1 if __name__ == '__main__': get_voice()
Then we just updated the current database with all saved.
I think it’s not worth explaining why we kept the content at our place instead of accessing the API each time. This way faster. And the faster the bot works, the more satisfied the users are.
It would be desirable to finish the debut on Habré aphorism. It reflects the philosophy of our small team - “Words can inspire and words can destroy. They are important to learn.
Thanks to Skyeng for making the product better. Thank you all, good luck!
Skyeng : We really like the LennyEnglishBot bot, it is minimalistic and unobtrusive, and it works on three platforms - Telegram, Facebook and Viber. For those who do not want or can not put an extra application in the phone - the most it is, the threshold of entry is minimal. In our ecosystem, such a product was very necessary.
The problem, however, is that this bot is not fully integrated into our ecosystem. The author drove a fixed set of 10 thousand words there and pulled our definitions to this set. There is no opportunity to train arbitrary words and, most importantly for us, there is no opportunity to train words taken for study in Vimbox. We hope that in future versions of the bot all this will be taken into account, because, again, we like it very, very much.
readore is a collection of books synced to an audio track. Each book is assigned a level of complexity, which makes it easy to pick up literature for your level of language proficiency. When reading, you can instantly translate unfamiliar words and add to the list of words to memorize. From now on, in all books this word will be highlighted, and during the day we will send him a word-translation notification.
The application was implemented before the contest, when I bought Marquez in paper binding for learning Spanish. Then the idea came to learn a foreign language with your favorite books.
Using the SkyEng API, our application will now again work in Ukraine (before that, we used Yandex. Dictionary), I was just looking for a free alternative. Well, now, due to numerous requests from users, readore boasts an offline dictionary.
Skyeng : We liked this app. Cute, similar to Bookmate. Some books have built-in voice acting. Built-in dictionary and translator, you can mark words to learn. And the best part is that in the near future the students of our school will have the opportunity to add words to the study in our mobile application Words.
I have been studying English for three years already, before I dreamed of watching movies and reading literature in the original. The dream came true, but the memorization of new words is difficult, there are always words that I do not know.
Once I read an article on geektimes, from which I learned about the site tatoeba.org. I unloaded the list of sentences from there, parsed and chose the most common words, and then decided not to limit myself to English only. As a result, a base of 3.5 million sentences was created, 500 thousand words in 30 languages, including even Esperanto. Created a web application in which you can add words to learn and mark learned. Memorization of words occurs when they are repeated in small phrases.
There is a training mode where the phrase needs to be completely reprinted (at the same time, blind typing can be trained). You can download the text for study, usually using texts from the lessons of AJ Hoge, it parses, the output is a list of words sorted by the frequency of occurrence in this text. The application does not fit completely new to foreign languages, grammar lessons are not here.
Recently I connected Skyeng API in conjunction with jQuery qtip plugin, now by clicking on the English word, ajax request is sent to Skyeng, and the translation of the word with voice acting appears. I have long wanted to connect this functionality, my hands did not reach, but with Skyeng it took literally an hour. In the near future I will allow my users to learn the words that they added to their Skyeng account, I hope this will increase the conversion.
The project opensource, completely free, if there are many users, you have to enter paid functions, you need to pay for the server, but the foundation will still be available to all.
Written in Ruby on Rails, anyone can offer their ideas on functionality, design, marketing, in general, I would not refuse a product manager.
Skyeng : Enwords provides an opportunity to independently compile lists of words to learn, this is a functional that users of our words application actively ask for. However, the text parser, unlike our Wordset Generator, does not know how to sort words by level of complexity, so the output is a very large list, starting with articles, pronouns and obviously well-known words; thus, it is necessary to spend time extracting the vocabulary necessary for learning. An important feature of Enwords is open source .
UPD: a new important feature is the ability to add words from your Skyeng account, just enter your e-mail in the "Skyeng Settings" field. Fine!
The idea of ​​the application is as follows: create an online translator of words (phrases) with saving translation options (offline) for a detailed study of the values ​​obtained. Those. implies "unsystematic" vocabulary expansion.
The Skyeng API is currently used as a query implementation (method "search": dictionary.skyeng.ru/api/public/v1/words/search). We were pleased with the fact that it works without authorization, and the results are provided for both Russian and English words. A simple implementation of the application in the form of two fragments arose from the structure of the query results: “a list of received (on demand) words” and “a display of values ​​(translation variants)”. The resulting values ​​are displayed in the form of "visual cards" with the ability to download audio files for transcription playback. The search query results are saved in the application database (consists of two related tables, ORM Lite is used), audio files and images are stored in the application directory.
Each word (query results) is assigned one of the categories:
1) "To study",
2) "Learned",
3) Favorites,
4) "Viewed" (assigned when choosing a word to view the values ​​of the translation);
when moving to “Learned”, a test task is formed: select the correct one from the five proposed translation options, a random sample from the table of “value” if the “part of speech” field coincides.
Skyeng : “More Words” is essentially a simplified analogue of our words app. Although it does not really fit into our ecosystem, we are pleased with its existence: we are for diversity and choice.
The Skeyng competition continues, we hope to see even more interesting developments using our API. If you have an idea or a ready application - fill out the application .
Well, if you want to develop applications inside Skyeng - we, as always, have interesting vacancies .
Upd. We have added a new method to the API, now you can also add words to your words from the applications in your application. API documentation for the links: https://dictionary.skyeng.ru/doc/api/external , https://words.skyeng.ru/api/doc/external .
Upd. 2: The results of the competition are published in a separate article.
Source: https://habr.com/ru/post/333524/