From 7757074fbdab28ef2ddede9ef22f7c613b37349a Mon Sep 17 00:00:00 2001 From: TKasekamp Date: Mon, 29 Jun 2015 16:14:13 +0300 Subject: [PATCH] Specific query replacements working Must use ; as query separator as , is used for separating activities. --- .../java/ee/tkasekamp/ltlminer/LTLMiner.java | 26 ++++++++----------- .../ltlminer/RuleTemplateCreator.java | 8 ++++-- .../ltlminer/RuleTemplateCreatorTest.java | 16 +++++++++--- .../ee/tkasekamp/ltlminer/StarterTest.java | 14 +++++++++- 4 files changed, 42 insertions(+), 22 deletions(-) diff --git a/src/main/java/ee/tkasekamp/ltlminer/LTLMiner.java b/src/main/java/ee/tkasekamp/ltlminer/LTLMiner.java index ccc7bf4..92bffd8 100644 --- a/src/main/java/ee/tkasekamp/ltlminer/LTLMiner.java +++ b/src/main/java/ee/tkasekamp/ltlminer/LTLMiner.java @@ -1,6 +1,7 @@ package ee.tkasekamp.ltlminer; import java.util.ArrayList; +import java.util.HashMap; import java.util.Properties; import java.util.Vector; @@ -40,35 +41,31 @@ public LTLMiner() { logFilter = new LogFilter(); } - public ArrayList mine(XLog log, ArrayList ruleTemplates, - double minSupport) { + public ArrayList mine(XLog log, ArrayList ruleTemplates, double minSupport) { this.minSupport = minSupport; ArrayList events = logFilter.getAllEvents(log); - ArrayList rules = ruleCreator.generateRules(ruleTemplates, - events); + ArrayList rules = ruleCreator.generateRules(ruleTemplates, events); Object[] objList = checkRules(log, rules); return filter(objList); } - public ArrayList mineWithEventTypes(XLog log, - ArrayList ruleTemplates, double minSupport) { + public ArrayList mineWithEventTypes(XLog log, ArrayList ruleTemplates, + double minSupport) { this.minSupport = minSupport; ArrayList events = logFilter.getAllEvents(log); ArrayList eventTypes = logFilter.getEventTypes(log); - ArrayList rules = ruleCreator.generateRules(ruleTemplates, - events, eventTypes); + ArrayList rules = ruleCreator.generateRules(ruleTemplates, events, eventTypes); Object[] objList = checkRules(log, rules); return filter(objList); } public ArrayList mine(XLog log, Properties properties) { - this.minSupport = Double.parseDouble(properties - .getProperty("minSupport")); + this.minSupport = Double.parseDouble(properties.getProperty("minSupport")); String queries = properties.getProperty("queries"); - ArrayList ruleTemplates = RuleTemplateCreator - .createTemplates(queries); + ArrayList> replacements = ReplacementFinder.find(queries); + ArrayList ruleTemplates = RuleTemplateCreator.createTemplates(queries); boolean considerEventTypes = Boolean.parseBoolean(properties .getProperty("considerEventTypes")); @@ -78,10 +75,9 @@ public ArrayList mine(XLog log, Properties properties) { if (considerEventTypes) { ArrayList eventTypes = logFilter.getEventTypes(log); - rules = ruleCreator - .generateRules(ruleTemplates, events, eventTypes); + rules = ruleCreator.generateRules(ruleTemplates, events, eventTypes, replacements); } else { - rules = ruleCreator.generateRules(ruleTemplates, events); + rules = ruleCreator.generateRules(ruleTemplates, events, null, replacements); } Object[] objList = checkRules(log, rules); return filter(objList); diff --git a/src/main/java/ee/tkasekamp/ltlminer/RuleTemplateCreator.java b/src/main/java/ee/tkasekamp/ltlminer/RuleTemplateCreator.java index 955d939..16992fb 100644 --- a/src/main/java/ee/tkasekamp/ltlminer/RuleTemplateCreator.java +++ b/src/main/java/ee/tkasekamp/ltlminer/RuleTemplateCreator.java @@ -11,7 +11,7 @@ public class RuleTemplateCreator { public static ArrayList createTemplates(String queries) { ArrayList templates = new ArrayList<>(); - String[] s = queries.split(","); + String[] s = queries.split(";"); for (String string : s) { templates.add(bla(string)); } @@ -20,7 +20,7 @@ public static ArrayList createTemplates(String queries) { private static String bla(String thing) { thing = thing.replaceAll("\"", ""); - + thing = removeSpecificParameters(thing); HashSet a = getParameters(thing); thing = doSomething(thing); @@ -72,4 +72,8 @@ private static String doSomething(String query) { m.appendTail(sb); return sb.toString(); } + + private static String removeSpecificParameters(String query) { + return query.replaceAll("\\{(.*?)\\}", ""); + } } diff --git a/src/test/java/ee/tkasekamp/ltlminer/RuleTemplateCreatorTest.java b/src/test/java/ee/tkasekamp/ltlminer/RuleTemplateCreatorTest.java index db41f6c..a800ded 100644 --- a/src/test/java/ee/tkasekamp/ltlminer/RuleTemplateCreatorTest.java +++ b/src/test/java/ee/tkasekamp/ltlminer/RuleTemplateCreatorTest.java @@ -4,7 +4,6 @@ import java.util.ArrayList; -import org.junit.Before; import org.junit.Test; public class RuleTemplateCreatorTest { @@ -12,14 +11,23 @@ public class RuleTemplateCreatorTest { @Test public void test() { - String queries = "\"[]( (?x) -> <>(?y))\", \"<>(?x)\", \"[]( (?x) -> <>(?y)\" , \"[]( (?x) -> <>(?y)\""; + String queries = "\"[]( (?x) -> <>(?y))\"; \"<>(?x)\"; \"[]( (?x) -> <>(?y)\" ; \"[]( (?x) -> <>(?y)\""; - ArrayList templates = RuleTemplateCreator - .createTemplates(queries); + ArrayList templates = RuleTemplateCreator.createTemplates(queries); // for (String string : templates) { // System.out.println(string); // } assertEquals(4, templates.size()); } + @Test + public void testWithReplacements() { + + String queries = "\"[]( (?x{A,B}) -> <>(?y))\"; \"<>(?x{C})\"; \"[]( (?x) -> <>(?y{sdasda})\" ; \"[]( (?x) -> <>(?y)\""; + + ArrayList templates = RuleTemplateCreator.createTemplates(queries); + + assertEquals(4, templates.size()); + } + } diff --git a/src/test/java/ee/tkasekamp/ltlminer/StarterTest.java b/src/test/java/ee/tkasekamp/ltlminer/StarterTest.java index 91dab54..04c4f10 100644 --- a/src/test/java/ee/tkasekamp/ltlminer/StarterTest.java +++ b/src/test/java/ee/tkasekamp/ltlminer/StarterTest.java @@ -25,13 +25,25 @@ public void test2() throws Exception { assertTrue(new File("rules.txt").exists()); } + @Test + public void test3() throws Exception { + Properties props = getProps(); + String queries = "\"[](( (?x{A,B}) -> <>(?y{E,A})))\"; \"<>(?x{C,sad})\""; + props.setProperty("queries", queries); + props.setProperty("considerEventTypes", "false"); + props.setProperty("minSupport", "0.0"); + LTLMinerStarter starter = new LTLMinerStarter(props); + starter.mine(); + + } + private Properties getProps() { Properties props = new Properties(); props.setProperty("logPath", "src/test/resources/exercise1.xes"); props.setProperty("considerEventTypes", "true"); props.setProperty("minSupport", "0.5"); props.setProperty("outputFormat", "console"); - String queries = "\"[](( (?x) -> <>(?y)))\", \"<>(?x)\""; + String queries = "\"[](( (?x) -> <>(?y)))\"; \"<>(?x)\""; props.setProperty("queries", queries); return props;