@SuppressWarnings("CallToThreadDumpStack")
    private double scoreBasedExpressions(ArrayList<ArrayList<FieldCandidate>> correctColumns, int idealNumColumn, String field) {
        try {

            String fieldExpression = null;
            ArrayList<ArrayList<String>> allColumnExpressions = new ArrayList<ArrayList<String>>();

            fieldExpression = getFieldExpression(field);
            allColumnExpressions = expressionsInColumns(correctColumns, idealNumColumn);

            if (!allColumnExpressions.isEmpty()) {
                int occurrencesSum = 0;

                for (int i = 0; i < idealNumColumn; i++) {
                    for (int j = 0; j < allColumnExpressions.size(); j++) {
                        occurrencesSum += funcaoCompara(fieldExpression, allColumnExpressions.get(i).get(j));
                    }
                }
                double expressionScore = 0.0;
                expressionScore = computePercentage(occurrencesSum, allColumnExpressions.size());

                return expressionScore;
            }
        } catch (Exception error) {
            /**
             * Show the StackTrace error [for debug].
             */
            error.printStackTrace();
//            System.out.println(error);
        }
        return Double.MAX_VALUE;
    }