/** * Retrieves a Map with entries that consist of * key -> a model identifier * value -> the PMML4Model object that the key refers to * where the PMML4Model does not indicate a parent model (i.e. the * model is not a child model) * @return The Map of model identifiers and their corresponding PMML4Model objects */ @Override public Map<String, PMML4Model> getRootModels() { Map<String, PMML4Model> rootModels = new HashMap<>(); for (PMML4Model model : this.modelsMap.values()) { if (model.getParentModel() == null) { rootModels.put(model.getModelId(), model); } } return rootModels; }
@Override public Map<String, PMML4Model> getModels(PMML4ModelType type, PMML4Model parent) { Map<String, PMML4Model> filteredModels = new HashMap<>(); Map<String, PMML4Model> unfilteredModels = parent == null ? getRootModels() : getChildModels(parent.getModelId()); if (unfilteredModels != null && !unfilteredModels.isEmpty()) { for (PMML4Model model : unfilteredModels.values()) { if (model.getModelType() == type) { filteredModels.put(model.getModelId(), model); } } } return filteredModels; }
/** * Recursive method that adds children models (i.e. models contained within models) * to the internal map of models * @param parentModel The model which may contain child models */ private void addChildModelsToMap(PMML4Model parentModel) { Map<String, PMML4Model> childModels = parentModel.getChildModels(); if (childModels != null && !childModels.isEmpty()) { for (PMML4Model model : childModels.values()) { modelsMap.put(model.getModelId(), model); addChildModelsToMap(model); } } }
/** * Initializes the internal map of models. This map includes all models that are * defined within the PMML, including child models (i.e. models contained within models) */ private void initModelsMap() { modelsMap = new HashMap<>(); List<PMML4Model> rootModels = modelFactory.getModels(this); if (rootModels != null && !rootModels.isEmpty()) { for (PMML4Model model : rootModels) { modelsMap.put(model.getModelId(), model); addChildModelsToMap(model); } } else { throw new IllegalStateException("BRMS-PMML requires at least one model of the model types that are recognized"); } }
public Map<String, String> getModelPackageNames() { Map<String, String> packageNames = new HashMap<>(); packageNames.put("root", getRootPackage()); for (PMML4Model model : this.getModels()) { packageNames.put(model.getModelId(), model.getModelPackageName()); } return packageNames; }
/** * Retrieves a Map with entries that consist of * key -> a model identifier * value -> the List of raw MiningField objects belonging to the model referenced by the key * @return The Map of model identifiers and their corresponding list of raw MiningField objects */ public Map<String, List<MiningField>> getMiningFields() { Map<String, List<MiningField>> miningFieldsMap = new HashMap<>(); for (PMML4Model model : getModels()) { List<MiningField> miningFields = model.getRawMiningFields(); miningFieldsMap.put(model.getModelId(), miningFields); model.getChildModels(); } return miningFieldsMap; }
protected void initChildModels() { childModels = new HashMap<>(); Iterator<Serializable> extenIter = rawModel.getExtensionsAndMiningSchemasAndOutputs().iterator(); segmentation = null; while (extenIter.hasNext() && segmentation == null) { Object obj = extenIter.next(); if (obj instanceof Segmentation) { segmentation = new MiningSegmentation(this,(Segmentation)obj); } } if (segmentation != null) { List<MiningSegment> segments = segmentation.getMiningSegments(); DataDictionary dd = this.getDataDictionary(); for (MiningSegment seg : segmentation.getMiningSegments()) { childModels.put(seg.getModel().getModelId(), seg.getModel()); } } }
if (rootModel != null) { helper.setPack(rootModel.getModelPackageName()); KieBaseModel kbm = module.newKieBaseModel(rootModel.getModelId()); kbm.addPackage(helper.getPack()) .setDefault(true) PMMLResource resource = new PMMLResource(helper.getPack()); StringBuilder bldr = new StringBuilder(this.compile(pmml, classLoader)); String extBeanMiningRules = unit.getModelExternalMiningBeansRules(rootModel.getModelId()); if (extBeanMiningRules != null) { bldr.append(extBeanMiningRules); resource.addRules(rootModel.getModelId(), bldr.toString()); resources.add(resource);
protected PMMLResource buildResourceFromSegment(PMML pmml_origin, MiningSegment segment, ClassLoader classLoader, KieModuleModel module) { PMML pmml = new PMML(); DataDictionary dd = pmml_origin.getDataDictionary(); pmml.setDataDictionary(dd); pmml.setHeader(pmml_origin.getHeader()); pmml.getAssociationModelsAndBaselineModelsAndClusteringModels().add(segment.getModel().getRawModel()); addMissingFieldDefinition(pmml, segment.getOwner(), segment); helper.setPack(segment.getModel().getModelPackageName());//PMML4Helper.pmmlDefaultPackageName()+".mining.segment_"+segment.getSegmentId()); StringBuilder rules = new StringBuilder(this.compile(pmml, classLoader)); String extBeanMiningRules = segment.getModel().getExternalBeansMiningRules(); if (extBeanMiningRules != null) { rules.append(extBeanMiningRules); } KieBaseModel kbModel = module.newKieBaseModel(segment.getOwner().getOwner().getModelId() + "_" + segment.getOwner().getSegmentationId() + "_SEGMENT_" + segment.getSegmentId()); kbModel.addPackage(helper.getPack()) .setDefault(false) .setEventProcessingMode(EventProcessingOption.CLOUD); KieSessionModel ksm = kbModel.newKieSessionModel("SEGMENT_" + segment.getSegmentId()); ksm.setDefault(true); PMMLResource resource = new PMMLResource(helper.getPack()); resource.setKieBaseModel(kbModel); resource.addRules(segment.getModel().getModelId(), rules.toString()); return resource; }