public PMML4Compiler() { super(); this.results = new ArrayList<KnowledgeBuilderResult>(); helper = new PMML4Helper(); helper.setPack("org.kie.pmml.pmml_4_2.test"); SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); try { schema = sf.newSchema(PMML4Compiler.class.getClassLoader().getResource(SCHEMA_PATH)); } catch (SAXException e) { e.printStackTrace(); } }
public String mapFunctionAsQuery( String functor, String... args ) { return mapFunction( functor, true, args ); }
public String getPmmlPackageName() { return pmmlDefaultPackageName(); }
public String compactAsJavaId(String s, boolean forceCapital) { s = s.replaceAll( ",", "_" ); java.util.StringTokenizer tok = new java.util.StringTokenizer(s.trim()); StringBuilder sb = new StringBuilder(); boolean first = true; while ( tok.hasMoreTokens() ) { String nt = tok.nextToken(); sb.append( (first && ! allCapital( nt ) && ! forceCapital ) ? lowerCase( nt ) : capitalize( nt ) ); first = false; } String out = sb.toString(); if( out.matches( "\\d.*" ) ) { out = "DF_" + out; } return out; }
this.results = new ArrayList<KnowledgeBuilderResult>(); PMML pmml = loadModel(PMML, stream); helper.setResolver(classLoader); PMML4Unit unit = new PMML4UnitImpl(pmml); if (unit.containsMiningModel()) { PMML4Model rootModel = unit.getRootModel(); if (rootModel != null) { helper.setPack(rootModel.getModelPackageName()); KieBaseModel kbm = module.newKieBaseModel(rootModel.getModelId()); kbm.addPackage(helper.getPack()) .setDefault(true) .setEventProcessingMode(EventProcessingOption.CLOUD); PMMLResource resource = new PMMLResource(helper.getPack()); StringBuilder bldr = new StringBuilder(this.compile(pmml, classLoader)); String extBeanMiningRules = unit.getModelExternalMiningBeansRules(rootModel.getModelId());
@Test public void testPMMLHeader() { String source = PMML4Helper.pmmlDefaultPackageName().replace( ".", File.separator ) + File.separator + "test_header.xml"; compiler.getHelper().setPack( "org.kie.pmml.pmml_4_2.test" );
@Test public void testFunctionMapping() { PMML4Helper ctx = new PMML4Helper(); assertEquals("(2 + 3 + 4)" , ctx.mapFunction("+","2","3","4")); assertEquals("(2 - 3)" , ctx.mapFunction("-","2","3")); assertEquals("(2 * 3 * 4)" , ctx.mapFunction("*","2","3","4")); assertEquals("(2 / 4)" , ctx.mapFunction("/","2","4")); assertEquals("(Math.min(2,Math.min(3,4)))" , ctx.mapFunction("min","2","3","4")); assertEquals("(Math.max(2,Math.max(3,4)))" , ctx.mapFunction("max","2","3","4")); assertEquals("(2 + 3 + 4)" , ctx.mapFunction("sum","2","3","4")); assertEquals("(2 * 3 * 4)" , ctx.mapFunction("product","2","3","4")); assertEquals("((2 + 3 + 4) / 3)" , ctx.mapFunction("avg","2","3","4")); assertEquals("(3)" , ctx.mapFunction("median","1","2","3","4","5")); assertEquals("( 0.5 * 3 + 0.5 * 4 )" , ctx.mapFunction("median","1","2","3","4","5","6")); assertEquals("(Math.log10(2))" , ctx.mapFunction("log10","2")); assertEquals("(Math.log(2))" , ctx.mapFunction("ln","2")); assertEquals("(Math.sqrt(2))" , ctx.mapFunction("sqrt","2")); assertEquals("(Math.abs(2))" , ctx.mapFunction("abs","2")); assertEquals("(Math.exp(2))" , ctx.mapFunction("exp","2")); assertEquals("(Math.pow(2,3))" , ctx.mapFunction("pow","2","3")); assertEquals("(1)" , ctx.mapFunction("pow","0","0")); assertEquals("(2 > 3 ? 1 : 0)" , ctx.mapFunction("threshold","2","3")); assertEquals("(Math.floor(2))" , ctx.mapFunction("floor","2")); assertEquals("(Math.ceil(2))" , ctx.mapFunction("ceil","2")); assertEquals("(Math.round(2))" , ctx.mapFunction("round","2")); assertEquals("(\"abc\".toString().toUpperCase())" , ctx.mapFunction("uppercase","\"abc\""));
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; }
public String mapWeightStrategy( String strat ) { return resolveAggregationStrategy( strat ).getAggregator(); }
public String getDRL() { if (pmmlDocument != null) { PMML4Unit pmmlUnit = new PMML4UnitImpl(pmmlDocument); compiler.getHelper().setPack(pmmlUnit.getRootPackage()); } String drl = compiler.generateTheory(pmmlDocument); if (!compiler.getResults().isEmpty()) { for (KnowledgeBuilderResult res : compiler.getResults()) { logger.error(res.getMessage()); } compiler.clearResults(); } return drl; }
ans += args[0]; } else if ("min".equals(functor)) { ans += associativeNaryToBinary("Math.min",0,args); } else if ("max".equals(functor)) { ans += associativeNaryToBinary("Math.max",0,args); } else if ("sum".equals(functor)) { ans += args[0]; } else if ("formatDatetime".equals(functor)) { ans += "new java.text.SimpleDateFormat(" + posix2Java(args[1]) + ").format(new SimpleDateFormat().parse(" + args[0] +", java.util.Locale.ENGLISH))"; } else if ("dateDaysSinceYear".equals(functor)) {
public String createPartialScoreFormula(Attribute attribute) { String formula = null; ComplexPartialScore cps = attribute.getComplexPartialScore(); if (cps != null) { formula = addToFormula(cps.getApply()); } else { formula = attribute.getPartialScore().toString(); } return formula; }
private String associativeNaryToBinary(String f, int j, Object... args) { if (j < args.length -1) return f + "(" + args[j] + "," + associativeNaryToBinary(f,j+1,args) + ")"; else return args[j].toString(); }
public String compactUpperCase(String s) { if (s == null) { throw new IllegalArgumentException("Cannot call PMML4Helper::compactUpperCase with a null string."); } java.util.StringTokenizer tok = new java.util.StringTokenizer(s); StringBuilder sb = new StringBuilder(); while ( tok.hasMoreTokens() ) { sb.append( capitalize( tok.nextToken() ) ); } String out = sb.toString(); if( out.matches( "\\d.*" ) ) { out = "DF_" + out; } return out; }
public boolean isWeighted( String strat ) { return resolveAggregationStrategy( strat ).isWeighted(); }
String rightSide = null; if (applyTo.size() <= 2) { leftSide = addToFormula(applyTo.get(0)); rightSide = addToFormula(applyTo.get(1)); Iterator<Serializable> iter = applyTo.iterator(); while(iter.hasNext()) { bldr.append(addToFormula(iter.next())); if (iter.hasNext()) { bldr.append(", ");
public String mapFunction( String functor, String... args ) { return mapFunction( functor, false, args ); }
private int getNumAssertedSynapses() { Class<?> synClass = getKSession().getKieBase().getFactType( PMML4Helper.pmmlDefaultPackageName(),"Synapse").getFactClass(); return getKSession().getObjects(new ClassObjectFilter(synClass)).size(); }
protected static AggregationStrategy getScoringStrategy( Scorecard scorecard ) { String scoringStrategyName = ScorecardPMMLUtils.getExtensionValue(scorecard.getExtensionsAndCharacteristicsAndMiningSchemas(), ScorecardPMMLExtensionNames.SCORECARD_SCORING_STRATEGY); return PMML4Helper.resolveAggregationStrategy( scoringStrategyName ); } }
public String mapFunction( String functor, List args ) { String[] argz = new String[args.size()]; for (int j = 0; j < args.size(); j++) { argz[j] = args.get(j).toString(); } return mapFunction( functor, false, argz ); }