ret = []
    for op in ops:
        ret.append(list(map(lambda x: tr[x], op)))
    return ret

if True:
    train_data = get_nice_data(get_data('reviews.json'))
    train_data = list(map(lambda x: np.array(x), train_data))

    scores = []
    for train_idx, test_idx in KFold(len(train_data[0]), n_folds=7, \
            shuffle=True):
        X_train = train_data[0][train_idx]
        Y_train = train_data[1][train_idx]

        X_test, Y_test = Solution._remove_differencies((train_data[0][test_idx],\
                train_data[1][test_idx]), True)

        sol = Solution(True)
        sol.train((X_train, Y_train))

        # sometimes it says "AttributeError: '_ConstantPredictor'
        # object has no attribute 'predict_proba'". It happens when some 
        # opinion is presented in all training data. I think it's data problem,
        # not classificator's.
        answer = sol.getClasses(X_test)

        transformer = encode_ops(answer + Y_test)
        answer = transform(answer, transformer)
        Y_test = transform(Y_test, transformer)
        
        f_m = f1_score(Y_test, answer, labels=range(len(transformer)), average='micro')