def translate_locale(cmd, dic=cmd_translated):
    l_cmd = text_utils.remove_extra_symbols(cmd, True)
    for command in dic.keys():
        possible_aliases = dic[command]
        if l_cmd in possible_aliases:
            return command
    return False
def find_answer(question):
    question = text_utils.remove_extra_symbols(question)
    used = set()
    def crawl(question):
        mindist = float('Inf')
        query = None
        global questions
        for q in questions:
            if q['id'] in used:
                continue
            variations = [q['question']] + q['same_as']
            for el in variations:
                tmp = text_utils.levenstein_dist(el, question) 
                if tmp < mindist:
                    mindist = tmp
                    query = q
        if float(mindist) / (len(unicode(question)) + 1) <= 0.2:
            used.add(query['id'])
            print used
            answers = query['answers']
            if query.get('same_as') and len(query['same_as']) > 0:
                for same_question in query['same_as']:
                    answers += crawl(same_question)
            return answers
        else:
            return []
    answers = crawl(question)
    if len(answers) == 0:
        return damn()
    rand_ans = random.randint(0, len(answers) - 1)
    for ans in answers[rand_ans:] + answers[0:rand_ans]:
        tmp = translate_irisscript(ans)
        if tmp is not None:
            return tmp
    return damn()
Ejemplo n.º 3
0
def read_learn_public(public_id, shell):
    amount = 10
    cur = 0
    public = []
    while cur < amount:
        pars = {
            'owner_id': public_id,
            'count': 100,
            'offset': cur,
        }
        is_lana = 1 if config.BOT_LEARN_PUBLIC == config.MAIN_LEARN_PUBLIC else 0
        posts = api.query(u'wall.get', pars, lana=is_lana)
        if posts is None or posts.get('error') is not None:
            cur += 10
            continue
        posts = posts['response']
        amount = posts['count']
        posts = posts['items']
        for post in posts:
            post['text'] = text_utils.remove_extra_symbols(post['text'])
            if shell:
                print post['text']
            questions = [el.strip() for el in post['text'].split(u'//')]
            public.append({
                'id': post['id'], 
                'question': questions[0], 
                'answers': [],
                'same_as': questions[1:]
                })
            params = {
                'owner_id': post['owner_id'],
                'post_id': post['id'],
                'count': 100,
                'need_likes': 1,
            }
            comments = api.query(u'wall.getComments', params, lana=is_lana)
            time.sleep(0.3)
            if comments is None or comments.get('error') is not None:
                time.sleep(0.5)
                comments = api.query(u'wall.getComments', params, lana=is_lana)
            if comments is None or comments.get('error') is not None:
                logger.log(u'Не удалось получить комменты к посту с вопросом: ' + post['text'])
                continue
            comments = comments['response']['items']
            for comm in comments:
                if comm['likes']['count'] >= config.LIKES_TO_BE_IN_ANSWERS or comm['likes']['user_likes'] == 1:
                    text_to_append = text_utils.remove_links(comm['text'])
                    if comm.get('attachments'):
                        for el in comm['attachments']:
                            text_to_append += config.SPLIT_SIGN + unicode(el['type']) + \
                                            unicode(el[el['type']]['owner_id']) + u'_' + unicode(el[el['type']]['id'])
                    public[-1]['answers'].append(text_to_append)


        cur += len(posts)
    #for post in public:
    #    print post
    return public