Exemple #1
0
def edit_message(response, chat, message, page):
    dm.save_page(chat, message, page)
    bot.edit_message_text(response,
                          chat,
                          message,
                          reply_markup=get_markup(),
                          parse_mode='Markdown')
Exemple #2
0
def pipeline(message):
    # NER
    message_counter = 2
    slots = nlu.NER.NamedEntityRecognition(message.text)
    if message.chat.id in Slots:
        for slot in slots:
            if slot in Slots[message.chat.id]:
                Slots[message.chat.id][slot] = set.union(slots[slot], Slots[message.chat.id][slot])
            else:
                Slots[message.chat.id][slot] = slots[slot]
    else:
        Slots[message.chat.id] = slots
    logger.info("###SLOTS###")
    logger.info(Slots)
    # Clarifyings
    if len(Slots[message.chat.id]) == 0:
        return dm.States.R_CLARIFY_ALL.value, message_counter
    if len(Slots[message.chat.id]) == 1:
        if 'ACTOR' in Slots[message.chat.id]:
            return dm.States.R_CLARIFY_GENRE.value, message_counter
    # Processing Plot
    keywords_id = set()
    if 'PLOT' in Slots[message.chat.id]:
        n_matches = 5
        plot = " ".join(Slots[message.chat.id]['PLOT'])
        df = nlu.MoviePlot.plot2movie(plot, n_matches=n_matches)
        max_page = n_matches if df.shape[0] >= n_matches else df.shape[0]
        if max_page != 0:
            films = dm.api_movie(config.DB_API_TOKEN, df['tmdbId'].iloc[:max_page].values)
            dm.save_request(message.chat.id, message.message_id + message_counter, films)
            dm.save_page(message.chat.id, message.message_id + message_counter, page=1)
            return dm.States.R_OK.value, message_counter
        else:
            for word in plot.split()[:5]:
                if add_keywords(message.chat.id, word):
                    keywords_id = Slots[message.chat.id]['KEYWORDS']

    # If plot gives no result
    actors_id = []; genres_id = []; director_id = []; year=None
    if 'GENRE' in Slots[message.chat.id]:
        for genre in Slots[message.chat.id]['GENRE']:
            closest = dm.find_levenshtein_closest(genre, list(dm.ApiDicts.genre_to_id.keys()))
            if closest == False:
                if add_keywords(message.chat.id, genre):
                    keywords_id = Slots[message.chat.id]['KEYWORDS']
            else:
                genres_id.append(dm.ApiDicts.genre_to_id[closest])
        if len(genres_id) == 0 and len(list(keywords_id)) == 0:
            return dm.States.R_CLARIFY_GENRE.value, message_counter
    if 'ACTOR' in Slots[message.chat.id]:
        for actor in Slots[message.chat.id]['ACTOR'].copy():
            if actor.lower() in dm.ApiDicts.person_to_id:
                actors_id.append(dm.ApiDicts.person_to_id[actor.lower()][0])
            else:
                message_counter += 1
                bot.send_message(message.chat.id, "I don’t know who is " + actor + ". Please, check spelling.")
                Slots[message.chat.id]['ACTOR'].remove(actor)
        if len(actors_id) == 0:        
            return dm.States.R_CLARIFY_ACTOR.value, message_counter

    if 'DIRECTOR' in Slots[message.chat.id]:
        for director in Slots[message.chat.id]['DIRECTOR'].copy():
            if director.lower() in dm.ApiDicts.person_to_id:
                director_id.append(dm.ApiDicts.person_to_id[director.lower()][0])
            else:
                message_counter += 1
                bot.send_message(message.chat.id, "I don’t know who is " + director + ". Please, check spelling.")
                Slots[message.chat.id]['DIRECTOR'].remove(director)

    if 'YEAR' in Slots[message.chat.id]:
        year = str(nlu.extract_year(Slots[message.chat.id]['YEAR'].pop()))
        print("parsed year: ", year)
    if len(genres_id + actors_id + director_id + list(keywords_id)) != 0 or year != None:
        print("Call API with genres=", genres_id, " and actors=", actors_id, " and directors=", director_id)
        films = dm.api_discover(config.DB_API_TOKEN, genres=genres_id, actors=actors_id, crew=director_id, keywords=keywords_id, year=year)
        if json.loads(films)["total_results"] == 0:
            return dm.States.R_NONE.value, message_counter
        else:
            dm.save_request(message.chat.id, message.message_id + message_counter, films)
            dm.save_page(message.chat.id, message.message_id + message_counter, page=1)
            return dm.States.R_OK.value, message_counter
    else:
        return dm.States.R_NONE.value, message_counter