예제 #1
0
async def get_words_and_phrases(text, text_language, user_language, user):
    sentences = list()
    processor = TextPreprocessor(CODES[text_language])
    # TODO save to cache the processors
    t = Text(text)
    subscribed = mysql_connect.check_subscribed(user)
    if not subscribed:
        await bot.send_message(user, "/subscribe to get translations for your text sentences")

    for s in t.sentences:
        sent = BotSentence(s.start, s.end)
        # TODO paid feature
        translation = await bot_utils.get_definitions(text_language, user_language, s.string, user)
        sent.translation = translation
        key_words = processor.key_words(s.string)
        for kw in key_words:
            w = kw[0]
            if ' ' in w:
                sent.words.append(w)
        for word in s.words:
            word = str(word)
            if re.match(r"[^\w]+", word) is not None:
                continue
            sent.words.append(word)
        sentences.append(sent)

    return sentences
예제 #2
0
파일: core.py 프로젝트: chingz/OppiWordsBot
async def create_user_session(user):
    user_data = mysql_connect.fetchone("SELECT language_code, learning_language, first_name, last_name "
                                       "FROM users WHERE user_id = %s",
                                       (user,))
    if user_data is None:
        logger.info("{} has no session in db", user)
        await onboarding.onboarding_start(user)
        return
    else:
        if user_data[0] is None:
            user_data = ('english', user_data[1], user_data[2], user_data[3])
            await bot.send_message(user, 'Please, run /settings to specify your language')

        elif user_data[1] is None:
            await bot.send_message(user, 'Please, run /setlanguage to specify the language you want to learn')
            user_data = (user_data[0], 'english', user_data[2], user_data[3])
    logger.info("{} has data {}", user, user_data)
    s = UserSession(user, user_data[2],
                    user_data[3],
                    user_data[0])
    s.subscribed = mysql_connect.check_subscribed(user)
    s.set_active_language(user_data[1])
    logger.info("{} session is ready, subscription status is {}", user, s.subscribed)
    sessions[user] = s
    await bot.send_message(user, "OK, now you can /addwords to get exercises.\n"
                                 "Or you can add many words with /wordlist command.\n"
                                 "Use /addtext to work with texts\n"
                                 "Then type /learn to start training.\n\n"
                                 "/subscribe to activate *premium features* "
                                 "(voice recognition, automatic translations and text-to-speech)\n\n"
                                 "Use /help if you need help")
    return s
예제 #3
0
async def create_user_session(user):
    user_data = mysql_connect.fetchone(
        "SELECT language_code, learning_language, first_name, last_name "
        "FROM users WHERE user_id = %s", (user, ))
    if user_data is None:
        logger.info("{} has now session in db")
        await bot.send_message(user,
                               "You should /start the bot before learning")
        return

    if user_data[0] is None:
        user_data = ('english', user_data[1])
        await bot.send_message(
            user, 'Please, run /settings to specify your language')

    if user_data[1] is None:
        await bot.send_message(
            user,
            'Please, run /setlanguage to specify the language you want to learn'
        )
        user_data = (user_data[0], 'english')

    s = UserSession(user, user_data[2], user_data[3], user_data[0])
    s.subscribed = mysql_connect.check_subscribed(user)
    s.set_active_language(user_data[1])
    logger.info("{} session is ready, subscription status is {}", user,
                s.subscribed)
    sessions[user] = s
    return s
예제 #4
0
async def get_definitions(language, user_lang, word, user):
    result = list()
    sources = mysql_connect.fetchall('SELECT source FROM def_sources WHERE user=%s', (user, ))
    sources = set(x[0] for x in sources)
    if user_lang is None:
        user_lang = 'english'
    # See list of available sources in generic.py
    if 'Yandex Dictionary' in sources:
        if 'Yandex Dictionary_' + user_lang + language + '_' + word in MEM_CACHE.keys():
            result = MEM_CACHE['Yandex Dictionary_' + user_lang + language + '_' + word]
        else:
            try:
                response = ya_dict.lookup(word, CODES[language], get_lang_code(user_lang))
                result = to_list(json.loads(response))
                MEM_CACHE['Yandex Dictionary_' + user_lang + language + '_' + word] = result

            except Exception as e:
                logger.warning("Yandex dictionary exception: " + str(e))

    if 'Wiktionary' in sources:
        if 'Wiktionary_' + language + '_' + word in MEM_CACHE.keys():
            result.extend(MEM_CACHE['Wiktionary_' + language + '_' + word])
        else:
            try:
                w = parser.fetch(word.lower(), language=language)
            except Exception as e:
                logger.warning("Wiktionary exception: " + str(e))

            if w is not None and len(w) > 0:
                res = process_wiktionary(w)
                if len(res) > 0:
                    result.extend(res)
                    MEM_CACHE['Wiktionary_' + language + '_' + word] = res
    if 'Google Translate' in sources or ' ' in word:
        if 'Google Translate_' + user_lang + language + '_' + word in MEM_CACHE.keys():
            result.extend(MEM_CACHE['Google Translate_' + user_lang + language + '_' + word])
        else:
            subscribed = mysql_connect.check_subscribed(user)
            limit = 50
            if subscribed:
                limit = 500
            if len(word) <= limit :
                try:
                    tr = translate_client.translate(
                        word,
                        target_language=get_lang_code(user_lang))
                    result.append(tr['translatedText'])
                    MEM_CACHE['Google Translate_' + user_lang + language + '_' + word] = tr['translatedText']
                except Exception as e:
                    logger.error(e)
    return result