Example #1
0
def generate(
    ctx_entities_path='input/ctx_entities.txt'
):
    """Generate ChatScript files"""
    input_files = list()
    dirname = os.path.dirname(os.path.abspath(__file__))
    dirname = os.path.join(dirname, 'input')
    input_files = glob.glob('{}*.csv'.format(dirname+os.sep))

    generetad_topics = list()
    cbow = wordembedding.CBoW()
    ctx_entities = load_file(ctx_entities_path)

    for questions_path in input_files:
        beaty_topic_name, questions = load_questions(questions_path)
        rules = generate_rules(questions, ctx_entities, cbow)

        sorted_rules = generalize_rules.sort_by_entities(rules, cbow)

        top_name = questions_path.split(os.sep)[-1].split('.')[0]
        topic = models.Topic(top_name, rules, beauty_name=beaty_topic_name)

        gen_rules = generalize_rules.generalize(topic, wordembedding)
        gen_topic = models.Topic(top_name+'_gen', gen_rules)

        topic.rules.extend(sorted_rules)

        generetad_topics.append(topic)
        generetad_topics.append(gen_topic)

    menu = generate_topic_menu(generetad_topics)
    generetad_topics.append(menu)
    postprocessing.save_chatbot_files('Botin', generetad_topics)
Example #2
0
class TestTopics(object):
    cbow = wordembedding.CBoW()

    def test_get_topic_keywords(self):
        result = topics.get_topic_keywords([
            ('*~1 loja [disponibiliza oferece] embalagem',
             'oferecemos empacotamento grátis para você'),
            ('[utilizar usar] *~1 bicicleta',
             'utilize nossas bicicletas à vontade')
        ])
        expected = {
            'empacotamento grátis', 'loja', 'embalagem', 'bicicleta',
            'bicicletas'
        }
        assert result == expected
def get_plurals(word, cbow=None):
    if cbow is None:
        print('WORDEMBEDDING MODEL BEEN INSTANCED')
        cbow = wordembedding.CBoW()

    word_plurals = _get_word_plurals(word)
    plurals = list()

    for plural in word_plurals:
        try:
            sim = cbow.model.similarity(word, plural)
        except KeyError:
            sim = 0
        plurals.append((plural, sim))
    if plurals:
        plurals.sort(key=lambda p: p[1], reverse=True)
        return plurals[0][0]
    return None
class TestGeneralizeRules(object):
    cbow = wordembedding.CBoW()

    def test_group_by_similarity(self):
        groups = [
            {'arroz', 'cachorro', 'feijão', 'montanha'},
            {'bicicleta', 'cão'},
            {'cadeira', 'w'},
            {'parque', 'cachorrinho', 'comprar'},
        ]
        result = generalize_rules.group_by_similarity(groups, self.cbow)
        assert result == [[0, 1, 3], [2]]

    def test_group_by_commom_words(self):
        groups = [
            {'a', 's', 'd'},
            {'z', 's', 'c'},
            {'q', 'w', 'e'},
            {'t', 's', 'y'},
        ]
        result = generalize_rules.group_by_commom_words(groups)
        assert result == [[0, 1, 3], [2]]

    def test_group_rules(self):
        rules = [
            'localizo código vale_trocas',
            'funciona postagem',
            'quero postar produto',
        ]
        expected = [[1, 2], [0]]
        result = generalize_rules.group_rules(rules, self.cbow)
        assert result == expected

    def test_group_rules_dois(self):
        rules = [
            'como localizo o código do meu vale trocas?',
            'como funciona a postagem?',
            'quero postar meu produto.',
            'a loja disponibiliza embalagem de presente?',
            'onde solicitar a montagem de bicicleta?',
            'posso utilizar o bike service para qualquer bicicleta?',
            'o que é bike service?',
            'o que é nota fiscal eletrônica?',
            'como faço para resgatar a segunda via da nota fiscal?',
        ]

        expected = [[1, 2], [4, 5, 6], [8, 7], [0], [3]]
        result = generalize_rules.group_rules(rules, self.cbow)
        assert result == expected

    def test_get_group_reijoindes(self):
        rules = [
            'localizo *~1 código *~2 vale_trocas',
            'funciona *~1 postagem',
            'quero postar *~1 produto',
            'loja [disponibiliza oferece disponibilizará disponibilizou] embalagem *~1 presente',
            'onde [solicitar requerer pedir exigir] *~1 montagem *~1 bicicleta',
            'é bike_service',
            'central *~1 relacionamento',
            '[é seria foi era] nota fiscal eletrônica',
            'faço *~1 [resgatar salvar capturar seduzir] *~1 segunda via *~1 nota fiscal',
            'posso utilizar *~1 bike_service *~1 qualquer bicicleta'
        ]
        rules_ids = [1,2]
        generalize_rules.get_group_rejoinders(rules_ids, rules, rules)