Author: mic...@jb... Date: 2006-01-24 06:09:13 -0500 (Tue, 24 Jan 2006) New Revision: 2188 Modified: trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/Chunk.java trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/NLExpressionCompiler.java trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/NLMappingItem.java trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/TemplateContext.java trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/TemplateFactory.java trunk/labs/jbossrules/drools-natural-dsl/src/test/java/org/drools/natural/NaturalLanguageCompilerTest.java trunk/labs/jbossrules/drools-natural-dsl/src/test/java/org/drools/natural/template/NLExpressionCompilerTest.java trunk/labs/jbossrules/drools-natural-dsl/src/test/java/org/drools/natural/template/TemplateFactoryTest.java Log: small improvements in efficiency Modified: trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/Chunk.java =================================================================== --- trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/Chunk.java 2006-01-24 09:01:07 UTC (rev 2187) +++ trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/Chunk.java 2006-01-24 11:09:13 UTC (rev 2188) @@ -13,7 +13,7 @@ * * Chunks also know how to parse themselves to work out the value. * - * This is used by TemplatePopulateContext. + * This is used by TemplateContext. * This class is very recursive, to be prepated to be confused. * * @author <a href="mailto:mic...@gm..."> Michael Neale</a> @@ -21,7 +21,8 @@ class Chunk { //the chunk of text from the dicitonary - String text; + final String text; + final boolean isHole; Chunk next; @@ -35,6 +36,11 @@ Chunk(String text) { this.text = text; + if (text.startsWith("{")) { + isHole = true; + } else { + isHole = false; + } } /** @@ -42,7 +48,7 @@ * Can then swap it with the target text. */ void buildSubtitutionKey(StringBuffer buffer) { - if (isHole()) { + if (isHole) { buffer.append(padL + value + padR); } else { buffer.append(text); @@ -52,12 +58,8 @@ } } - boolean isHole() { - return text.startsWith("{"); - } - void process(String expression) { - if (isHole()) { + if (isHole) { //value = text until next next.text is found if (next == null || next.text == null) { storeSpacePadding( expression ); @@ -82,7 +84,7 @@ } void buildValueMap(Map map) { - if (this.isHole()) { + if (isHole) { map.put(text, value); } if (next != null) { Modified: trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/NLExpressionCompiler.java =================================================================== --- trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/NLExpressionCompiler.java 2006-01-24 09:01:07 UTC (rev 2187) +++ trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/NLExpressionCompiler.java 2006-01-24 11:09:13 UTC (rev 2188) @@ -1,7 +1,9 @@ package org.drools.natural.template; import java.util.Collection; +import java.util.HashMap; import java.util.Iterator; +import java.util.Map; /** * This is the utility class for compiling pseudo natural/DSL expression into the target @@ -23,19 +25,33 @@ */ public class NLExpressionCompiler { - private TemplateFactory factory; - private Collection grammar; + //a map of templates to the template contexts (template contexts are used to populate populate + //the target mappings with data from a real expression. + private Map templateCache; + public NLExpressionCompiler(NLGrammar grammar) { - this.grammar = grammar.getMappings(); - this.factory = new TemplateFactory(); + Collection grammarItems = grammar.getMappings(); + this.templateCache = new HashMap(); + + //build up a map of templates + TemplateFactory factory = new TemplateFactory(); + for ( Iterator iter = grammarItems.iterator(); iter.hasNext(); ) { + NLMappingItem mapping = (NLMappingItem) iter.next(); + TemplateContext ctx = factory.getContext(mapping.getNaturalTemplate()); + templateCache.put(mapping, ctx); + } } + /** + * + */ public String compile(String expression) { String nl = expression; - for ( Iterator iter = grammar.iterator(); iter.hasNext(); ) { - NLMappingItem mapping = (NLMappingItem) iter.next(); - TemplateContext ctx = factory.buildContext(mapping.getNaturalTemplate()); + for ( Iterator iter = templateCache.entrySet().iterator(); iter.hasNext(); ) { + Map.Entry entry = (Map.Entry) iter.next(); + NLMappingItem mapping = (NLMappingItem) entry.getKey(); + TemplateContext ctx = (TemplateContext) entry.getValue(); nl = ctx.processAllInstances(nl, mapping.getGrammarTemplate()); } return nl; Modified: trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/NLMappingItem.java =================================================================== --- trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/NLMappingItem.java 2006-01-24 09:01:07 UTC (rev 2187) +++ trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/NLMappingItem.java 2006-01-24 11:09:13 UTC (rev 2188) @@ -52,5 +52,7 @@ int getPriority() { return this.priority; } + + } Modified: trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/TemplateContext.java =================================================================== --- trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/TemplateContext.java 2006-01-24 09:01:07 UTC (rev 2187) +++ trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/TemplateContext.java 2006-01-24 11:09:13 UTC (rev 2188) @@ -23,7 +23,7 @@ /** * Ad a chunk from the dictionary expression. * A chunk is a piece of nl, or a hole. - * nl & holes should not be mixed. + * nl & holes must not be mixed. */ TemplateContext addChunk(String chunkText) { Chunk chunk = new Chunk(chunkText); Modified: trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/TemplateFactory.java =================================================================== --- trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/TemplateFactory.java 2006-01-24 09:01:07 UTC (rev 2187) +++ trunk/labs/jbossrules/drools-natural-dsl/src/main/java/org/drools/natural/template/TemplateFactory.java 2006-01-24 11:09:13 UTC (rev 2188) @@ -19,7 +19,7 @@ * @param template From the grammar. eg "{0} likes cheese" is a template. * @return A template context ready to apply to a nl expression. */ - public TemplateContext buildContext(String template) { + public TemplateContext getContext(String template) { TemplateContext ctx = new TemplateContext(); Modified: trunk/labs/jbossrules/drools-natural-dsl/src/test/java/org/drools/natural/NaturalLanguageCompilerTest.java =================================================================== --- trunk/labs/jbossrules/drools-natural-dsl/src/test/java/org/drools/natural/NaturalLanguageCompilerTest.java 2006-01-24 09:01:07 UTC (rev 2187) +++ trunk/labs/jbossrules/drools-natural-dsl/src/test/java/org/drools/natural/NaturalLanguageCompilerTest.java 2006-01-24 11:09:13 UTC (rev 2188) @@ -83,7 +83,6 @@ String snippet = "that bob likes cheese"; assertEquals("bob.likesCheese()", parser.compileNaturalExpression(snippet)); } - } Modified: trunk/labs/jbossrules/drools-natural-dsl/src/test/java/org/drools/natural/template/NLExpressionCompilerTest.java =================================================================== --- trunk/labs/jbossrules/drools-natural-dsl/src/test/java/org/drools/natural/template/NLExpressionCompilerTest.java 2006-01-24 09:01:07 UTC (rev 2187) +++ trunk/labs/jbossrules/drools-natural-dsl/src/test/java/org/drools/natural/template/NLExpressionCompilerTest.java 2006-01-24 11:09:13 UTC (rev 2188) @@ -36,7 +36,6 @@ } - /** This is surprisingly fast. I didn't build it for speed. */ public void testLargeGrammar() { Properties props = new Properties(); Modified: trunk/labs/jbossrules/drools-natural-dsl/src/test/java/org/drools/natural/template/TemplateFactoryTest.java =================================================================== --- trunk/labs/jbossrules/drools-natural-dsl/src/test/java/org/drools/natural/template/TemplateFactoryTest.java 2006-01-24 09:01:07 UTC (rev 2187) +++ trunk/labs/jbossrules/drools-natural-dsl/src/test/java/org/drools/natural/template/TemplateFactoryTest.java 2006-01-24 11:09:13 UTC (rev 2188) @@ -8,7 +8,7 @@ public void testMake() { TemplateFactory factory = new TemplateFactory(); - TemplateContext ctx = factory.buildContext("something {0} going {1} on."); + TemplateContext ctx = factory.getContext("something {0} going {1} on."); assertNotNull(ctx); } |