protected Defuzzifier extractDefuzzifier(String line) {
        List<String> token = Op.split(line, ":");
        if (token.size() != 2) {
            throw new RuntimeException("[syntax error] "
                    + "expected property of type (key : value) in line: " + line);
        }
        String name = token.get(1).trim();
        String className = name;
        if ("COG".equals(className)) {
            className = Centroid.class.getSimpleName();
        } else if ("COA".equals(className)) {
            className = Bisector.class.getSimpleName();
        } else if ("LM".equals(className)) {
            className = SmallestOfMaximum.class.getSimpleName();
        } else if ("RM".equals(className)) {
            className = LargestOfMaximum.class.getSimpleName();
        } else if ("MM".equals(className)) {
            className = MeanOfMaximum.class.getSimpleName();
        } else if ("COGS".equals(className)) {
            className = WeightedAverage.class.getSimpleName();
        } else if ("COGSS".equals(className)) {
            className = WeightedSum.class.getSimpleName();
        }
        return FactoryManager.instance().defuzzifier().createInstance(className);
    }