You can subscribe to this list here.
2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(120) |
Sep
(36) |
Oct
(116) |
Nov
(17) |
Dec
(44) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2008 |
Jan
(143) |
Feb
(192) |
Mar
(74) |
Apr
(84) |
May
(105) |
Jun
(64) |
Jul
(49) |
Aug
(120) |
Sep
(159) |
Oct
(156) |
Nov
(51) |
Dec
(28) |
2009 |
Jan
(17) |
Feb
(55) |
Mar
(33) |
Apr
(57) |
May
(54) |
Jun
(28) |
Jul
(6) |
Aug
(16) |
Sep
(38) |
Oct
(30) |
Nov
(26) |
Dec
(52) |
2010 |
Jan
(7) |
Feb
(91) |
Mar
(65) |
Apr
(2) |
May
(14) |
Jun
(25) |
Jul
(38) |
Aug
(48) |
Sep
(80) |
Oct
(70) |
Nov
(75) |
Dec
(77) |
2011 |
Jan
(68) |
Feb
(53) |
Mar
(51) |
Apr
(35) |
May
(65) |
Jun
(101) |
Jul
(29) |
Aug
(230) |
Sep
(95) |
Oct
(49) |
Nov
(110) |
Dec
(63) |
2012 |
Jan
(41) |
Feb
(42) |
Mar
(25) |
Apr
(46) |
May
(51) |
Jun
(44) |
Jul
(45) |
Aug
(29) |
Sep
(12) |
Oct
(9) |
Nov
(17) |
Dec
(2) |
2013 |
Jan
(12) |
Feb
(14) |
Mar
(7) |
Apr
(16) |
May
(54) |
Jun
(27) |
Jul
(11) |
Aug
(5) |
Sep
(85) |
Oct
(27) |
Nov
(37) |
Dec
(32) |
2014 |
Jan
(8) |
Feb
(29) |
Mar
(5) |
Apr
(3) |
May
(22) |
Jun
(3) |
Jul
(4) |
Aug
(3) |
Sep
|
Oct
|
Nov
|
Dec
|
From: <jen...@us...> - 2012-07-12 11:34:19
|
Revision: 3783 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3783&view=rev Author: jenslehmann Date: 2012-07-12 11:34:09 +0000 (Thu, 12 Jul 2012) Log Message: ----------- minor changes Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/core/AnnComponentManager.java trunk/components-core/src/main/java/org/dllearner/refinementoperators/ExampleOperator.java Modified: trunk/components-core/src/main/java/org/dllearner/core/AnnComponentManager.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/core/AnnComponentManager.java 2012-07-12 11:14:47 UTC (rev 3782) +++ trunk/components-core/src/main/java/org/dllearner/core/AnnComponentManager.java 2012-07-12 11:34:09 UTC (rev 3783) @@ -93,7 +93,7 @@ "org.dllearner.refinementoperators.RhoDRDown", "org.dllearner.refinementoperators.SynchronizedRhoDRDown", // just for testing - "org.dllearner.refinementoperators.ExampleOperator", + // "org.dllearner.refinementoperators.ExampleOperator", } )); private static Collection<Class<? extends Component>> components; private static BidiMap<Class<? extends Component>, String> componentNames; Modified: trunk/components-core/src/main/java/org/dllearner/refinementoperators/ExampleOperator.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/refinementoperators/ExampleOperator.java 2012-07-12 11:14:47 UTC (rev 3782) +++ trunk/components-core/src/main/java/org/dllearner/refinementoperators/ExampleOperator.java 2012-07-12 11:34:09 UTC (rev 3783) @@ -14,7 +14,7 @@ * @author Jens Lehmann * */ -@ComponentAnn(name = "example refinement operator", shortName = "exop", version = 0.8) +@ComponentAnn(name = "example refinement operator", shortName = "exop", version = 0.1) public class ExampleOperator implements LengthLimitedRefinementOperator { @Override This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jen...@us...> - 2012-07-12 11:14:59
|
Revision: 3782 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3782&view=rev Author: jenslehmann Date: 2012-07-12 11:14:47 +0000 (Thu, 12 Jul 2012) Log Message: ----------- - abstracted hard dependency of CELOE on rho refinement operator - split up refinement operators into multiple interfaces describing their capabilities Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/ParCEL/ParCELRefinementOperatorFactory.java trunk/components-core/src/main/java/org/dllearner/algorithms/ParCEL/ParCELRefinementOperatorPool.java trunk/components-core/src/main/java/org/dllearner/algorithms/ParCEL/ParCELWorker.java trunk/components-core/src/main/java/org/dllearner/algorithms/ParCEL/ParCELWorkerMat.java trunk/components-core/src/main/java/org/dllearner/algorithms/celoe/CELOE.java trunk/components-core/src/main/java/org/dllearner/algorithms/celoe/PCELOE.java trunk/components-core/src/main/java/org/dllearner/algorithms/fuzzydll/FuzzyCELOE.java trunk/components-core/src/main/java/org/dllearner/algorithms/isle/ISLE.java trunk/components-core/src/main/java/org/dllearner/core/AnnComponentManager.java trunk/components-core/src/main/java/org/dllearner/refinementoperators/OperatorInverter.java trunk/components-core/src/main/java/org/dllearner/refinementoperators/RefinementOperator.java trunk/components-core/src/main/java/org/dllearner/refinementoperators/RefinementOperatorAdapter.java trunk/components-core/src/main/java/org/dllearner/refinementoperators/RhoDRDown.java trunk/components-core/src/main/java/org/dllearner/refinementoperators/SynchronizedRhoDRDown.java trunk/components-core/src/test/java/org/dllearner/test/junit/RefinementOperatorTests.java trunk/interfaces/src/main/java/org/dllearner/cli/CLI.java Added Paths: ----------- trunk/components-core/src/main/java/org/dllearner/refinementoperators/CustomHierarchyRefinementOperator.java trunk/components-core/src/main/java/org/dllearner/refinementoperators/CustomStartRefinementOperator.java trunk/components-core/src/main/java/org/dllearner/refinementoperators/ExampleOperator.java trunk/components-core/src/main/java/org/dllearner/refinementoperators/LengthLimitedRefinementOperator.java trunk/components-core/src/main/java/org/dllearner/refinementoperators/ReasoningBasedRefinementOperator.java Removed Paths: ------------- trunk/components-core/src/main/java/nz/ac/ Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/ParCEL/ParCELRefinementOperatorFactory.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/ParCEL/ParCELRefinementOperatorFactory.java 2012-07-12 10:19:48 UTC (rev 3781) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/ParCEL/ParCELRefinementOperatorFactory.java 2012-07-12 11:14:47 UTC (rev 3782) @@ -15,10 +15,11 @@ import org.dllearner.core.owl.ClassHierarchy; import org.dllearner.core.owl.DatatypeProperty; import org.dllearner.core.owl.Description; +import org.dllearner.refinementoperators.LengthLimitedRefinementOperator; import org.dllearner.refinementoperators.RefinementOperator; import org.dllearner.refinementoperators.RhoDRDown2008; -public class ParCELRefinementOperatorFactory extends BasePoolableObjectFactory<RefinementOperator> { +public class ParCELRefinementOperatorFactory extends BasePoolableObjectFactory<LengthLimitedRefinementOperator> { private AbstractReasonerComponent reasoner; private ClassHierarchy classHierarchy; @@ -63,7 +64,7 @@ } @Override - public RefinementOperator makeObject() throws Exception { + public LengthLimitedRefinementOperator makeObject() throws Exception { //clone a new class heirarchy to avoid the competition between refinement operators ClassHierarchy clonedClassHierarchy = this.classHierarchy.clone(); Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/ParCEL/ParCELRefinementOperatorPool.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/ParCEL/ParCELRefinementOperatorPool.java 2012-07-12 10:19:48 UTC (rev 3781) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/ParCEL/ParCELRefinementOperatorPool.java 2012-07-12 11:14:47 UTC (rev 3782) @@ -9,6 +9,7 @@ import org.dllearner.core.owl.ClassHierarchy; import org.dllearner.core.owl.DatatypeProperty; import org.dllearner.core.owl.Description; +import org.dllearner.refinementoperators.LengthLimitedRefinementOperator; import org.dllearner.refinementoperators.RefinementOperator; /** @@ -17,7 +18,7 @@ * @author An C. Tran * */ -public class ParCELRefinementOperatorPool extends StackObjectPool<RefinementOperator> { +public class ParCELRefinementOperatorPool extends StackObjectPool<LengthLimitedRefinementOperator> { /** * Create refinement operator pool given max number of idle object without splitter Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/ParCEL/ParCELWorker.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/ParCEL/ParCELWorker.java 2012-07-12 10:19:48 UTC (rev 3781) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/ParCEL/ParCELWorker.java 2012-07-12 11:14:47 UTC (rev 3782) @@ -7,6 +7,7 @@ import org.apache.log4j.Logger; import org.dllearner.core.owl.Description; +import org.dllearner.refinementoperators.LengthLimitedRefinementOperator; import org.dllearner.refinementoperators.RefinementOperator; /** @@ -23,7 +24,7 @@ // refinement operator used in refinement private ParCELRefinementOperatorPool refinementOperatorPool; - private RefinementOperator refinementOperator; + private LengthLimitedRefinementOperator refinementOperator; // reducer, used to make the callback to pass the result and get the next description for // processing @@ -93,7 +94,7 @@ * @param name * Name of the worker, assigned by reduce (for tracing purpose only) */ - public ParCELWorker(ParCELearner learner, RefinementOperator refinementOperator, + public ParCELWorker(ParCELearner learner, LengthLimitedRefinementOperator refinementOperator, ParCELPosNegLP learningProblem, ParCELNode nodeToProcess, String name) { super(); Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/ParCEL/ParCELWorkerMat.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/ParCEL/ParCELWorkerMat.java 2012-07-12 10:19:48 UTC (rev 3781) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/ParCEL/ParCELWorkerMat.java 2012-07-12 11:14:47 UTC (rev 3782) @@ -8,6 +8,7 @@ import org.apache.log4j.Logger; import org.dllearner.core.owl.Description; +import org.dllearner.refinementoperators.LengthLimitedRefinementOperator; import org.dllearner.refinementoperators.RefinementOperator; /** @@ -24,7 +25,7 @@ // refinement operator used in refinement private ParCELRefinementOperatorPool refinementOperatorPool; - private RefinementOperator refinementOperator; + private LengthLimitedRefinementOperator refinementOperator; // reducer, used to make the callback to pass the result and get the next description for // processing @@ -96,7 +97,7 @@ * @param name * Name of the worker, assigned by reduce (for tracing purpose only) */ - public ParCELWorkerMat(ParCELearnerMat learner, RefinementOperator refinementOperator, + public ParCELWorkerMat(ParCELearnerMat learner, LengthLimitedRefinementOperator refinementOperator, ParCELPosNegLP learningProblem, ParCELNode nodeToProcess, String name) { super(); Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/celoe/CELOE.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/celoe/CELOE.java 2012-07-12 10:19:48 UTC (rev 3781) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/celoe/CELOE.java 2012-07-12 11:14:47 UTC (rev 3782) @@ -51,7 +51,11 @@ import org.dllearner.learningproblems.PosNegLPStandard; import org.dllearner.learningproblems.PosOnlyLP; import org.dllearner.reasoning.FastInstanceChecker; +import org.dllearner.refinementoperators.CustomHierarchyRefinementOperator; +import org.dllearner.refinementoperators.CustomStartRefinementOperator; +import org.dllearner.refinementoperators.LengthLimitedRefinementOperator; import org.dllearner.refinementoperators.OperatorInverter; +import org.dllearner.refinementoperators.ReasoningBasedRefinementOperator; import org.dllearner.refinementoperators.RefinementOperator; import org.dllearner.refinementoperators.RhoDRDown; import org.dllearner.utilities.Files; @@ -86,7 +90,7 @@ // private OEHeuristicStable heuristicStable = new OEHeuristicStable(); // private OEHeuristicRuntime heuristicRuntime = new OEHeuristicRuntime(); - private RefinementOperator operator; + private LengthLimitedRefinementOperator operator; private DescriptionMinimizer minimizer; @ConfigOption(name="useMinimizer", defaultValue="true", description="Specifies whether returned expressions should be minimised by removing those parts, which are not needed. (Basically the minimiser tries to find the shortest expression which is equivalent to the learned expression). Turning this feature off may improve performance.") private boolean useMinimizer = true; @@ -282,16 +286,20 @@ if(operator == null) { // we use a default operator and inject the class hierarchy for now operator = new RhoDRDown(); - ((RhoDRDown)operator).setStartClass(startClass); - ((RhoDRDown)operator).setReasoner(reasoner); - ((RhoDRDown)operator).init(); + if(operator instanceof CustomStartRefinementOperator) { + ((CustomStartRefinementOperator)operator).setStartClass(startClass); + } + if(operator instanceof ReasoningBasedRefinementOperator) { + ((ReasoningBasedRefinementOperator)operator).setReasoner(reasoner); + } + operator.init(); } - // TODO: find a better solution as this is quite difficult to debug - ((RhoDRDown)operator).setSubHierarchy(classHierarchy); - ((RhoDRDown)operator).setObjectPropertyHierarchy(reasoner.getObjectPropertyHierarchy()); - ((RhoDRDown)operator).setDataPropertyHierarchy(reasoner.getDatatypePropertyHierarchy()); + if(operator instanceof CustomHierarchyRefinementOperator) { + ((CustomHierarchyRefinementOperator)operator).setClassHierarchy(classHierarchy); + ((CustomHierarchyRefinementOperator)operator).setObjectPropertyHierarchy(reasoner.getObjectPropertyHierarchy()); + ((CustomHierarchyRefinementOperator)operator).setDataPropertyHierarchy(reasoner.getDatatypePropertyHierarchy()); + } - // operator = new RhoDRDown(reasoner, classHierarchy, startClass, configurator); baseURI = reasoner.getBaseURI(); prefixes = reasoner.getPrefixes(); @@ -347,8 +355,11 @@ LinkedList<Description> startClassCandidates = new LinkedList<Description>(); startClassCandidates.add(existingDefinition); - ((RhoDRDown)operator).setDropDisjuncts(true); - RefinementOperator upwardOperator = new OperatorInverter(operator); + // hack for RhoDRDown + if(operator instanceof RhoDRDown) { + ((RhoDRDown)operator).setDropDisjuncts(true); + } + LengthLimitedRefinementOperator upwardOperator = (LengthLimitedRefinementOperator) new OperatorInverter(operator); // use upward refinement until we find an appropriate start class boolean startClassFound = false; @@ -380,7 +391,9 @@ // System.out.println("existing def: " + existingDefinition); // System.out.println(reasoner.getIndividuals(existingDefinition)); - ((RhoDRDown)operator).setDropDisjuncts(false); + if(operator instanceof RhoDRDown) { + ((RhoDRDown)operator).setDropDisjuncts(false); + } } else { Set<Description> superClasses = reasoner.getClassHierarchy().getSuperClasses(classToDescribe); @@ -898,12 +911,12 @@ return expressionTests; } - public RefinementOperator getOperator() { + public LengthLimitedRefinementOperator getOperator() { return operator; } @Autowired(required=false) - public void setOperator(RefinementOperator operator) { + public void setOperator(LengthLimitedRefinementOperator operator) { this.operator = operator; } Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/celoe/PCELOE.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/celoe/PCELOE.java 2012-07-12 10:19:48 UTC (rev 3781) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/celoe/PCELOE.java 2012-07-12 11:14:47 UTC (rev 3782) @@ -63,7 +63,11 @@ import org.dllearner.learningproblems.PosNegLPStandard; import org.dllearner.learningproblems.PosOnlyLP; import org.dllearner.reasoning.FastInstanceChecker; +import org.dllearner.refinementoperators.CustomHierarchyRefinementOperator; +import org.dllearner.refinementoperators.CustomStartRefinementOperator; +import org.dllearner.refinementoperators.LengthLimitedRefinementOperator; import org.dllearner.refinementoperators.OperatorInverter; +import org.dllearner.refinementoperators.ReasoningBasedRefinementOperator; import org.dllearner.refinementoperators.RefinementOperator; import org.dllearner.refinementoperators.RhoDRDown; import org.dllearner.refinementoperators.SynchronizedRhoDRDown; @@ -99,7 +103,7 @@ // private OEHeuristicStable heuristicStable = new OEHeuristicStable(); // private OEHeuristicRuntime heuristicRuntime = new OEHeuristicRuntime(); - private RefinementOperator operator; + private LengthLimitedRefinementOperator operator; private DescriptionMinimizer minimizer; @ConfigOption(name="useMinimizer", defaultValue="true", description="Specifies whether returned expressions should be minimised by removing those parts, which are not needed. (Basically the minimiser tries to find the shortest expression which is equivalent to the learned expression). Turning this feature off may improve performance.") private boolean useMinimizer = true; @@ -297,16 +301,20 @@ if(operator == null) { // we use a default operator and inject the class hierarchy for now operator = new SynchronizedRhoDRDown(); - ((SynchronizedRhoDRDown)operator).setStartClass(startClass); - ((SynchronizedRhoDRDown)operator).setReasoner(reasoner); - ((SynchronizedRhoDRDown)operator).init(); + if(operator instanceof CustomStartRefinementOperator) { + ((CustomStartRefinementOperator)operator).setStartClass(startClass); + } + if(operator instanceof ReasoningBasedRefinementOperator) { + ((ReasoningBasedRefinementOperator)operator).setReasoner(reasoner); + } + operator.init(); } - // TODO: find a better solution as this is quite difficult to debug - ((SynchronizedRhoDRDown)operator).setSubHierarchy(classHierarchy); - ((SynchronizedRhoDRDown)operator).setObjectPropertyHierarchy(reasoner.getObjectPropertyHierarchy()); - ((SynchronizedRhoDRDown)operator).setDataPropertyHierarchy(reasoner.getDatatypePropertyHierarchy()); + if(operator instanceof CustomHierarchyRefinementOperator) { + ((CustomHierarchyRefinementOperator)operator).setClassHierarchy(classHierarchy); + ((CustomHierarchyRefinementOperator)operator).setObjectPropertyHierarchy(reasoner.getObjectPropertyHierarchy()); + ((CustomHierarchyRefinementOperator)operator).setDataPropertyHierarchy(reasoner.getDatatypePropertyHierarchy()); + } - // operator = new RhoDRDown(reasoner, classHierarchy, startClass, configurator); baseURI = reasoner.getBaseURI(); prefixes = reasoner.getPrefixes(); @@ -362,8 +370,10 @@ LinkedList<Description> startClassCandidates = new LinkedList<Description>(); startClassCandidates.add(existingDefinition); - ((RhoDRDown)operator).setDropDisjuncts(true); - RefinementOperator upwardOperator = new OperatorInverter(operator); + if(operator instanceof RhoDRDown) { + ((RhoDRDown)operator).setDropDisjuncts(true); + } + LengthLimitedRefinementOperator upwardOperator = (LengthLimitedRefinementOperator) new OperatorInverter(operator); // use upward refinement until we find an appropriate start class boolean startClassFound = false; @@ -395,7 +405,9 @@ // System.out.println("existing def: " + existingDefinition); // System.out.println(reasoner.getIndividuals(existingDefinition)); - ((RhoDRDown)operator).setDropDisjuncts(false); + if(operator instanceof RhoDRDown) { + ((RhoDRDown)operator).setDropDisjuncts(false); + } } else { Set<Description> superClasses = reasoner.getClassHierarchy().getSuperClasses(classToDescribe); @@ -877,7 +889,7 @@ } @Autowired(required=false) - public void setOperator(RefinementOperator operator) { + public void setOperator(LengthLimitedRefinementOperator operator) { this.operator = operator; } Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/fuzzydll/FuzzyCELOE.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/fuzzydll/FuzzyCELOE.java 2012-07-12 10:19:48 UTC (rev 3781) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/fuzzydll/FuzzyCELOE.java 2012-07-12 11:14:47 UTC (rev 3782) @@ -56,6 +56,7 @@ import org.dllearner.learningproblems.PosNegLP; import org.dllearner.learningproblems.PosNegLPStandard; import org.dllearner.learningproblems.PosOnlyLP; +import org.dllearner.refinementoperators.LengthLimitedRefinementOperator; import org.dllearner.refinementoperators.OperatorInverter; import org.dllearner.refinementoperators.RefinementOperator; import org.dllearner.refinementoperators.RhoDRDown; @@ -91,7 +92,7 @@ // private OEHeuristicStable heuristicStable = new OEHeuristicStable(); // private OEHeuristicRuntime heuristicRuntime = new OEHeuristicRuntime(); - private RefinementOperator operator; + private LengthLimitedRefinementOperator operator; private DescriptionMinimizer minimizer; // all nodes in the search tree (used for selecting most promising node) @@ -332,7 +333,7 @@ LinkedList<Description> startClassCandidates = new LinkedList<Description>(); startClassCandidates.add(existingDefinition); ((RhoDRDown)operator).setDropDisjuncts(true); - RefinementOperator upwardOperator = new OperatorInverter(operator); + LengthLimitedRefinementOperator upwardOperator = (LengthLimitedRefinementOperator) new OperatorInverter(operator); // use upward refinement until we find an appropriate start class boolean startClassFound = false; @@ -926,7 +927,7 @@ } @Autowired(required=false) - public void setOperator(RefinementOperator operator) { + public void setOperator(LengthLimitedRefinementOperator operator) { this.operator = operator; } Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/ISLE.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/ISLE.java 2012-07-12 10:19:48 UTC (rev 3781) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/ISLE.java 2012-07-12 11:14:47 UTC (rev 3782) @@ -51,6 +51,7 @@ import org.dllearner.learningproblems.PosNegLP; import org.dllearner.learningproblems.PosNegLPStandard; import org.dllearner.learningproblems.PosOnlyLP; +import org.dllearner.refinementoperators.LengthLimitedRefinementOperator; import org.dllearner.refinementoperators.OperatorInverter; import org.dllearner.refinementoperators.RefinementOperator; import org.dllearner.refinementoperators.RhoDRDown; @@ -80,7 +81,7 @@ // private OEHeuristicStable heuristicStable = new OEHeuristicStable(); // private OEHeuristicRuntime heuristicRuntime = new OEHeuristicRuntime(); - private RefinementOperator operator; + private LengthLimitedRefinementOperator operator; private DescriptionMinimizer minimizer; // all nodes in the search tree (used for selecting most promising node) @@ -246,7 +247,7 @@ LinkedList<Description> startClassCandidates = new LinkedList<Description>(); startClassCandidates.add(existingDefinition); ((RhoDRDown)operator).setDropDisjuncts(true); - RefinementOperator upwardOperator = new OperatorInverter(operator); + LengthLimitedRefinementOperator upwardOperator = (LengthLimitedRefinementOperator) new OperatorInverter(operator); // use upward refinement until we find an appropriate start class boolean startClassFound = false; Modified: trunk/components-core/src/main/java/org/dllearner/core/AnnComponentManager.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/core/AnnComponentManager.java 2012-07-12 10:19:48 UTC (rev 3781) +++ trunk/components-core/src/main/java/org/dllearner/core/AnnComponentManager.java 2012-07-12 11:14:47 UTC (rev 3782) @@ -92,6 +92,8 @@ "org.dllearner.algorithms.celoe.OEHeuristicRuntime", "org.dllearner.refinementoperators.RhoDRDown", "org.dllearner.refinementoperators.SynchronizedRhoDRDown", + // just for testing + "org.dllearner.refinementoperators.ExampleOperator", } )); private static Collection<Class<? extends Component>> components; private static BidiMap<Class<? extends Component>, String> componentNames; Added: trunk/components-core/src/main/java/org/dllearner/refinementoperators/CustomHierarchyRefinementOperator.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/refinementoperators/CustomHierarchyRefinementOperator.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/refinementoperators/CustomHierarchyRefinementOperator.java 2012-07-12 11:14:47 UTC (rev 3782) @@ -0,0 +1,43 @@ +/** + * Copyright (C) 2007-2012, Jens Lehmann + * + * This file is part of DL-Learner. + * + * DL-Learner is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * DL-Learner is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package org.dllearner.refinementoperators; + +import org.dllearner.core.owl.ClassHierarchy; +import org.dllearner.core.owl.DatatypePropertyHierarchy; +import org.dllearner.core.owl.ObjectPropertyHierarchy; + + +/** + * + * A refinement operator for which hierarchies other those of the + * reasoner can be injected. Using those hierarchies means that only classes + * from the hierarchies should occur in refinements. + * + * @author Jens Lehmann + * + */ +public interface CustomHierarchyRefinementOperator extends RefinementOperator { + + public void setClassHierarchy(ClassHierarchy classHierarchy); + + public void setObjectPropertyHierarchy(ObjectPropertyHierarchy objectPropertyHierarchy); + + public void setDataPropertyHierarchy(DatatypePropertyHierarchy dataPropertyHierarchy); + +} Added: trunk/components-core/src/main/java/org/dllearner/refinementoperators/CustomStartRefinementOperator.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/refinementoperators/CustomStartRefinementOperator.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/refinementoperators/CustomStartRefinementOperator.java 2012-07-12 11:14:47 UTC (rev 3782) @@ -0,0 +1,33 @@ +/** + * Copyright (C) 2007-2012, Jens Lehmann + * + * This file is part of DL-Learner. + * + * DL-Learner is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * DL-Learner is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package org.dllearner.refinementoperators; + +import org.dllearner.core.owl.Description; + +/** + * A refinement operator, which allows to set a start class. + * + * @author Jens Lehmann + * + */ +public interface CustomStartRefinementOperator extends RefinementOperator { + + public void setStartClass(Description description); + +} Added: trunk/components-core/src/main/java/org/dllearner/refinementoperators/ExampleOperator.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/refinementoperators/ExampleOperator.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/refinementoperators/ExampleOperator.java 2012-07-12 11:14:47 UTC (rev 3782) @@ -0,0 +1,40 @@ +package org.dllearner.refinementoperators; + +import java.util.List; +import java.util.Set; +import java.util.TreeSet; + +import org.dllearner.core.ComponentAnn; +import org.dllearner.core.ComponentInitException; +import org.dllearner.core.owl.Description; + +/** + * Example refinement operator. + * + * @author Jens Lehmann + * + */ +@ComponentAnn(name = "example refinement operator", shortName = "exop", version = 0.8) +public class ExampleOperator implements LengthLimitedRefinementOperator { + + @Override + public void init() throws ComponentInitException { + } + + @Override + public Set<Description> refine(Description description) { + return new TreeSet<Description>(); + } + + @Override + public Set<Description> refine(Description description, int maxLength) { + return refine(description); + } + + @Override + public Set<Description> refine(Description description, int maxLength, + List<Description> knownRefinements) { + return refine(description); + } + +} Added: trunk/components-core/src/main/java/org/dllearner/refinementoperators/LengthLimitedRefinementOperator.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/refinementoperators/LengthLimitedRefinementOperator.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/refinementoperators/LengthLimitedRefinementOperator.java 2012-07-12 11:14:47 UTC (rev 3782) @@ -0,0 +1,57 @@ +/** + * Copyright (C) 2007-2012, Jens Lehmann + * + * This file is part of DL-Learner. + * + * DL-Learner is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * DL-Learner is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package org.dllearner.refinementoperators; + +import java.util.List; +import java.util.Set; + +import org.dllearner.core.owl.Description; + +/** + * A refinement operator for which the syntactic length of the generated + * refinements can be limited. + * + * @author Jens Lehmann + * + */ +public interface LengthLimitedRefinementOperator extends RefinementOperator { + + /** + * Optional refinement operation, where the learning algorithm can + * specify an additional bound on the length of descriptions. + * + * @param description The description, which will be refined. + * @param maxLength The maximum length of returned description, where length is defined by {@link Description#getLength()}. + * @return A set of refinements obeying the above restrictions. + */ + public Set<Description> refine(Description description, int maxLength); + + /** + * Optional refinement operation, where the learning algorithm can + * specify an additional bound on the length of descriptions and + * a list of known refinements, which do not need to be returned. + * + * @param description The description, which will be refined. + * @param maxLength The maximum length of returned description, where length is defined by {@link Description#getLength()}. + * @param knownRefinements A collection of known refinements, which do not need to be returned. + * @return A set of refinements obeying the above restrictions. + */ + public Set<Description> refine(Description description, int maxLength, List<Description> knownRefinements); + +} Modified: trunk/components-core/src/main/java/org/dllearner/refinementoperators/OperatorInverter.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/refinementoperators/OperatorInverter.java 2012-07-12 10:19:48 UTC (rev 3781) +++ trunk/components-core/src/main/java/org/dllearner/refinementoperators/OperatorInverter.java 2012-07-12 11:14:47 UTC (rev 3782) @@ -37,14 +37,14 @@ * @author Jens Lehmann * */ -public class OperatorInverter implements RefinementOperator { +public class OperatorInverter implements LengthLimitedRefinementOperator { - private RefinementOperator operator; + private LengthLimitedRefinementOperator operator; private ConceptComparator cc = new ConceptComparator(); private boolean useNegationNormalForm = true; private boolean guaranteeLength = true; - public OperatorInverter(RefinementOperator operator) { + public OperatorInverter(LengthLimitedRefinementOperator operator) { this.operator = operator; } Added: trunk/components-core/src/main/java/org/dllearner/refinementoperators/ReasoningBasedRefinementOperator.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/refinementoperators/ReasoningBasedRefinementOperator.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/refinementoperators/ReasoningBasedRefinementOperator.java 2012-07-12 11:14:47 UTC (rev 3782) @@ -0,0 +1,34 @@ +/** + * Copyright (C) 2007-2012, Jens Lehmann + * + * This file is part of DL-Learner. + * + * DL-Learner is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * DL-Learner is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package org.dllearner.refinementoperators; + +import org.dllearner.core.Reasoner; + +/** + * A refinement operator, which uses an underlying reasoner, which is a typical + * scenario. + * + * @author Jens Lehmann + * + */ +public interface ReasoningBasedRefinementOperator extends RefinementOperator { + + public void setReasoner(Reasoner reasoner); + +} Modified: trunk/components-core/src/main/java/org/dllearner/refinementoperators/RefinementOperator.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/refinementoperators/RefinementOperator.java 2012-07-12 10:19:48 UTC (rev 3781) +++ trunk/components-core/src/main/java/org/dllearner/refinementoperators/RefinementOperator.java 2012-07-12 11:14:47 UTC (rev 3782) @@ -44,26 +44,4 @@ */ public Set<Description> refine(Description description); - /** - * Optional refinement operation, where the learning algorithm can - * specify an additional bound on the length of descriptions. - * - * @param description The description, which will be refined. - * @param maxLength The maximum length of returned description, where length is defined by {@link Description#getLength()}. - * @return A set of refinements obeying the above restrictions. - */ - public Set<Description> refine(Description description, int maxLength); - - /** - * Optional refinement operation, where the learning algorithm can - * specify an additional bound on the length of descriptions and - * a list of known refinements, which do not need to be returned. - * - * @param description The description, which will be refined. - * @param maxLength The maximum length of returned description, where length is defined by {@link Description#getLength()}. - * @param knownRefinements A collection of known refinements, which do not need to be returned. - * @return A set of refinements obeying the above restrictions. - */ - public Set<Description> refine(Description description, int maxLength, List<Description> knownRefinements); - } Modified: trunk/components-core/src/main/java/org/dllearner/refinementoperators/RefinementOperatorAdapter.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/refinementoperators/RefinementOperatorAdapter.java 2012-07-12 10:19:48 UTC (rev 3781) +++ trunk/components-core/src/main/java/org/dllearner/refinementoperators/RefinementOperatorAdapter.java 2012-07-12 11:14:47 UTC (rev 3782) @@ -30,7 +30,7 @@ * @author Jens Lehmann * */ -public abstract class RefinementOperatorAdapter implements RefinementOperator { +public abstract class RefinementOperatorAdapter implements LengthLimitedRefinementOperator { /* (non-Javadoc) * @see org.dllearner.refinementoperators.RefinementOperator#refine(org.dllearner.core.owl.Description) Modified: trunk/components-core/src/main/java/org/dllearner/refinementoperators/RhoDRDown.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/refinementoperators/RhoDRDown.java 2012-07-12 10:19:48 UTC (rev 3781) +++ trunk/components-core/src/main/java/org/dllearner/refinementoperators/RhoDRDown.java 2012-07-12 11:14:47 UTC (rev 3782) @@ -38,6 +38,7 @@ import org.dllearner.core.Component; import org.dllearner.core.ComponentAnn; import org.dllearner.core.ComponentInitException; +import org.dllearner.core.Reasoner; import org.dllearner.core.config.BooleanEditor; import org.dllearner.core.config.ConfigOption; import org.dllearner.core.options.CommonConfigOptions; @@ -92,7 +93,7 @@ * */ @ComponentAnn(name = "rho refinement operator", shortName = "rho", version = 0.8) -public class RhoDRDown extends RefinementOperatorAdapter implements Component { +public class RhoDRDown extends RefinementOperatorAdapter implements Component, CustomHierarchyRefinementOperator, CustomStartRefinementOperator, ReasoningBasedRefinementOperator { private static Logger logger = Logger .getLogger(RhoDRDown.class); @@ -1710,4 +1711,14 @@ public void setDataPropertyHierarchy(DatatypePropertyHierarchy dataPropertyHierarchy) { this.dataPropertyHierarchy = dataPropertyHierarchy; } + + @Override + public void setReasoner(Reasoner reasoner) { + this.reasoner = (AbstractReasonerComponent) reasoner; + } + + @Override + public void setClassHierarchy(ClassHierarchy classHierarchy) { + subHierarchy = classHierarchy; + } } \ No newline at end of file Modified: trunk/components-core/src/main/java/org/dllearner/refinementoperators/SynchronizedRhoDRDown.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/refinementoperators/SynchronizedRhoDRDown.java 2012-07-12 10:19:48 UTC (rev 3781) +++ trunk/components-core/src/main/java/org/dllearner/refinementoperators/SynchronizedRhoDRDown.java 2012-07-12 11:14:47 UTC (rev 3782) @@ -38,6 +38,7 @@ import org.dllearner.core.Component; import org.dllearner.core.ComponentAnn; import org.dllearner.core.ComponentInitException; +import org.dllearner.core.Reasoner; import org.dllearner.core.config.BooleanEditor; import org.dllearner.core.config.ConfigOption; import org.dllearner.core.options.CommonConfigOptions; @@ -92,7 +93,7 @@ * */ @ComponentAnn(name = "synchronized rho refinement operator", shortName = "syncrho", version = 0.8) -public class SynchronizedRhoDRDown extends RefinementOperatorAdapter implements Component { +public class SynchronizedRhoDRDown extends RefinementOperatorAdapter implements Component, CustomHierarchyRefinementOperator, CustomStartRefinementOperator, ReasoningBasedRefinementOperator { private static Logger logger = Logger .getLogger(SynchronizedRhoDRDown.class); @@ -1710,4 +1711,15 @@ public void setDataPropertyHierarchy(DatatypePropertyHierarchy dataPropertyHierarchy) { this.dataPropertyHierarchy = dataPropertyHierarchy; } + + @Override + public void setReasoner(Reasoner reasoner) { + this.reasoner = (AbstractReasonerComponent) reasoner; + } + + @Override + public void setClassHierarchy(ClassHierarchy classHierarchy) { + subHierarchy = classHierarchy; + } + } \ No newline at end of file Modified: trunk/components-core/src/test/java/org/dllearner/test/junit/RefinementOperatorTests.java =================================================================== --- trunk/components-core/src/test/java/org/dllearner/test/junit/RefinementOperatorTests.java 2012-07-12 10:19:48 UTC (rev 3781) +++ trunk/components-core/src/test/java/org/dllearner/test/junit/RefinementOperatorTests.java 2012-07-12 11:14:47 UTC (rev 3782) @@ -42,6 +42,7 @@ import org.dllearner.parser.KBParser; import org.dllearner.parser.ParseException; import org.dllearner.reasoning.OWLAPIReasoner; +import org.dllearner.refinementoperators.LengthLimitedRefinementOperator; import org.dllearner.refinementoperators.OperatorInverter; import org.dllearner.refinementoperators.RefinementOperator; import org.dllearner.refinementoperators.RhoDRDown; @@ -247,7 +248,7 @@ op.setDropDisjuncts(true); op.init(); - RefinementOperator operator = new OperatorInverter(op); + LengthLimitedRefinementOperator operator = new OperatorInverter(op); Description concept = KBParser.parseConcept("(limo AND EXISTS hasOwner.man)"); Set<Description> refinements = operator.refine(concept, 6); for(Description refinement : refinements) { Modified: trunk/interfaces/src/main/java/org/dllearner/cli/CLI.java =================================================================== --- trunk/interfaces/src/main/java/org/dllearner/cli/CLI.java 2012-07-12 10:19:48 UTC (rev 3781) +++ trunk/interfaces/src/main/java/org/dllearner/cli/CLI.java 2012-07-12 11:14:47 UTC (rev 3782) @@ -198,6 +198,8 @@ } catch (Exception e) { String stacktraceFileName = "log/error.log"; +// e.printStackTrace(); + //Find the primary cause of the exception. Throwable primaryCause = findPrimaryCause(e); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2012-07-12 10:19:54
|
Revision: 3781 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3781&view=rev Author: christinaunger Date: 2012-07-12 10:19:48 +0000 (Thu, 12 Jul 2012) Log Message: ----------- [tbsl] ...and the same for pure numerals Modified Paths: -------------- trunk/components-ext/src/main/resources/tbsl/lexicon/english.lex Modified: trunk/components-ext/src/main/resources/tbsl/lexicon/english.lex =================================================================== --- trunk/components-ext/src/main/resources/tbsl/lexicon/english.lex 2012-07-12 10:14:30 UTC (rev 3780) +++ trunk/components-ext/src/main/resources/tbsl/lexicon/english.lex 2012-07-12 10:19:48 UTC (rev 3781) @@ -169,44 +169,44 @@ // NUMBERS (1-10) // --------------------- - one || (NP NUM:'one' NP*) || <x,l1,<e,t>,[l1:[x|count(x,1)]],[],[],[ SLOT_arg/RESOURCE/x ]> - two || (NP NUM:'two' NP*) || <x,l1,<e,t>,[l1:[x|count(x,2)]],[],[],[ SLOT_arg/RESOURCE/x ]> - three || (NP NUM:'three' NP*) || <x,l1,<e,t>,[l1:[x|count(x,3)]],[],[],[ SLOT_arg/RESOURCE/x ]> - four || (NP NUM:'four' NP*) || <x,l1,<e,t>,[l1:[x|count(x,4)]],[],[],[ SLOT_arg/RESOURCE/x ]> - five || (NP NUM:'five' NP*) || <x,l1,<e,t>,[l1:[x|count(x,5)]],[],[],[ SLOT_arg/RESOURCE/x ]> - six || (NP NUM:'six' NP*) || <x,l1,<e,t>,[l1:[x|count(x,6)]],[],[],[ SLOT_arg/RESOURCE/x ]> - seven || (NP NUM:'seven' NP*) || <x,l1,<e,t>,[l1:[x|count(x,7)]],[],[],[ SLOT_arg/RESOURCE/x ]> - eight || (NP NUM:'eight' NP*) || <x,l1,<e,t>,[l1:[x|count(x,8)]],[],[],[ SLOT_arg/RESOURCE/x ]> - nine || (NP NUM:'nine' NP*) || <x,l1,<e,t>,[l1:[x|count(x,9)]],[],[],[ SLOT_arg/RESOURCE/x ]> - ten || (NP NUM:'ten' NP*) || <x,l1,<e,t>,[l1:[x|count(x,10)]],[],[],[ SLOT_arg/RESOURCE/x ]> - eleven || (NP NUM:'one' NP*) || <x,l1,<e,t>,[l1:[x|count(x,11)]],[],[],[ SLOT_arg/RESOURCE/x ]> - twelve || (NP NUM:'two' NP*) || <x,l1,<e,t>,[l1:[x|count(x,12)]],[],[],[ SLOT_arg/RESOURCE/x ]> - thirteen || (NP NUM:'thirteen' NP*) || <x,l1,<e,t>,[l1:[x|count(x,13)]],[],[],[ SLOT_arg/RESOURCE/x ]> - fourteen || (NP NUM:'fourteen' NP*) || <x,l1,<e,t>,[l1:[x|count(x,14)]],[],[],[ SLOT_arg/RESOURCE/x ]> - fifteen || (NP NUM:'fifteen' NP*) || <x,l1,<e,t>,[l1:[x|count(x,15)]],[],[],[ SLOT_arg/RESOURCE/x ]> - sixteen || (NP NUM:'sixteen' NP*) || <x,l1,<e,t>,[l1:[x|count(x,16)]],[],[],[ SLOT_arg/RESOURCE/x ]> - seventeen || (NP NUM:'seventeen' NP*) || <x,l1,<e,t>,[l1:[x|count(x,17)]],[],[],[ SLOT_arg/RESOURCE/x ]> - eighteen || (NP NUM:'eighteen' NP*) || <x,l1,<e,t>,[l1:[x|count(x,18)]],[],[],[ SLOT_arg/RESOURCE/x ]> - nineteen || (NP NUM:'nineteen' NP*) || <x,l1,<e,t>,[l1:[x|count(x,19)]],[],[],[ SLOT_arg/RESOURCE/x ]> - twenty || (NP NUM:'twenty' NP*) || <x,l1,<e,t>,[l1:[x|count(x,20)]],[],[],[ SLOT_arg/RESOURCE/x ]> + one || (NP NUM:'one' NP*) || <x,l1,<e,t>,[l1:[x|count(x,1)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,1)]],[],[],[ SLOT_arg/LITERAL/x ]> + two || (NP NUM:'two' NP*) || <x,l1,<e,t>,[l1:[x|count(x,2)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,2)]],[],[],[ SLOT_arg/LITERAL/x ]> + three || (NP NUM:'three' NP*) || <x,l1,<e,t>,[l1:[x|count(x,3)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,3)]],[],[],[ SLOT_arg/LITERAL/x ]> + four || (NP NUM:'four' NP*) || <x,l1,<e,t>,[l1:[x|count(x,4)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,4)]],[],[],[ SLOT_arg/LITERAL/x ]> + five || (NP NUM:'five' NP*) || <x,l1,<e,t>,[l1:[x|count(x,5)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,5)]],[],[],[ SLOT_arg/LITERAL/x ]> + six || (NP NUM:'six' NP*) || <x,l1,<e,t>,[l1:[x|count(x,6)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,6)]],[],[],[ SLOT_arg/LITERAL/x ]> + seven || (NP NUM:'seven' NP*) || <x,l1,<e,t>,[l1:[x|count(x,7)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,7)]],[],[],[ SLOT_arg/LITERAL/x ]> + eight || (NP NUM:'eight' NP*) || <x,l1,<e,t>,[l1:[x|count(x,8)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,8)]],[],[],[ SLOT_arg/LITERAL/x ]> + nine || (NP NUM:'nine' NP*) || <x,l1,<e,t>,[l1:[x|count(x,9)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,9)]],[],[],[ SLOT_arg/LITERAL/x ]> + ten || (NP NUM:'ten' NP*) || <x,l1,<e,t>,[l1:[x|count(x,10)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,10)]],[],[],[ SLOT_arg/LITERAL/x ]> + eleven || (NP NUM:'one' NP*) || <x,l1,<e,t>,[l1:[x|count(x,11)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,11)]],[],[],[ SLOT_arg/LITERAL/x ]> + twelve || (NP NUM:'two' NP*) || <x,l1,<e,t>,[l1:[x|count(x,12)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,12)]],[],[],[ SLOT_arg/LITERAL/x ]> + thirteen || (NP NUM:'thirteen' NP*) || <x,l1,<e,t>,[l1:[x|count(x,13)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,13)]],[],[],[ SLOT_arg/LITERAL/x ]> + fourteen || (NP NUM:'fourteen' NP*) || <x,l1,<e,t>,[l1:[x|count(x,14)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,14)]],[],[],[ SLOT_arg/LITERAL/x ]> + fifteen || (NP NUM:'fifteen' NP*) || <x,l1,<e,t>,[l1:[x|count(x,15)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,15)]],[],[],[ SLOT_arg/LITERAL/x ]> + sixteen || (NP NUM:'sixteen' NP*) || <x,l1,<e,t>,[l1:[x|count(x,16)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,16)]],[],[],[ SLOT_arg/LITERAL/x ]> + seventeen || (NP NUM:'seventeen' NP*) || <x,l1,<e,t>,[l1:[x|count(x,17)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,17)]],[],[],[ SLOT_arg/LITERAL/x ]> + eighteen || (NP NUM:'eighteen' NP*) || <x,l1,<e,t>,[l1:[x|count(x,18)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,18)]],[],[],[ SLOT_arg/LITERAL/x ]> + nineteen || (NP NUM:'nineteen' NP*) || <x,l1,<e,t>,[l1:[x|count(x,19)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,19)]],[],[],[ SLOT_arg/LITERAL/x ]> + twenty || (NP NUM:'twenty' NP*) || <x,l1,<e,t>,[l1:[x|count(x,20)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,10)]],[],[],[ SLOT_arg/LITERAL/x ]> - one || (NUM NUM:'one') || <x,l1,e,[l1:[x|equal(x,1)]],[],[],[ SLOT_arg/LITERAL/x ]> - two || (NUM NUM:'two') || <x,l1,e,[l1:[x|equal(x,2)]],[],[],[ SLOT_arg/LITERAL/x ]> - three || (NUM NUM:'three') || <x,l1,e,[l1:[x|equal(x,3)]],[],[],[ SLOT_arg/LITERAL/x ]> - four || (NUM NUM:'four') || <x,l1,e,[l1:[x|equal(x,4)]],[],[],[ SLOT_arg/LITERAL/x ]> - five || (NUM NUM:'five') || <x,l1,e,[l1:[x|equal(x,5)]],[],[],[ SLOT_arg/LITERAL/x ]> - six || (NUM NUM:'six') || <x,l1,e,[l1:[x|equal(x,6)]],[],[],[ SLOT_arg/LITERAL/x ]> - seven || (NUM NUM:'seven') || <x,l1,e,[l1:[x|equal(x,7)]],[],[],[ SLOT_arg/LITERAL/x ]> - eight || (NUM NUM:'eight') || <x,l1,e,[l1:[x|equal(x,8)]],[],[],[ SLOT_arg/LITERAL/x ]> - nine || (NUM NUM:'nine') || <x,l1,e,[l1:[x|equal(x,9)]],[],[],[ SLOT_arg/LITERAL/x ]> - ten || (NUM NUM:'ten') || <x,l1,e,[l1:[x|equal(x,10)]],[],[],[ SLOT_arg/LITERAL/x ]> - eleven || (NUM NUM:'eleven') || <x,l1,e,[l1:[x|equal(x,11)]],[],[],[ SLOT_arg/LITERAL/x ]> - twelve || (NUM NUM:'twelve') || <x,l1,e,[l1:[x|equal(x,12)]],[],[],[ SLOT_arg/LITERAL/x ]> - thirteen || (NUM NUM:'thirteen') || <x,l1,e,[l1:[x|equal(x,13)]],[],[],[ SLOT_arg/LITERAL/x ]> - fourteen || (NUM NUM:'fourteen') || <x,l1,e,[l1:[x|equal(x,14)]],[],[],[ SLOT_arg/LITERAL/x ]> - fifteen || (NUM NUM:'fifteen') || <x,l1,e,[l1:[x|equal(x,15)]],[],[],[ SLOT_arg/LITERAL/x ]> - sixteen || (NUM NUM:'sixteen') || <x,l1,e,[l1:[x|equal(x,16)]],[],[],[ SLOT_arg/LITERAL/x ]> - seventeen || (NUM NUM:'seventeen') || <x,l1,e,[l1:[x|equal(x,17)]],[],[],[ SLOT_arg/LITERAL/x ]> - eighteen || (NUM NUM:'eighteen') || <x,l1,e,[l1:[x|equal(x,18)]],[],[],[ SLOT_arg/LITERAL/x ]> - nineteen || (NUM NUM:'nineteen') || <x,l1,e,[l1:[x|equal(x,19)]],[],[],[ SLOT_arg/LITERAL/x ]> - twenty || (NUM NUM:'twenty') || <x,l1,e,[l1:[x|equal(x,20)]],[],[],[ SLOT_arg/LITERAL/x ]> + one || (NUM NUM:'one') || <x,l1,e,[l1:[x|count(x,1)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,1)]],[],[],[ SLOT_arg/LITERAL/x ]> + two || (NUM NUM:'two') || <x,l1,e,[l1:[x|count(x,2)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,2)]],[],[],[ SLOT_arg/LITERAL/x ]> + three || (NUM NUM:'three') || <x,l1,e,[l1:[x|count(x,3)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,3)]],[],[],[ SLOT_arg/LITERAL/x ]> + four || (NUM NUM:'four') || <x,l1,e,[l1:[x|count(x,4)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,4)]],[],[],[ SLOT_arg/LITERAL/x ]> + five || (NUM NUM:'five') || <x,l1,e,[l1:[x|count(x,5)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,5)]],[],[],[ SLOT_arg/LITERAL/x ]> + six || (NUM NUM:'six') || <x,l1,e,[l1:[x|count(x,6)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,6)]],[],[],[ SLOT_arg/LITERAL/x ]> + seven || (NUM NUM:'seven') || <x,l1,e,[l1:[x|count(x,7)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,7)]],[],[],[ SLOT_arg/LITERAL/x ]> + eight || (NUM NUM:'eight') || <x,l1,e,[l1:[x|count(x,8)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,8)]],[],[],[ SLOT_arg/LITERAL/x ]> + nine || (NUM NUM:'nine') || <x,l1,e,[l1:[x|count(x,9)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,9)]],[],[],[ SLOT_arg/LITERAL/x ]> + ten || (NUM NUM:'ten') || <x,l1,e,[l1:[x|count(x,10)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,10)]],[],[],[ SLOT_arg/LITERAL/x ]> + eleven || (NUM NUM:'eleven') || <x,l1,e,[l1:[x|count(x,11)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,11)]],[],[],[ SLOT_arg/LITERAL/x ]> + twelve || (NUM NUM:'twelve') || <x,l1,e,[l1:[x|count(x,12)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,12)]],[],[],[ SLOT_arg/LITERAL/x ]> + thirteen || (NUM NUM:'thirteen') || <x,l1,e,[l1:[x|count(x,13)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,13)]],[],[],[ SLOT_arg/LITERAL/x ]> + fourteen || (NUM NUM:'fourteen') || <x,l1,e,[l1:[x|count(x,14)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,14)]],[],[],[ SLOT_arg/LITERAL/x ]> + fifteen || (NUM NUM:'fifteen') || <x,l1,e,[l1:[x|count(x,15)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,15)]],[],[],[ SLOT_arg/LITERAL/x ]> + sixteen || (NUM NUM:'sixteen') || <x,l1,e,[l1:[x|count(x,16)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,16)]],[],[],[ SLOT_arg/LITERAL/x ]> + seventeen || (NUM NUM:'seventeen') || <x,l1,e,[l1:[x|count(x,17)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,17)]],[],[],[ SLOT_arg/LITERAL/x ]> + eighteen || (NUM NUM:'eighteen') || <x,l1,e,[l1:[x|count(x,18)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,18)]],[],[],[ SLOT_arg/LITERAL/x ]> + nineteen || (NUM NUM:'nineteen') || <x,l1,e,[l1:[x|count(x,19)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,19)]],[],[],[ SLOT_arg/LITERAL/x ]> + twenty || (NUM NUM:'twenty') || <x,l1,e,[l1:[x|count(x,20)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,20)]],[],[],[ SLOT_arg/LITERAL/x ]> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2012-07-12 10:14:37
|
Revision: 3780 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3780&view=rev Author: christinaunger Date: 2012-07-12 10:14:30 +0000 (Thu, 12 Jul 2012) Log Message: ----------- [tbsl] fix: "exactly n", "at least n", etc. now behave analogous to "more than n" etc. Modified Paths: -------------- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/converter/DRS2SPARQL_Converter.java trunk/components-ext/src/main/resources/tbsl/lexicon/english.lex trunk/components-ext/src/main/resources/tbsl/lexicon/english_oxford.lex Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/converter/DRS2SPARQL_Converter.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/converter/DRS2SPARQL_Converter.java 2012-07-11 18:10:57 UTC (rev 3779) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/converter/DRS2SPARQL_Converter.java 2012-07-12 10:14:30 UTC (rev 3780) @@ -562,7 +562,7 @@ Set<Simple_DRS_Condition> emptyConditions = new HashSet<Simple_DRS_Condition>(); for (Simple_DRS_Condition c : drs.getAllSimpleConditions()) { - if(c.getPredicate().equals("empty")) { + if(c.getPredicate().equals("empty") || c.getPredicate().equals("empty_data")) { emptyConditions.add(c); } } @@ -572,8 +572,17 @@ boolean globalsuccess = false; for (Simple_DRS_Condition c : emptyConditions) { - String nounToExpand = c.getArguments().get(1).getValue(); - String fallbackNoun = c.getArguments().get(0).getValue(); + String nounToExpand; + String fallbackNoun; + boolean datatype = false; + if (c.getPredicate().equals("empty")) { + nounToExpand = c.getArguments().get(1).getValue(); + fallbackNoun = c.getArguments().get(0).getValue(); + } else { + nounToExpand = c.getArguments().get(0).getValue(); + fallbackNoun = c.getArguments().get(1).getValue(); // TODO das ist quark... + datatype = true; + } boolean success = false; loop: for (Simple_DRS_Condition sc : drs.getAllSimpleConditions()) { @@ -584,7 +593,8 @@ s.setSlotType(SlotType.PROPERTY); List<DiscourseReferent> newargs = new ArrayList<DiscourseReferent>(); newargs.add(c.getArguments().get(0)); - newargs.add(sc.getArguments().get(0)); + if (datatype) newargs.add(c.getArguments().get(1)); + else newargs.add(sc.getArguments().get(0)); sc.setArguments(newargs); success = true; globalsuccess = true; Modified: trunk/components-ext/src/main/resources/tbsl/lexicon/english.lex =================================================================== --- trunk/components-ext/src/main/resources/tbsl/lexicon/english.lex 2012-07-11 18:10:57 UTC (rev 3779) +++ trunk/components-ext/src/main/resources/tbsl/lexicon/english.lex 2012-07-12 10:14:30 UTC (rev 3780) @@ -67,10 +67,11 @@ what || (DP DET:'what' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ ?y | ] ], [ (l2,y,noun,<e,t>) ], [ l2=l1 ],[]> many || (DP DET:'many' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ | l2:[ y | ] MANY y l3:[|] ] ], [ (l4,y,noun,<e,t>) ], [ l4=l2 ],[]> the || (DP DET:'the' NP[noun]) || <x, l1, <<e,t>,t>, [ l1:[x|] ], [ (l2,x,noun,<e,t>) ], [ l2=l1 ],[]> - at least || (DP DET:'at' DET:'least' NUM[num] NP[noun]) || <y,l1,<<e,t>,t>,[l1:[ y,j |count(a,y,j), greaterorequal(j,x) ]],[(l2,y,noun,<e,t>),(l3,x,num,e)],[ l1=l2, l2=l3 ],[]> - at most || (DP DET:'at' DET:'most' NUM[num] NP[noun]) || <y,l1,<<e,t>,t>,[l1:[ y,j | count(a,y,j), lessorequal(j,x) ]],[(l2,y,noun,<e,t>),(l3,x,num,e)],[ l1=l2, l2=l3 ],[]> - exactly || (DP DET:'exactly' NUM[num] NP[noun]) || <y,l1,<<e,t>,t>,[l1:[ y,j | count(y,j), equals(j,x) ]],[(l2,y,noun,<e,t>),(l3,x,num,e)],[ l1=l2, l2=l3 ],[]> - + at least || (DP DET:'at' DET:'least' NUM[num] NP[noun]) || <y,l1,<<e,t>,t>,[ l1:[ y,c | count(y,c), greaterorequal(c,x) ] ],[(l2,y,noun,<e,t>),(l3,x,num,e)],[l2=l1,l3=l1],[ SLOT_arg/RESOURCE/y ]> ;; <y,l1,<<e,t>,t>,[l1:[ y | greaterorequal(y,x) ]],[(l2,y,noun,<e,t>),(l3,x,num,e)],[ l1=l2, l2=l3 ],[ SLOT_arg/LITERAL/y ]> + at most || (DP DET:'at' DET:'most' NUM[num] NP[noun]) || <y,l1,<<e,t>,t>,[ l1:[ y,c | count(y,c), lessorequal(c,x) ] ],[(l2,y,noun,<e,t>),(l3,x,num,e)],[l2=l1,l3=l1],[ SLOT_arg/RESOURCE/y ]> ;; <y,l1,<<e,t>,t>,[l1:[ y | lessorequal(y,x) ]],[(l2,y,noun,<e,t>),(l3,x,num,e)],[ l1=l2, l2=l3 ],[ SLOT_arg/LITERAL/y ]> + exactly || (DP DET:'exactly' NUM[num] NP[noun]) || <y,l1,<<e,t>,t>,[ l1:[ y,c | count(y,c), equal(c,x) ] ],[(l2,y,noun,<e,t>),(l3,x,num,e)],[l2=l1,l3=l1],[ SLOT_arg/RESOURCE/y ]> ;; <y,l1,<<e,t>,t>,[l1:[ y | equal(y,x) ]],[(l2,y,noun,<e,t>),(l3,x,num,e)],[ l1=l2, l2=l3 ],[ SLOT_arg/LITERAL/y ]> + equal to || (DP DET:'equal' DET:'to' NUM[num] NP[noun]) || <y,l1,<<e,t>,t>,[ l1:[ y,c | count(y,c), equal(c,x) ] ],[(l2,y,noun,<e,t>),(l3,x,num,e)],[l2=l1,l3=l1],[ SLOT_arg/RESOURCE/y ]> ;; <y,l1,<<e,t>,t>,[l1:[ y | equal(y,x) ]],[(l2,y,noun,<e,t>),(l3,x,num,e)],[ l1=l2, l2=l3 ],[ SLOT_arg/LITERAL/y ]> + other || (NP ADJ:'other' NP*) || <x,l1,<e,t>,[ l1:[ | ] ], [],[],[]> total || (NP ADJ:'total' NP[np]) || <s,l1,<e,t>,[ l1:[ ?s | sum(a,x,s) ] ], [ (l2,x,np,<e,t>) ],[ l2=l1 ],[]> Modified: trunk/components-ext/src/main/resources/tbsl/lexicon/english_oxford.lex =================================================================== --- trunk/components-ext/src/main/resources/tbsl/lexicon/english_oxford.lex 2012-07-11 18:10:57 UTC (rev 3779) +++ trunk/components-ext/src/main/resources/tbsl/lexicon/english_oxford.lex 2012-07-12 10:14:30 UTC (rev 3780) @@ -34,7 +34,7 @@ with || (NP NP* (PP P:'with' DP[dp])) || <x,l1,<e,t>, [ l1:[ | empty(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[]> ;; <x,l1,<e,t>, [ l1:[ | SLOT_description(x,z), regextoken(z,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_description/DATATYPEPROPERTY/description, SLOT_arg/LITERAL/z ]> with || (PP P:'with' DP[dp]) || <x,l1,<e,t>, [ l1:[ | empty(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[]> ;; <x,l1,<e,t>, [ l1:[ | SLOT_description(x,z), regextoken(z,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_description/DATATYPEPROPERTY/description, SLOT_arg/LITERAL/z ]> - square meters || (DP N:'square' N:'meters') || <x,l1,<<e,t>,t>>, [l1:[ | SLOT_size(x,y) ]], [],[],[SLOT_size/DATATYPEPROPERTY/size ]> + square meters || (NP N:'square' N:'meters') || <x,l1,<e,t>, [l1:[ | SLOT_size(x,y) ]], [],[],[SLOT_size/DATATYPEPROPERTY/size ]> // MONTHS This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dc...@us...> - 2012-07-11 18:11:03
|
Revision: 3779 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3779&view=rev Author: dcherix Date: 2012-07-11 18:10:57 +0000 (Wed, 11 Jul 2012) Log Message: ----------- Bug fixes in type ontology Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/SparqlSimpleExtractor.java Modified: trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/SparqlSimpleExtractor.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/SparqlSimpleExtractor.java 2012-07-11 16:49:31 UTC (rev 3778) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/SparqlSimpleExtractor.java 2012-07-11 18:10:57 UTC (rev 3779) @@ -11,15 +11,12 @@ import org.dllearner.core.AbstractKnowledgeSource; import org.dllearner.core.ComponentAnn; import org.dllearner.core.ComponentInitException; +import org.dllearner.core.KnowledgeSource; import org.dllearner.core.OntologyFormat; import org.dllearner.core.OntologyFormatUnsupportedException; import org.dllearner.core.config.ConfigOption; - import org.dllearner.core.owl.KB; - import org.dllearner.kb.OWLOntologyKnowledgeSource; - -import org.dllearner.utilities.JamonMonitorLogger; import org.dllearner.utilities.analyse.TypeOntology; import org.semanticweb.owlapi.model.OWLOntology; import org.semanticweb.owlapi.model.OWLOntologyManager; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dc...@us...> - 2012-07-11 16:49:41
|
Revision: 3778 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3778&view=rev Author: dcherix Date: 2012-07-11 16:49:31 +0000 (Wed, 11 Jul 2012) Log Message: ----------- Bug fix Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/SparqlSimpleExtractor.java Modified: trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/SparqlSimpleExtractor.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/SparqlSimpleExtractor.java 2012-07-11 12:56:58 UTC (rev 3777) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/SparqlSimpleExtractor.java 2012-07-11 16:49:31 UTC (rev 3778) @@ -40,7 +40,7 @@ @ComponentAnn(name = "efficient SPARQL fragment extractor", shortName = "sparqls", version = 0.1) -public class SparqlSimpleExtractor extends AbstractKnowledgeSource { +public class SparqlSimpleExtractor extends AbstractKnowledgeSource implements OWLOntologyKnowledgeSource{ @ConfigOption(name = "endpointURL", description = "URL of the SPARQL endpoint", required = true) @@ -331,9 +331,10 @@ } - + @Override public OWLOntology createOWLOntology(OWLOntologyManager manager) { JenaToOwlapiConverter converter = new JenaToOwlapiConverter(); return converter.convert(this.model,manager); } + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2012-07-11 12:57:09
|
Revision: 3777 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3777&view=rev Author: lorenz_b Date: 2012-07-11 12:56:58 +0000 (Wed, 11 Jul 2012) Log Message: ----------- Added option to use ELK and CEL reasoner. Modified Paths: -------------- trunk/components-core/pom.xml trunk/components-core/src/main/java/org/dllearner/reasoning/OWLAPIReasoner.java trunk/pom.xml Modified: trunk/components-core/pom.xml =================================================================== --- trunk/components-core/pom.xml 2012-07-07 11:36:11 UTC (rev 3776) +++ trunk/components-core/pom.xml 2012-07-11 12:56:58 UTC (rev 3777) @@ -227,6 +227,22 @@ <groupId>commons-pool</groupId> <artifactId>commons-pool</artifactId> </dependency> + <dependency> + <groupId>org.semanticweb.elk</groupId> + <artifactId>elk-owlapi</artifactId> + <version>0.2.0</version> + </dependency> + <dependency> + <groupId>de.tudresden.inf.lat.cel</groupId> + <artifactId>reasoner</artifactId> + <version>0.5.1</version> + </dependency> + <dependency> + <groupId>de.tudresden.inf.lat.cel</groupId> + <artifactId>jsexp</artifactId> + <version>0.1.0</version> + </dependency> + </dependencies> <dependencyManagement> <dependencies> Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/OWLAPIReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/OWLAPIReasoner.java 2012-07-07 11:36:11 UTC (rev 3776) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/OWLAPIReasoner.java 2012-07-11 12:56:58 UTC (rev 3777) @@ -72,6 +72,7 @@ import org.dllearner.utilities.owl.OWLAPIDescriptionConvertVisitor; import org.dllearner.utilities.owl.RoleComparator; import org.semanticweb.HermiT.Reasoner.ReasonerFactory; +import org.semanticweb.elk.owlapi.ElkReasonerFactory; import org.semanticweb.owlapi.apibinding.OWLManager; import org.semanticweb.owlapi.model.AddAxiom; import org.semanticweb.owlapi.model.AddImport; @@ -122,6 +123,8 @@ import com.clarkparsia.pellet.owlapiv3.PelletReasonerFactory; +import de.tudresden.inf.lat.cel.owlapi.CelReasoner; + /** * Mapping to OWL API reasoner interface. The OWL API currently * supports three reasoners: FaCT++, HermiT and Pellet. FaCT++ is connected @@ -169,7 +172,7 @@ // references to OWL API ontologies private List<OWLOntology> owlAPIOntologies = new LinkedList<OWLOntology>(); - @ConfigOption(name = "reasonerType", description = "The name of the OWL APIReasoner to use {\"fact\", \"hermit\", \"owllink\", \"pellet\"}", defaultValue = "pellet", required = false, propertyEditorClass = StringTrimmerEditor.class) + @ConfigOption(name = "reasonerType", description = "The name of the OWL APIReasoner to use {\"fact\", \"hermit\", \"owllink\", \"pellet\", \"elk\", \"cel\"}", defaultValue = "pellet", required = false, propertyEditorClass = StringTrimmerEditor.class) private String reasonerTypeString = "pellet"; @ConfigOption(name = "owlLinkURL", description = "The URL to the owl server", defaultValue = "", required = false, propertyEditorClass = StringTrimmerEditor.class) private String owlLinkURL; @@ -305,6 +308,12 @@ // output will be very large Logger pelletLogger = Logger.getLogger("org.mindswap.pellet"); pelletLogger.setLevel(Level.WARN); + } else if (getReasonerTypeString().equals("elk")) { + // instantiate ELK reasoner + reasoner = new ElkReasonerFactory().createNonBufferingReasoner(ontology, conf); + } else if (getReasonerTypeString().equals("cel")) { + // instantiate CEL reasoner + reasoner = new CelReasoner(ontology, conf); } else { try { OWLlinkHTTPXMLReasonerFactory factory = new OWLlinkHTTPXMLReasonerFactory(); Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2012-07-07 11:36:11 UTC (rev 3776) +++ trunk/pom.xml 2012-07-11 12:56:58 UTC (rev 3777) @@ -119,11 +119,6 @@ as version is retrieved from the parent. - - Remember, default scope is compile in Maven. --> <dependencies> - <dependency> - <groupId>org.apache.jena</groupId> - <artifactId>jena-iri</artifactId> - <version>0.9.1-incubating-20120305.120450-12</version> - </dependency> <dependency> <groupId>net.sourceforge.owlapi</groupId> <artifactId>owlapi</artifactId> @@ -505,6 +500,12 @@ <url>http://maven.aksw.org/archiva/repository/snapshots</url> <snapshots/> </repository> + <repository> + <id>elk.reasoner</id> + <name>ELK Reasoner Repository</name> + <url>http://elk-reasoner.googlecode.com/svn/m2/releases</url> + <releases/> + </repository> </repositories> <distributionManagement> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dc...@us...> - 2012-07-07 11:36:18
|
Revision: 3776 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3776&view=rev Author: dcherix Date: 2012-07-07 11:36:11 +0000 (Sat, 07 Jul 2012) Log Message: ----------- Created new dbpedia learn script for the simple sparql component Modified Paths: -------------- trunk/scripts/src/main/java/org/dllearner/scripts/improveWikipedia/DBpediaClassLearnerCELOE.java Added Paths: ----------- trunk/scripts/src/main/java/org/dllearner/scripts/improveWikipedia/NewSparqlCompDBpediaClassLearnerCELOE.java Modified: trunk/scripts/src/main/java/org/dllearner/scripts/improveWikipedia/DBpediaClassLearnerCELOE.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/improveWikipedia/DBpediaClassLearnerCELOE.java 2012-07-07 11:34:48 UTC (rev 3775) +++ trunk/scripts/src/main/java/org/dllearner/scripts/improveWikipedia/DBpediaClassLearnerCELOE.java 2012-07-07 11:36:11 UTC (rev 3776) @@ -53,6 +53,7 @@ import org.dllearner.reasoning.FastInstanceChecker; import org.dllearner.refinementoperators.RhoDRDown; import org.dllearner.utilities.Helper; +import org.dllearner.utilities.JamonMonitorLogger; import org.dllearner.utilities.datastructures.Datastructures; import org.dllearner.utilities.datastructures.SetManipulation; import org.dllearner.utilities.datastructures.SortedSetTuple; @@ -66,6 +67,8 @@ import com.hp.hpl.jena.query.QuerySolution; import com.hp.hpl.jena.query.ResultSet; import com.hp.hpl.jena.rdf.model.ModelFactory; +import com.jamonapi.Monitor; +import com.jamonapi.MonitorFactory; /** * A script, which learns definitions / super classes of classes in the DBpedia @@ -101,19 +104,26 @@ public static void main(String args[]) throws LearningProblemUnsupportedException, IOException, Exception { - - DBpediaClassLearnerCELOE dcl = new DBpediaClassLearnerCELOE(); - Set<String> classesToLearn = dcl.getClasses(); - KB kb = dcl.learnAllClasses(classesToLearn); - kb.export(new File("result.owl"), OntologyFormat.RDF_XML); - // Set<String> pos = dcl.getPosEx("http://dbpedia.org/ontology/Person"); - // dcl.getNegEx("http://dbpedia.org/ontology/Person", pos); + for (int i = 0; i < 4; i++) { + DBpediaClassLearnerCELOE dcl = new DBpediaClassLearnerCELOE(); + Set<String> classesToLearn = dcl.getClasses(); + Monitor mon = MonitorFactory.start("Learn DBpedia"); + KB kb = dcl.learnAllClasses(classesToLearn); + mon.stop(); + kb.export(new File("/home/dcherix/dllearner/old/result.owl"), + OntologyFormat.RDF_XML); + // Set<String> pos = + // dcl.getPosEx("http://dbpedia.org/ontology/Person"); + // dcl.getNegEx("http://dbpedia.org/ontology/Person", pos); + logger.info("Test " + i + ":\n" + + JamonMonitorLogger.getStringForAllSortedByLabel()); + } } public KB learnAllClasses(Set<String> classesToLearn) { KB kb = new KB(); for (String classToLearn : classesToLearn) { - System.out.println(classToLearn); + logger.info("Leraning class: " + classToLearn); try { Description d = learnClass(classToLearn); if (d == null @@ -124,9 +134,10 @@ } kb.addAxiom(new EquivalentClassesAxiom(new NamedClass( classToLearn), d)); - kb.export(new File("result_partial.owl"), + kb.export(new File( + "/home/dcherix/dllearner/old/result_partial.owl"), OntologyFormat.RDF_XML); - System.out.println("DESCRIPTION: " + d); + } catch (Exception e) { logger.warn("", e); } @@ -175,7 +186,7 @@ ks.setObjList(new HashSet<String>(Arrays.asList(new String[] { "http://dbpedia.org/class/yago/", - "" + "http://dbpedia.org/resource/Category:" }))); + "http://dbpedia.org/resource/Category:" }))); ks.init(); @@ -193,7 +204,7 @@ CELOE la = cm.learningAlgorithm(CELOE.class, lp, rc); // CELOEConfigurator cc = la.getConfigurator(); la.setMaxExecutionTimeInSeconds(100); - + la.init(); RhoDRDown op = (RhoDRDown) la.getOperator(); op.setUseNegation(false); @@ -323,7 +334,6 @@ */ String targetClass = getParallelClass(clazz); - System.out.println(targetClass); logger.info("using class for negatives: " + targetClass); if (targetClass != null) { SparqlTemplate st = SparqlTemplate Added: trunk/scripts/src/main/java/org/dllearner/scripts/improveWikipedia/NewSparqlCompDBpediaClassLearnerCELOE.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/improveWikipedia/NewSparqlCompDBpediaClassLearnerCELOE.java (rev 0) +++ trunk/scripts/src/main/java/org/dllearner/scripts/improveWikipedia/NewSparqlCompDBpediaClassLearnerCELOE.java 2012-07-07 11:36:11 UTC (rev 3776) @@ -0,0 +1,439 @@ +/** + * Copyright (C) 2007-2011, Jens Lehmann + * + * This file is part of DL-Learner. + * + * DL-Learner is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * DL-Learner is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ +package org.dllearner.scripts.improveWikipedia; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.SortedSet; +import java.util.TreeSet; + +import org.aksw.commons.sparql.core.SparqlTemplate; +import org.apache.velocity.VelocityContext; +import org.dllearner.algorithms.celoe.CELOE; +import org.dllearner.algorithms.fuzzydll.FuzzyCELOE; +import org.dllearner.core.AbstractReasonerComponent; +import org.dllearner.core.ComponentManager; +import org.dllearner.core.LearningProblemUnsupportedException; +import org.dllearner.core.OntologyFormat; +import org.dllearner.core.owl.Description; +import org.dllearner.core.owl.EquivalentClassesAxiom; +import org.dllearner.core.owl.Individual; +import org.dllearner.core.owl.KB; +import org.dllearner.core.owl.NamedClass; +import org.dllearner.core.owl.Thing; +import org.dllearner.gui.Config; +import org.dllearner.gui.ConfigSave; +import org.dllearner.kb.sparql.SparqlEndpoint; +import org.dllearner.kb.sparql.simple.SparqlSimpleExtractor; +import org.dllearner.learningproblems.PosNegLPStandard; +import org.dllearner.reasoning.FastInstanceChecker; +import org.dllearner.refinementoperators.RhoDRDown; +import org.dllearner.utilities.Helper; +import org.dllearner.utilities.JamonMonitorLogger; +import org.dllearner.utilities.datastructures.Datastructures; +import org.dllearner.utilities.datastructures.SetManipulation; +import org.dllearner.utilities.datastructures.SortedSetTuple; + +import com.hp.hpl.jena.ontology.OntClass; +import com.hp.hpl.jena.ontology.OntModel; +import com.hp.hpl.jena.query.Query; +import com.hp.hpl.jena.query.QueryExecution; +import com.hp.hpl.jena.query.QueryExecutionFactory; +import com.hp.hpl.jena.query.QueryFactory; +import com.hp.hpl.jena.query.QuerySolution; +import com.hp.hpl.jena.query.ResultSet; +import com.hp.hpl.jena.rdf.model.ModelFactory; +import com.jamonapi.Monitor; +import com.jamonapi.MonitorFactory; + +/** + * A script, which learns definitions / super classes of classes in the DBpedia + * ontology. + * + * TODO: This script made heavy use of aksw-commons-sparql-scala and needs to be + * rewritten to use aksw-commons-sparql (the new SPARQL API). + * + * @author Jens Lehmann + * @author Sebastian Hellmann + * @author Didier Cherix + */ +public class NewSparqlCompDBpediaClassLearnerCELOE { + + public static String endpointurl = "http://live.dbpedia.org/sparql"; + public static int examplesize = 30; + + private static org.apache.log4j.Logger logger = org.apache.log4j.Logger + .getLogger(NewSparqlCompDBpediaClassLearnerCELOE.class); + + SparqlEndpoint sparqlEndpoint = null; + + public NewSparqlCompDBpediaClassLearnerCELOE() { + // OPTIONAL: if you want to do some case distinctions in the learnClass + // method, you could add + // parameters to the constructure e.g. YAGO_ + try { + sparqlEndpoint = new SparqlEndpoint(new URL(endpointurl)); + } catch (MalformedURLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public static void main(String args[]) + throws LearningProblemUnsupportedException, IOException, Exception { + for (int i = 0; i < 10; i++) { + NewSparqlCompDBpediaClassLearnerCELOE dcl = new NewSparqlCompDBpediaClassLearnerCELOE(); + Set<String> classesToLearn = dcl.getClasses(); + + Monitor mon = MonitorFactory.start("Learn DBpedia"); + KB kb = dcl.learnAllClasses(classesToLearn); + mon.stop(); + kb.export(new File("/home/dcherix/dllearner/simple/result" + i + + ".owl"), OntologyFormat.RDF_XML); + // Set<String> pos = + // dcl.getPosEx("http://dbpedia.org/ontology/Person"); + // dcl.getNegEx("http://dbpedia.org/ontology/Person", pos); + logger.info("Test" + i + ":\n" + + JamonMonitorLogger.getStringForAllSortedByLabel()); + System.out.println(JamonMonitorLogger + .getStringForAllSortedByLabel()); + } + } + + public KB learnAllClasses(Set<String> classesToLearn) { + KB kb = new KB(); + for (String classToLearn : classesToLearn) { + logger.info(classToLearn); + System.out.println(classToLearn); + try { + Description d = learnClass(classToLearn); + if (d == null + || d.toKBSyntaxString().equals( + new Thing().toKBSyntaxString())) { + logger.error("Description was " + d + ", continueing"); + continue; + } + kb.addAxiom(new EquivalentClassesAxiom(new NamedClass( + classToLearn), d)); + kb.export(new File( + "/home/dcherix/dllearner/simple/result_partial.owl"), + OntologyFormat.RDF_XML); + + } catch (Exception e) { + logger.warn("", e); + } + } + + return kb; + } + + public Description learnClass(String classToLearn) throws Exception { + // TODO: use aksw-commons-sparql instead of sparql-scala + SortedSet<String> posEx = new TreeSet<String>(getPosEx(classToLearn)); + logger.info("Found " + posEx.size() + " positive examples"); + if (posEx.isEmpty()) { + return null; + } + SortedSet<String> negEx = new TreeSet<String>(getNegEx(classToLearn, + posEx)); + + posEx = SetManipulation.fuzzyShrink(posEx, examplesize); + negEx = SetManipulation.fuzzyShrink(negEx, examplesize); + + SortedSet<Individual> posExamples = Helper.getIndividualSet(posEx); + SortedSet<Individual> negExamples = Helper.getIndividualSet(negEx); + SortedSetTuple<Individual> examples = new SortedSetTuple<Individual>( + posExamples, negExamples); + + ComponentManager cm = ComponentManager.getInstance(); + + SparqlSimpleExtractor ks = cm + .knowledgeSource(SparqlSimpleExtractor.class); + ks.setInstances(new ArrayList<String>(Datastructures + .individualSetToStringSet(examples.getCompleteSet()))); + // ks.getConfigurator().setPredefinedEndpoint("DBPEDIA"); // TODO: + // probably the official endpoint is too slow? + ks.setEndpointURL(endpointurl); + // ks.setUseLits(false); + // ks.setUseCacheDatabase(true); + ks.setRecursionDepth(1); + ArrayList<String> ontologyUrls = new ArrayList<String>(); + ontologyUrls.add("http://downloads.dbpedia.org/3.6/dbpedia_3.6.owl"); + ks.setOntologySchemaUrls(ontologyUrls); + ks.setAboxfilter("FILTER (!regex(str(?p), '^http://dbpedia.org/property/wikiPageUsesTemplate') && " + + "!regex(str(?p), '^http://dbpedia.org/ontology/wikiPageExternalLink') && " + + "!regex(str(?p), '^http://dbpedia.org/property/wordnet_type') && " + + "!regex(str(?p), '^http://www.w3.org/2002/07/owl#sameAs')) ."); + ks.setTboxfilter("FILTER ( !regex(str(?class), '^http://dbpedia.org/class/yago/') && " + + "!regex(str(?class), '^http://dbpedia.org/resource/Category:')) "); + // ks.setCloseAfterRecursion(true); + // ks.setSaveExtractedFragment(true); + // ks.setPredList(new HashSet<String>(Arrays.asList(new String[] { + // "http://dbpedia.org/property/wikiPageUsesTemplate",(!regex(str(?p), + // '^http://dbpedia.org/resource/') && ! regex(str(?o), + // '^http://dbpedia.org/resource/Category') ) + // "http://dbpedia.org/ontology/wikiPageExternalLink", + // "http://dbpedia.org/property/wordnet_type", + // "http://www.w3.org/2002/07/owl#sameAs" }))); + + // ks.setObjList(new HashSet<String>(Arrays.asList(new String[] { + // "http://dbpedia.org/class/yago/", + // "" + "http://dbpedia.org/resource/Category:" }))); + + ks.init(); + + AbstractReasonerComponent rc = cm.reasoner(FastInstanceChecker.class, + ks); + rc.init(); + + PosNegLPStandard lp = cm.learningProblem(PosNegLPStandard.class, rc); + lp.setPositiveExamples(posExamples); + lp.setNegativeExamples(negExamples); + lp.setAccuracyMethod("fmeasure"); + lp.setUseApproximations(false); + lp.init(); + CELOE la = cm.learningAlgorithm(CELOE.class, lp, rc); + // CELOEConfigurator cc = la.getConfigurator(); + la.setMaxExecutionTimeInSeconds(100); + la.init(); + RhoDRDown op = (RhoDRDown) la.getOperator(); + + op.setUseNegation(false); + op.setUseAllConstructor(false); + op.setUseCardinalityRestrictions(false); + op.setUseHasValueConstructor(true); + + la.setNoisePercentage(20); + la.setIgnoredConcepts(new HashSet<NamedClass>(Arrays + .asList(new NamedClass[] { new NamedClass(classToLearn) }))); + la.init(); + + // to write the above configuration in a conf file (optional) + Config cf = new Config(cm, ks, rc, lp, la); + // new ConfigSave(cf).saveFile(new File("/dev/null")); + + la.start(); + + cm.freeAllComponents(); + return la.getCurrentlyBestDescription(); + } + + public Set<String> getClasses() throws Exception { + OntModel model = ModelFactory.createOntologyModel(); + model.read(new FileInputStream( + "/home/dcherix/Downloads/dbpedia_3.6.owl"), null); + Set<OntClass> classes = model.listClasses().toSet(); + Set<String> results = new HashSet<String>(); + int i = 0; + for (OntClass ontClass : classes) { + results.add(ontClass.getURI()); + i++; + if (i == 100) + break; + } + System.out.println(results.size()); + return results; + } + + // gets all DBpedia Classes + // public Set<String> getClasses() throws Exception { + // SparqlTemplate st = SparqlTemplate.getInstance("allClasses.vm"); + // st.setLimit(0); + // st.addFilter(sparqlEndpoint.like("classes", new + // HashSet<String>(Arrays.asList(new + // String[]{"http://dbpedia.org/ontology/"})))); + // VelocityContext vc = st.putSgetVelocityContext(); + // String query = st.getQuery(); + // return new + // HashSet<String>(ResultSetRenderer.asStringSet(sparqlEndpoint.executeSelect(query))); + // } + // + public Set<String> getPosEx(String clazz) throws Exception { + SparqlTemplate st = SparqlTemplate.getInstance("instancesOfClass.vm"); + st.setLimit(0); + VelocityContext vc = st.getVelocityContext(); + vc.put("class", clazz); + String queryString = st.getQuery(); + return this.executeResourceQuery(queryString); + } + + /** + * gets all direct classes of all instances and has a look, what the most + * common is + * + * @param clazz + * @param posEx + * @return + * @throws Exception + */ + public String selectClass(String clazz, Set<String> posEx) throws Exception { + Map<String, Integer> m = new HashMap<String, Integer>(); + // TODO: use aksw-commons-sparql instead of sparql-scala + /* + * for (String pos : posEx) { SparqlTemplate st = + * SparqlTemplate.getInstance("directClassesOfInstance.vm"); + * st.setLimit(0); st.addFilter(sparqlEndpoint.like("direct", new + * HashSet<String>(Arrays.asList(new + * String[]{"http://dbpedia.org/ontology/"})))); VelocityContext vc = + * st.getVelocityContext(); vc.put("instance", pos); String query = + * st.getQuery(); Set<String> classes = new + * HashSet<String>(ResultSetRenderer + * .asStringSet(sparqlEndpoint.executeSelect(query))); + * classes.remove(clazz); for (String s : classes) { if (m.get(s) == + * null) { m.put(s, 0); } m.put(s, m.get(s).intValue() + 1); } } + */ + + int max = 0; + String maxClass = ""; + for (String key : m.keySet()) { + if (m.get(key).intValue() > max) { + maxClass = key; + } + } + + return maxClass; + } + + /** + * gets instances of a class or random instances + * + * @param clazz + * @param posEx + * @return + * @throws Exception + */ + + public Set<String> getNegEx(String clazz, Set<String> posEx) + throws Exception { + Set<String> negEx = new HashSet<String>(); + // TODO: use aksw-commons-sparql instead of sparql-scala + /* + * String targetClass = getParallelClass(clazz); + * logger.info("using class for negatives: " + targetClass); if + * (targetClass != null) { + * + * SparqlTemplate st = + * SparqlTemplate.getInstance("instancesOfClass.vm"); st.setLimit(0); + * VelocityContext vc = st.getVelocityContext(); vc.put("class", + * targetClass); // st.addFilter(sparqlEndpoint.like("class", new + * HashSet<String>(Arrays.asList(new + * String[]{"http://dbpedia.org/ontology/"})))); String query = + * st.getQuery(); // negEx.addAll(new + * HashSet<String>(ResultSetRenderer.asStringSet + * (sparqlEndpoint.executeSelect(query)))); } else { + * + * SparqlTemplate st = SparqlTemplate.getInstance("someInstances.vm"); + * st.setLimit(posEx.size() + 100); VelocityContext vc = + * st.getVelocityContext(); String query = st.getQuery(); // + * negEx.addAll(new + * HashSet<String>(ResultSetRenderer.asStringSet(sparqlEndpoint + * .executeSelect(query)))); } negEx.removeAll(posEx); + */ + + String targetClass = getParallelClass(clazz); + logger.info("using class for negatives: " + targetClass); + if (targetClass != null) { + SparqlTemplate st = SparqlTemplate + .getInstance("instancesOfClass.vm"); + st.setLimit(0); + VelocityContext vc = st.getVelocityContext(); + vc.put("class", targetClass); + st.addFilter("FILTER ( ?class LIKE (<http://dbpedia.org/ontology/%>"); + + String query = st.getQuery(); + negEx.addAll(this.executeResourceQuery(query)); + } else { + SparqlTemplate st = SparqlTemplate.getInstance("someInstances.vm"); + st.setLimit(posEx.size() + 100); + VelocityContext vc = st.getVelocityContext(); + String query = st.getQuery(); + negEx.addAll(this.executeResourceQuery(query)); + } + negEx.removeAll(posEx); + return negEx; + + } + + public String getParallelClass(String clazz) throws Exception { + // TODO: use aksw-commons-sparql instead of sparql-scala + // SparqlTemplate st = SparqlTemplate.getInstance("parallelClass.vm"); + // st.setLimit(0); + // VelocityContext vc = st.getVelocityContext(); + // vc.put("class", clazz); + // String query = st.getQuery(); + // Set<String> parClasses = new + // HashSet<String>(ResultSetRenderer.asStringSet(sparqlEndpoint.executeSelect(query))); + // for (String s : parClasses) { + // return s; + // } + SparqlTemplate st = SparqlTemplate.getInstance("parallelClass.vm"); + st.setLimit(0); + VelocityContext vc = st.getVelocityContext(); + vc.put("class", clazz); + String query = st.getQuery(); + Set<String> parClasses = this.executeClassQuery(query); + for (String s : parClasses) { + if (s.startsWith("http://dbpedia.org/ontology")) { + if (!s.endsWith("Unknown")) { + return s; + } + } + } + return null; + } + + public Set<String> executeResourceQuery(String queryString) { + Query query = QueryFactory.create(queryString); + QueryExecution qexec = QueryExecutionFactory.sparqlService(endpointurl, + query); + ResultSet resultSet = qexec.execSelect(); + QuerySolution solution; + Set<String> results = new HashSet<String>(); + while (resultSet.hasNext()) { + solution = resultSet.next(); + results.add(solution.getResource("instances").getURI()); + } + return results; + } + + public Set<String> executeClassQuery(String queryString) { + Query query = QueryFactory.create(queryString); + QueryExecution qexec = QueryExecutionFactory.sparqlService(endpointurl, + query); + ResultSet resultSet = qexec.execSelect(); + QuerySolution solution; + Set<String> results = new HashSet<String>(); + while (resultSet.hasNext()) { + solution = resultSet.next(); + results.add(solution.getResource("sub").getURI()); + } + return results; + } + +} Property changes on: trunk/scripts/src/main/java/org/dllearner/scripts/improveWikipedia/NewSparqlCompDBpediaClassLearnerCELOE.java ___________________________________________________________________ Added: svn:mime-type + text/plain This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dc...@us...> - 2012-07-07 11:34:54
|
Revision: 3775 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3775&view=rev Author: dcherix Date: 2012-07-07 11:34:48 +0000 (Sat, 07 Jul 2012) Log Message: ----------- Bug fix, no mor problem wit nodes without uri Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/utilities/analyse/TypeOntology.java Modified: trunk/components-core/src/main/java/org/dllearner/utilities/analyse/TypeOntology.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/utilities/analyse/TypeOntology.java 2012-07-07 11:33:39 UTC (rev 3774) +++ trunk/components-core/src/main/java/org/dllearner/utilities/analyse/TypeOntology.java 2012-07-07 11:34:48 UTC (rev 3775) @@ -63,8 +63,7 @@ // foreach triple in the model for (Triple triple : triples) { - if(triple.getSubject().isBlank() || triple.getPredicate().isBlank() || triple.getObject().isBlank()){ - System.out.println(triple); + if(!triple.getSubject().isURI() || !triple.getPredicate().isURI() || !triple.getObject().isURI()){ continue; } sUri = triple.getSubject().getURI(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dc...@us...> - 2012-07-07 11:33:45
|
Revision: 3774 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3774&view=rev Author: dcherix Date: 2012-07-07 11:33:39 +0000 (Sat, 07 Jul 2012) Log Message: ----------- Adapted the simple sparql module to abstractknowledgesource Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/QueryExecutor.java trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/SparqlSimpleExtractor.java Modified: trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/QueryExecutor.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/QueryExecutor.java 2012-07-06 08:24:21 UTC (rev 3773) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/QueryExecutor.java 2012-07-07 11:33:39 UTC (rev 3774) @@ -3,42 +3,50 @@ */ package org.dllearner.kb.sparql.simple; -import com.hp.hpl.jena.query.*; -import com.jamonapi.Monitor; -import com.jamonapi.MonitorFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.hp.hpl.jena.ontology.OntModel; +import com.hp.hpl.jena.query.Query; +import com.hp.hpl.jena.query.QueryExecution; +import com.hp.hpl.jena.query.QueryExecutionFactory; +import com.hp.hpl.jena.query.QueryFactory; +import com.hp.hpl.jena.query.QueryParseException; +import com.hp.hpl.jena.shared.JenaException; +import com.jamonapi.Monitor; +import com.jamonapi.MonitorFactory; /** * @author didierc */ public class QueryExecutor { - private static Logger log = LoggerFactory.getLogger(QueryExecutor.class); + private static Logger log = LoggerFactory.getLogger(QueryExecutor.class); + public OntModel executeQuery(String queryString, String endpoint, + OntModel model, String defaultGraphURI) { + Monitor monQueryingTotal = MonitorFactory.start("Query time total") + .start(); + try { + Query query = QueryFactory.create(queryString); + log.debug("Jena Query: ", query); + QueryExecution qExec; + if (defaultGraphURI == null) { + qExec = QueryExecutionFactory.sparqlService(endpoint, query); + } else { + qExec = QueryExecutionFactory.sparqlService(endpoint, query, + defaultGraphURI); + } - public OntModel executeQuery(String queryString, String endpoint, OntModel model, String defaultGraphURI) { - Monitor monQueryingTotal = MonitorFactory.start("Query time total").start(); - try{ - Query query = QueryFactory.create(queryString); - log.debug("Jena Query: ", query); - QueryExecution qExec; - if (defaultGraphURI == null) { - qExec = QueryExecutionFactory.sparqlService(endpoint, query); - - } else { - qExec = QueryExecutionFactory.sparqlService(endpoint, query, defaultGraphURI); - - } - log.debug("Qexec: {}", qExec); - qExec.execConstruct(model); - }catch (QueryParseException e ){ - log.warn("Query failed (skipping):\n" + queryString, e); - } - monQueryingTotal.stop(); - return model; - } + log.debug("Qexec: {}", qExec.getQuery()); + qExec.execConstruct(model); + } catch (QueryParseException e) { + log.warn("Query failed (skipping):\n" + queryString, e); + } catch (JenaException e) { + log.warn("Query failed (skipping):\n" + queryString, e); + } + monQueryingTotal.stop(); + return model; + } } Modified: trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/SparqlSimpleExtractor.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/SparqlSimpleExtractor.java 2012-07-06 08:24:21 UTC (rev 3773) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/SparqlSimpleExtractor.java 2012-07-07 11:33:39 UTC (rev 3774) @@ -1,17 +1,24 @@ package org.dllearner.kb.sparql.simple; +import java.io.File; +import java.net.URI; import java.util.ArrayList; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Set; -import com.hp.hpl.jena.ontology.OntModelSpec; +import org.dllearner.core.AbstractKnowledgeSource; import org.dllearner.core.ComponentAnn; import org.dllearner.core.ComponentInitException; -import org.dllearner.core.KnowledgeSource; +import org.dllearner.core.OntologyFormat; +import org.dllearner.core.OntologyFormatUnsupportedException; import org.dllearner.core.config.ConfigOption; + +import org.dllearner.core.owl.KB; + import org.dllearner.kb.OWLOntologyKnowledgeSource; + import org.dllearner.utilities.JamonMonitorLogger; import org.dllearner.utilities.analyse.TypeOntology; import org.semanticweb.owlapi.model.OWLOntology; @@ -21,19 +28,21 @@ import com.hp.hpl.jena.ontology.OntClass; import com.hp.hpl.jena.ontology.OntModel; +import com.hp.hpl.jena.ontology.OntModelSpec; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.ModelFactory; import com.hp.hpl.jena.rdf.model.NodeIterator; import com.hp.hpl.jena.rdf.model.RDFNode; import com.hp.hpl.jena.rdf.model.ResIterator; import com.hp.hpl.jena.rdf.model.Resource; -import com.hp.hpl.jena.vocabulary.OWL; import com.jamonapi.Monitor; import com.jamonapi.MonitorFactory; @ComponentAnn(name = "efficient SPARQL fragment extractor", shortName = "sparqls", version = 0.1) -public class SparqlSimpleExtractor implements KnowledgeSource, OWLOntologyKnowledgeSource { +public class SparqlSimpleExtractor extends AbstractKnowledgeSource { + + @ConfigOption(name = "endpointURL", description = "URL of the SPARQL endpoint", required = true) private String endpointURL = null; private OntModel model = null; @@ -218,12 +227,12 @@ monIndexing.stop(); monComp.stop(); - log.info("*******Simple SPARQL Extractor********"); - /*for (Monitor monitor : MonitorFactory.getRootMonitor().getMonitors()) { - log.info("* {} *", monitor); - }*/ - log.info(JamonMonitorLogger.getStringForAllSortedByLabel()); - log.info("**************************************"); +// log.info("*******Simple SPARQL Extractor********"); +// /*for (Monitor monitor : MonitorFactory.getRootMonitor().getMonitors()) { +// log.info("* {} *", monitor); +// }*/ +// log.info(JamonMonitorLogger.getStringForAllSortedByLabel()); +// log.info("**************************************"); } public String getEndpointURL() { @@ -302,7 +311,27 @@ this.tboxfilter = tboxfilter; } - @Override + + @Override + public KB toKB() { + // TODO Auto-generated method stub + return null; + } + + @Override + public String toDIG(URI kbURI) { + // TODO Auto-generated method stub + return null; + } + + @Override + public void export(File file, OntologyFormat format) + throws OntologyFormatUnsupportedException { + // TODO Auto-generated method stub + + } + + public OWLOntology createOWLOntology(OWLOntologyManager manager) { JenaToOwlapiConverter converter = new JenaToOwlapiConverter(); return converter.convert(this.model,manager); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ge...@us...> - 2012-07-06 08:24:29
|
Revision: 3773 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3773&view=rev Author: gerbsen Date: 2012-07-06 08:24:21 +0000 (Fri, 06 Jul 2012) Log Message: ----------- code for extracting properties from diadem text and made a change to newer lucene version 3.6 Modified Paths: -------------- trunk/components-ext/pom.xml Added Paths: ----------- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/diadem/ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/diadem/DiademPropertyFinder.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/diadem/Word.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/diadem/WordFrequencyCounter.java Modified: trunk/components-ext/pom.xml =================================================================== --- trunk/components-ext/pom.xml 2012-07-05 07:24:27 UTC (rev 3772) +++ trunk/components-ext/pom.xml 2012-07-06 08:24:21 UTC (rev 3773) @@ -43,6 +43,18 @@ <groupId>org.apache.solr</groupId> <artifactId>solr-core</artifactId> </dependency> + + <dependency> + <groupId>org.apache.lucene</groupId> + <artifactId>lucene-analyzers</artifactId> + <version>3.5.0</version> + </dependency> + + <dependency> + <groupId>org.apache.lucene</groupId> + <artifactId>lucene-core</artifactId> + <version>3.5.0</version> + </dependency> <!--BEGIN Logging Dependencies--> Added: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/diadem/DiademPropertyFinder.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/diadem/DiademPropertyFinder.java (rev 0) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/diadem/DiademPropertyFinder.java 2012-07-06 08:24:21 UTC (rev 3773) @@ -0,0 +1,31 @@ +package org.dllearner.algorithm.tbsl.diadem; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +import org.apache.commons.io.FileUtils; + +import edu.stanford.nlp.util.StringUtils; + +/** + * + */ +public class DiademPropertyFinder { + + /** + * @param args + * @throws IOException + */ + public static void main(String[] args) throws IOException { + + List<String> lines = FileUtils.readLines(new File("/Users/gerb/Development/workspaces/experimental/diadem/descriptions.txt")); + String allDEscriptions = StringUtils.join(lines, " "); + + WordFrequencyCounter wfc = new WordFrequencyCounter(); + for ( Word word : wfc.getKeywordsSortedByFrequency(allDEscriptions)) { + + System.out.println(word.getWord() + ":\t" + word.getFrequency()); + } + } +} Added: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/diadem/Word.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/diadem/Word.java (rev 0) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/diadem/Word.java 2012-07-06 08:24:21 UTC (rev 3773) @@ -0,0 +1,112 @@ +/** + * + */ +package org.dllearner.algorithm.tbsl.diadem; + +/** + * @author Daniel Gerber <dg...@in...> + * + */ +public class Word implements Comparable<Word> { + + public boolean isFromWikipedia() { + + return isFromWikipedia; + } + + private String word; + private int frequency; + private boolean isFromWikipedia; // Is that term extracted from a Wikipedia + // article + + public Word(String word, int frequency, boolean fromWikipedia) { + + isFromWikipedia = fromWikipedia; + this.word = word; + this.frequency = frequency; + } + + public Word(String word, int count) { + + this(word, count, false); + } + + /** + * Increases the total frequency with 1 + * + * @return The new frequency + */ + public int incrementFrequency() { + + return ++frequency; + } + + public int compareTo(Word otherWord) { + + if (this.frequency == otherWord.frequency) { + return this.word.compareTo(otherWord.word); + } + return otherWord.frequency - this.frequency; + } + + public String getWord() { + + return word; + } + + public int getFrequency() { + + return frequency; + } + + @Override + public String toString() { + + return word; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + + final int prime = 31; + int result = 1; + result = prime * result + ((word == null) ? 0 : word.hashCode()); + return result; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) { + + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Word other = (Word) obj; + if (word == null) { + if (other.word != null) + return false; + } + else + if (!word.equals(other.word)) + return false; + return true; + } + + public Word setFrequency(int i) { + + this.frequency = i; + return this; + } +} Added: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/diadem/WordFrequencyCounter.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/diadem/WordFrequencyCounter.java (rev 0) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/diadem/WordFrequencyCounter.java 2012-07-06 08:24:21 UTC (rev 3773) @@ -0,0 +1,82 @@ +package org.dllearner.algorithm.tbsl.diadem; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; + +import org.apache.lucene.analysis.TokenStream; +import org.apache.lucene.analysis.miscellaneous.PatternAnalyzer; +import org.apache.lucene.analysis.ngram.NGramTokenFilter; +import org.apache.lucene.analysis.shingle.ShingleFilter; +import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; + +/** + * + * @author Daniel Gerber <dg...@in...> + * + */ +public class WordFrequencyCounter { + + private List<String> stopwords = new ArrayList<String>(); + public WordFrequencyCounter(){ + +// stopwords.addAll(Arrays.asList()); + } + + /** + * + * @param inputWords + * @return + */ + public ArrayList<Word> getKeywordsSortedByFrequency(String inputWords){ + + PatternAnalyzer keywordAnalyzer = PatternAnalyzer.EXTENDED_ANALYZER; + TokenStream pageTokens = keywordAnalyzer.tokenStream("", inputWords); + CharTermAttribute charTermAttribute = pageTokens.getAttribute(CharTermAttribute.class); + ArrayList<String> tokens = new ArrayList<String>(1000); + + ShingleFilter filter = new ShingleFilter(pageTokens, 2, 3); + + try{ + + while (filter.incrementToken()) { + + // we need to filter these stop words, mostly references in wikipedia + String token = charTermAttribute.toString(); + if ( token.length() > 2 && !stopwords.contains(token) ) tokens.add(token.trim()); + } + } + catch (IOException exp){ + + exp.printStackTrace(); + } + + HashMap<String,Word> map = new HashMap<String,Word>(); + for(String token : tokens){ + + Word word = map.get(token); + if ( word == null ) { + + word = new Word(token,1); + map.put(token, word); + } + else word.incrementFrequency(); + } + // sort the values by there frequency and return them + ArrayList<Word> sortedKeywordList = new ArrayList<Word>(map.values()); + Collections.sort(sortedKeywordList); + + Iterator<Word> wordsIterator = sortedKeywordList.iterator(); + while ( wordsIterator.hasNext() ) { + + Word word = wordsIterator.next(); + if ( word.getFrequency() <= 10 ) wordsIterator.remove(); + } + + return sortedKeywordList; + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2012-07-05 07:24:36
|
Revision: 3772 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3772&view=rev Author: lorenz_b Date: 2012-07-05 07:24:27 +0000 (Thu, 05 Jul 2012) Log Message: ----------- Removed old class. Modified Paths: -------------- trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java Modified: trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java 2012-07-04 15:42:53 UTC (rev 3771) +++ trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java 2012-07-05 07:24:27 UTC (rev 3772) @@ -39,8 +39,8 @@ import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.SimpleLayout; -import org.dllearner.algorithm.qtl.util.ModelGenerator; -import org.dllearner.algorithm.qtl.util.ModelGenerator.Strategy; +import org.dllearner.common.index.ModelGenerator; +import org.dllearner.common.index.ModelGenerator.Strategy; import org.dllearner.kb.sparql.ConciseBoundedDescriptionGenerator; import org.dllearner.kb.sparql.ConciseBoundedDescriptionGeneratorImpl; import org.dllearner.kb.sparql.ExtractionDBCache; @@ -258,10 +258,10 @@ private OWLOntology extractSampleModule(Set<String> resources){ logger.info("Extracting sample module..."); long startTime = System.currentTimeMillis(); - ModelGenerator modelGen = new ModelGenerator(endpoint, cache); + ConciseBoundedDescriptionGenerator cbdGen = new ConciseBoundedDescriptionGeneratorImpl(endpoint, cache); Model model = ModelFactory.createDefaultModel(); for(String resource : resources){ - model.add(modelGen.createModel(resource, Strategy.CHUNKS, depth)); + model.add(cbdGen.getConciseBoundedDescription(resource, depth)); } logger.info("...done in " + (System.currentTimeMillis()-startTime) + "ms."); return convert(model); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2012-07-04 15:43:01
|
Revision: 3771 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3771&view=rev Author: christinaunger Date: 2012-07-04 15:42:53 +0000 (Wed, 04 Jul 2012) Log Message: ----------- [tbsl] Added support for "or" (translated as UNION). This still needs to be tested for complex questions. Modified Paths: -------------- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/converter/DRS2SPARQL_Converter.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/Complex_DRS_Condition.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/DRS.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/DRS_Condition.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/Negated_DRS.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/Simple_DRS_Condition.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/reader/DRSParser.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/reader/DRSParser.jj trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/reader/DRSParserConstants.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/reader/DRSParserTokenManager.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/dudes/data/Argument.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/dudes/data/Dude.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/dudes/reader/DUDE_Parser.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/dudes/reader/DUDE_Parser.jj trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/dudes/reader/DUDE_ParserConstants.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/dudes/reader/DUDE_ParserTokenManager.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/util/CompositeType.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/util/DominanceConstraint.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/util/ElementaryType.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/util/Label.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/util/Type.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sparql/Query.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sparql/SPARQL_Triple.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sparql/Slot.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/templator/Templator.java trunk/components-ext/src/main/resources/tbsl/lexicon/english.lex Added Paths: ----------- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sparql/SPARQL_Union.java Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/converter/DRS2SPARQL_Converter.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/converter/DRS2SPARQL_Converter.java 2012-07-03 14:16:28 UTC (rev 3770) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/converter/DRS2SPARQL_Converter.java 2012-07-04 15:42:53 UTC (rev 3771) @@ -9,20 +9,7 @@ import org.dllearner.algorithm.tbsl.sem.drs.DiscourseReferent; import org.dllearner.algorithm.tbsl.sem.drs.Negated_DRS; import org.dllearner.algorithm.tbsl.sem.drs.Simple_DRS_Condition; -import org.dllearner.algorithm.tbsl.sparql.Query; -import org.dllearner.algorithm.tbsl.sparql.SPARQL_Aggregate; -import org.dllearner.algorithm.tbsl.sparql.SPARQL_Filter; -import org.dllearner.algorithm.tbsl.sparql.SPARQL_OrderBy; -import org.dllearner.algorithm.tbsl.sparql.SPARQL_Pair; -import org.dllearner.algorithm.tbsl.sparql.SPARQL_PairType; -import org.dllearner.algorithm.tbsl.sparql.SPARQL_Prefix; -import org.dllearner.algorithm.tbsl.sparql.SPARQL_Property; -import org.dllearner.algorithm.tbsl.sparql.SPARQL_QueryType; -import org.dllearner.algorithm.tbsl.sparql.SPARQL_Term; -import org.dllearner.algorithm.tbsl.sparql.SPARQL_Triple; -import org.dllearner.algorithm.tbsl.sparql.Slot; -import org.dllearner.algorithm.tbsl.sparql.SlotType; -import org.dllearner.algorithm.tbsl.sparql.Template; +import org.dllearner.algorithm.tbsl.sparql.*; public class DRS2SPARQL_Converter { @@ -133,7 +120,7 @@ Set<SPARQL_Triple> statements = new HashSet<SPARQL_Triple>(); for (DRS_Condition condition : drs.getConditions()) { - Set<SPARQL_Triple> scondition = convertCondition(condition, query).getConditions(); + Set<SPARQL_Triple> scondition = convertCondition(condition,query,false).getConditions(); statements.addAll(scondition); if (negate) { for (int i = 0; i < scondition.size(); ++i) { @@ -155,71 +142,100 @@ return query; } - private Query convertCondition(DRS_Condition condition, Query query) { + private Query convertCondition(DRS_Condition condition, Query query, boolean unionMode) { + + Query out; + if (unionMode) out = new Query(); + else out = query; + if (condition.isComplexCondition()) { - if (!isSilent()) { - System.out.print("|complex:" + condition.toString()); - } + if (!isSilent()) System.out.print("|complex:" + condition.toString()); + Complex_DRS_Condition complex = (Complex_DRS_Condition) condition; DRS restrictor = complex.getRestrictor(); DRS_Quantifier quant = complex.getQuantifier(); DRS scope = complex.getScope(); - // call recursively - for (DRS_Condition cond : restrictor.getConditions()) { - query = convertCondition(cond, query); + if (quant.equals(DRS_Quantifier.OR)) { + Set<SPARQL_Triple> conds_res = new HashSet<SPARQL_Triple>(); + Set<SPARQL_Triple> conds_scope = new HashSet<SPARQL_Triple>(); + Set<SPARQL_Filter> filter_res = new HashSet<SPARQL_Filter>(); + Set<SPARQL_Filter> filter_scope = new HashSet<SPARQL_Filter>(); + // call recursively + Query dummy; + for (DRS_Condition cond : restrictor.getConditions()) { + dummy = convertCondition(cond,out,true); + conds_res.addAll(dummy.getConditions()); + filter_res.addAll(dummy.getFilters()); + query.getPrefixes().addAll(dummy.getPrefixes()); + } + for (DRS_Condition cond : scope.getConditions()) { + dummy = convertCondition(cond,out,true); + conds_scope.addAll(dummy.getConditions()); + filter_scope.addAll(dummy.getFilters()); + query.getPrefixes().addAll(dummy.getPrefixes()); + } + query.addUnion(new SPARQL_Union(conds_res,filter_res,conds_scope,filter_scope)); + // TODO also inherit order by, limit, offset, and so on? + return query; + } + else { + // call recursively + for (DRS_Condition cond : restrictor.getConditions()) { + out = convertCondition(cond,out,false); + } + for (DRS_Condition cond : scope.getConditions()) { + out = convertCondition(cond,out,false); + } + + // add the quantifier at last + DiscourseReferent ref = complex.getReferent(); + String sref = ref.getValue(); + String fresh; + if (!isSilent()) System.out.print("|quantor:" + quant); + + switch (quant) { + case HOWMANY: + out.addSelTerm(new SPARQL_Term(sref, SPARQL_Aggregate.COUNT)); + break; + case EVERY: + // probably save to ignore // TODO unless in cases like "which actor starred in every movie by spielberg?" + // query.addFilter(new SPARQL_Filter(new SPARQL_Term(sref))); + break; + case NO: + SPARQL_Filter f = new SPARQL_Filter(); + f.addNotBound(new SPARQL_Term(sref)); + out.addFilter(f); + break; + case FEW: // + break; + case MANY: // + break; + case MOST: // + break; + case SOME: // + break; + case THELEAST: + fresh = "c"+createFresh(); + out.addSelTerm(new SPARQL_Term(sref, SPARQL_Aggregate.COUNT,fresh)); + out.addOrderBy(new SPARQL_Term(fresh, SPARQL_OrderBy.ASC)); + out.setLimit(1); + break; + case THEMOST: + fresh = "c"+createFresh(); + out.addSelTerm(new SPARQL_Term(sref, SPARQL_Aggregate.COUNT,fresh)); + out.addOrderBy(new SPARQL_Term(fresh, SPARQL_OrderBy.DESC)); + out.setLimit(1); + break; + } } - for (DRS_Condition cond : scope.getConditions()) { - query = convertCondition(cond, query); - } - // add the quantifier at last - DiscourseReferent ref = complex.getReferent(); - String sref = ref.getValue(); - String fresh; - if (!isSilent()) { - System.out.print("|quantor:" + quant); - } - switch (quant) { - case HOWMANY: - query.addSelTerm(new SPARQL_Term(sref, SPARQL_Aggregate.COUNT)); - break; - case EVERY: - // probably save to ignore // TODO unless in cases like "which actor starred in every movie by spielberg?" - // query.addFilter(new SPARQL_Filter(new SPARQL_Term(sref))); - break; - case NO: - SPARQL_Filter f = new SPARQL_Filter(); - f.addNotBound(new SPARQL_Term(sref)); - query.addFilter(f); - break; - case FEW: // - break; - case MANY: // - break; - case MOST: // - break; - case SOME: // - break; - case THELEAST: - fresh = "c"+createFresh(); - query.addSelTerm(new SPARQL_Term(sref, SPARQL_Aggregate.COUNT,fresh)); - query.addOrderBy(new SPARQL_Term(fresh, SPARQL_OrderBy.ASC)); - query.setLimit(1); - break; - case THEMOST: - fresh = "c"+createFresh(); - query.addSelTerm(new SPARQL_Term(sref, SPARQL_Aggregate.COUNT,fresh)); - query.addOrderBy(new SPARQL_Term(fresh, SPARQL_OrderBy.DESC)); - query.setLimit(1); - break; - } } else if (condition.isNegatedCondition()) { if (!isSilent()) { System.out.print("|negation:" + condition.toString()); } Negated_DRS neg = (Negated_DRS) condition; - query = convert(neg.getDRS(), query, true); + out = convert(neg.getDRS(), out, true); } else { Simple_DRS_Condition simple = (Simple_DRS_Condition) condition; @@ -256,74 +272,74 @@ // COUNT(?x) AS ?c if (simple.getArguments().get(1).getValue().matches("[0-9]+")) { String fresh = "v"+createFresh(); - query.addSelTerm(new SPARQL_Term(simple.getArguments().get(0).getValue(), SPARQL_Aggregate.COUNT, fresh)); - query.addFilter(new SPARQL_Filter( + out.addSelTerm(new SPARQL_Term(simple.getArguments().get(0).getValue(), SPARQL_Aggregate.COUNT, fresh)); + out.addFilter(new SPARQL_Filter( new SPARQL_Pair( new SPARQL_Term(fresh,false), new SPARQL_Term(simple.getArguments().get(1).getValue(),literal), SPARQL_PairType.EQ))); } else { - query.addSelTerm(new SPARQL_Term(simple.getArguments().get(0).getValue(), SPARQL_Aggregate.COUNT, simple.getArguments().get(1).getValue())); + out.addSelTerm(new SPARQL_Term(simple.getArguments().get(0).getValue(), SPARQL_Aggregate.COUNT, simple.getArguments().get(1).getValue())); } - return query; + return out; } else if (predicate.equals("sum")) { - query.addSelTerm(new SPARQL_Term(simple.getArguments().get(1).getValue(), SPARQL_Aggregate.SUM)); - return query; + out.addSelTerm(new SPARQL_Term(simple.getArguments().get(1).getValue(), SPARQL_Aggregate.SUM)); + return out; } else if (predicate.equals("greater")) { - query.addFilter(new SPARQL_Filter( + out.addFilter(new SPARQL_Filter( new SPARQL_Pair( new SPARQL_Term(simple.getArguments().get(0).getValue(),false), new SPARQL_Term(simple.getArguments().get(1).getValue(),literal), SPARQL_PairType.GT))); - return query; + return out; } else if (predicate.equals("greaterorequal")) { - query.addFilter(new SPARQL_Filter( + out.addFilter(new SPARQL_Filter( new SPARQL_Pair( new SPARQL_Term(simple.getArguments().get(0).getValue(),false), new SPARQL_Term(simple.getArguments().get(1).getValue(),literal), SPARQL_PairType.GTEQ))); - return query; + return out; } else if (predicate.equals("less")) { - query.addFilter(new SPARQL_Filter( + out.addFilter(new SPARQL_Filter( new SPARQL_Pair( new SPARQL_Term(simple.getArguments().get(0).getValue(),false), new SPARQL_Term(simple.getArguments().get(1).getValue(),literal), SPARQL_PairType.LT))); - return query; + return out; } else if (predicate.equals("lessorequal")) { - query.addFilter(new SPARQL_Filter( + out.addFilter(new SPARQL_Filter( new SPARQL_Pair( new SPARQL_Term(simple.getArguments().get(0).getValue(),false), new SPARQL_Term(simple.getArguments().get(1).getValue(),literal), SPARQL_PairType.LTEQ))); - return query; + return out; } else if (predicate.equals("maximum")) { // query.addSelTerm(new SPARQL_Term(simple.getArguments().get(0).getValue(),false)); - query.addOrderBy(new SPARQL_Term(simple.getArguments().get(0).getValue(), SPARQL_OrderBy.DESC)); - query.setLimit(1); - return query; + out.addOrderBy(new SPARQL_Term(simple.getArguments().get(0).getValue(), SPARQL_OrderBy.DESC)); + out.setLimit(1); + return out; } else if (predicate.equals("minimum")) { - query.addSelTerm(new SPARQL_Term(simple.getArguments().get(0).getValue(),false)); - query.addOrderBy(new SPARQL_Term(simple.getArguments().get(0).getValue(), SPARQL_OrderBy.ASC)); - query.setLimit(1); - return query; + out.addSelTerm(new SPARQL_Term(simple.getArguments().get(0).getValue(),false)); + out.addOrderBy(new SPARQL_Term(simple.getArguments().get(0).getValue(), SPARQL_OrderBy.ASC)); + out.setLimit(1); + return out; } else if (predicate.equals("equal")) { - query.addFilter(new SPARQL_Filter( + out.addFilter(new SPARQL_Filter( new SPARQL_Pair( new SPARQL_Term(simple.getArguments().get(0).getValue(),true), new SPARQL_Term(simple.getArguments().get(1).getValue(),literal), SPARQL_PairType.EQ))); - return query; + return out; } else if (predicate.equals("DATE")) { - query.addFilter(new SPARQL_Filter( + out.addFilter(new SPARQL_Filter( new SPARQL_Pair( new SPARQL_Term(simple.getArguments().get(0).getValue(),false), new SPARQL_Term("'^"+simple.getArguments().get(1).getValue()+"'",true), SPARQL_PairType.REGEX))); } else if (predicate.equals("regex")) { - query.addFilter(new SPARQL_Filter( + out.addFilter(new SPARQL_Filter( new SPARQL_Pair( new SPARQL_Term(simple.getArguments().get(0).getValue(),false), new SPARQL_Term(simple.getArguments().get(1).getValue().replace("_","").trim(),true), @@ -332,12 +348,12 @@ else { if (arity == 1) { SPARQL_Term term = new SPARQL_Term(simple.getArguments().get(0).getValue(),false);term.setIsVariable(true); - query.addCondition(new SPARQL_Triple(term,new SPARQL_Property("type",new SPARQL_Prefix("rdf","")),prop)); + out.addCondition(new SPARQL_Triple(term,new SPARQL_Property("type",new SPARQL_Prefix("rdf","")),prop)); } else if (arity == 2) { String arg1 = simple.getArguments().get(0).getValue();SPARQL_Term term1 = new SPARQL_Term(arg1,false);term1.setIsVariable(true); String arg2 = simple.getArguments().get(1).getValue();SPARQL_Term term2 = new SPARQL_Term(arg2,false);term2.setIsVariable(true); - query.addCondition(new SPARQL_Triple(term1, prop, term2)); + out.addCondition(new SPARQL_Triple(term1, prop, term2)); } else if (arity > 2) { // TODO @@ -349,7 +365,7 @@ if (oxford) { Hashtable<String,Integer> vs = new Hashtable<String,Integer>(); String v1; String v2; - for (SPARQL_Triple c : query.getConditions()) { + for (SPARQL_Triple c : out.getConditions()) { v1 = c.getVariable().toString().replace("?",""); v2 = c.getValue().toString().replace("?",""); // is it a slot variable? @@ -379,11 +395,11 @@ if (maxvar != null) { SPARQL_Term term = new SPARQL_Term(maxvar); term.setIsVariable(true); - query.addSelTerm(term); + out.addSelTerm(term); } } - return query; + return out; } public void redundantEqualRenaming(DRS drs) { Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/Complex_DRS_Condition.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/Complex_DRS_Condition.java 2012-07-03 14:16:28 UTC (rev 3770) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/Complex_DRS_Condition.java 2012-07-04 15:42:53 UTC (rev 3771) @@ -25,8 +25,7 @@ } // full constructors - public Complex_DRS_Condition(DRS_Quantifier quantifier, - DiscourseReferent referent, DRS restrictor, DRS scope) { + public Complex_DRS_Condition(DRS_Quantifier quantifier,DiscourseReferent referent, DRS restrictor, DRS scope) { m_Quantifier = quantifier; m_Referent = referent; m_Restrictor = restrictor; @@ -71,10 +70,20 @@ public String toString() { - return m_Restrictor + " " + m_Quantifier + " " + m_Referent + " " - + m_Scope + "\n"; + String out = m_Restrictor + " " + m_Quantifier + " "; + if (!m_Referent.m_Referent.equals("null")) out += m_Referent + " "; + out += m_Scope + "\n"; + return out; } + public String toTex() { + + String out = m_Restrictor.toTex() + " \\langle " + m_Quantifier + " "; + if (!m_Referent.m_Referent.equals("null")) out += m_Referent; + out += " \\rangle " + m_Scope.toTex(); + + return out; + } public void replaceLabel(Label label1, Label label2) { m_Restrictor.replaceLabel(label1, label2); @@ -100,7 +109,7 @@ Set<String> variables = new HashSet<String>(); - variables.add(m_Referent.m_Referent); + if (!m_Referent.m_Referent.equals("null")) variables.add(m_Referent.m_Referent); variables.addAll(m_Restrictor.collectVariables()); variables.addAll(m_Scope.collectVariables()); @@ -117,8 +126,8 @@ public List<Label> getAllLabels() { List<Label> result = new ArrayList<Label>(); - result.add(m_Restrictor.getLabel()); - result.add(m_Scope.getLabel()); + result.addAll(m_Restrictor.getAllLabels()); + result.addAll(m_Scope.getAllLabels()); return result; } @@ -137,8 +146,7 @@ } public DRS_Condition clone() { - return (new Complex_DRS_Condition(m_Quantifier, m_Referent, - m_Restrictor.clone(), m_Scope.clone())); + return (new Complex_DRS_Condition(m_Quantifier, m_Referent, m_Restrictor.clone(), m_Scope.clone())); } @Override Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/DRS.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/DRS.java 2012-07-03 14:16:28 UTC (rev 3770) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/DRS.java 2012-07-04 15:42:53 UTC (rev 3771) @@ -110,6 +110,25 @@ return string; } + public String toTex() { + + String string =""; + if (m_Label != null) string = string += m_Label.toTex() + ":"; + string += "\\parbox{5cm}{\\Drs{"; + + for (Iterator<DiscourseReferent> i = m_DiscourseReferents.iterator(); i.hasNext();) { + string += i.next().toString(); + if (i.hasNext()) string += ","; + } + string += "}{"; + + for (DRS_Condition cond : m_DRS_Conditions) { + string += cond.toTex() + " \\\\ "; + } + string+= "}}"; + + return string; + } public Label getLabel() { Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/DRS_Condition.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/DRS_Condition.java 2012-07-03 14:16:28 UTC (rev 3770) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/DRS_Condition.java 2012-07-04 15:42:53 UTC (rev 3771) @@ -13,6 +13,7 @@ // iii) a complex condition public String toString(); + public String toTex(); public void replaceReferent(String ref1, String ref2); public void replaceEqualRef(DiscourseReferent dr1, DiscourseReferent dr2, boolean isInUpperUniverse); Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/Negated_DRS.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/Negated_DRS.java 2012-07-03 14:16:28 UTC (rev 3770) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/Negated_DRS.java 2012-07-04 15:42:53 UTC (rev 3771) @@ -36,6 +36,9 @@ { return "NOT "+m_DRS; } + public String toTex() { + return "\\lnot "+m_DRS.toTex(); + } public void replaceLabel(Label label1, Label label2) { m_DRS.replaceLabel(label1, label2); Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/Simple_DRS_Condition.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/Simple_DRS_Condition.java 2012-07-03 14:16:28 UTC (rev 3770) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/Simple_DRS_Condition.java 2012-07-04 15:42:53 UTC (rev 3771) @@ -1,10 +1,6 @@ package org.dllearner.algorithm.tbsl.sem.drs; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; import org.dllearner.algorithm.tbsl.sem.util.Label; @@ -45,6 +41,15 @@ return m_Predicate+string; } + public String toTex() { + String out = "\\text{"+m_Predicate.replaceAll("\\_","\\\\_")+"}("; + for (Iterator<DiscourseReferent> i = m_Arguments.iterator(); i.hasNext();) { + out += i.next().toString(); + if (i.hasNext()) out += ","; + } + out += ")"; + return out; + } // get methods Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/reader/DRSParser.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/reader/DRSParser.java 2012-07-03 14:16:28 UTC (rev 3770) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/reader/DRSParser.java 2012-07-04 15:42:53 UTC (rev 3771) @@ -120,12 +120,12 @@ List<DiscourseReferent> dr_list; Token dr1; Token dr2; - Token dr; + Token dr = null; Token predicate; Token quantifier; DRS drs1; DRS drs2; - if (jj_2_15(2)) { + if (jj_2_17(2)) { predicate = word(); jj_consume_token(6); dr_list = DR_List(); @@ -136,7 +136,7 @@ condition.setPredicate(predicate.toString()); condition.setArguments(dr_list); {if (true) return condition;} - } else if (jj_2_16(2)) { + } else if (jj_2_18(2)) { dr1 = dr(); jj_consume_token(8); dr2 = dr(); @@ -147,13 +147,13 @@ condition.addArgument(new DiscourseReferent(dr1.toString())); condition.addArgument(new DiscourseReferent(dr2.toString())); {if (true) return condition;} - } else if (jj_2_17(2)) { + } else if (jj_2_19(2)) { jj_consume_token(9); drs1 = DRS(); Negated_DRS drs = new Negated_DRS(); drs.setDRS(drs1); {if (true) return drs;} - } else if (jj_2_18(2)) { + } else if (jj_2_20(2)) { drs1 = DRS(); if (jj_2_6(2)) { quantifier = jj_consume_token(EVERY); @@ -173,17 +173,24 @@ quantifier = jj_consume_token(MANY); } else if (jj_2_14(2)) { quantifier = jj_consume_token(NO); + } else if (jj_2_15(2)) { + quantifier = jj_consume_token(OR); } else { jj_consume_token(-1); throw new ParseException(); } - dr = dr(); + if (jj_2_16(2)) { + dr = dr(); + } else { + ; + } drs2 = DRS(); - Complex_DRS_Condition drs; + Complex_DRS_Condition drs; drs = new Complex_DRS_Condition(); - drs.setRestrictor(drs1); + drs.setRestrictor(drs1); drs.setScope(drs2); - drs.setReferent(new DiscourseReferent(dr.toString())); + if (dr != null) drs.setReferent(new DiscourseReferent(dr.toString())); + else drs.setReferent(new DiscourseReferent("null")); if (quantifier.toString().equals("EVERY")) {drs.setQuantifier(DRS_Quantifier.EVERY);} if (quantifier.toString().equals("SOME")) {drs.setQuantifier(DRS_Quantifier.SOME);} @@ -209,7 +216,7 @@ Token dr; List<DiscourseReferent> dr_list=null; dr = dr(); - if (jj_2_19(2)) { + if (jj_2_21(2)) { jj_consume_token(5); dr_list = DR_List(); } else { @@ -236,9 +243,9 @@ final public Token dr() throws ParseException { Token t; - if (jj_2_20(2)) { + if (jj_2_22(2)) { t = jj_consume_token(A); - } else if (jj_2_21(2)) { + } else if (jj_2_23(2)) { t = jj_consume_token(C); } else { jj_consume_token(-1); @@ -250,9 +257,9 @@ final public Token word() throws ParseException { Token t; - if (jj_2_22(2)) { + if (jj_2_24(2)) { t = jj_consume_token(A); - } else if (jj_2_23(2)) { + } else if (jj_2_25(2)) { t = jj_consume_token(B); } else { jj_consume_token(-1); @@ -423,12 +430,26 @@ finally { jj_save(22, xla); } } + private boolean jj_2_24(int xla) { + jj_la = xla; jj_lastpos = jj_scanpos = token; + try { return !jj_3_24(); } + catch(LookaheadSuccess ls) { return true; } + finally { jj_save(23, xla); } + } + + private boolean jj_2_25(int xla) { + jj_la = xla; jj_lastpos = jj_scanpos = token; + try { return !jj_3_25(); } + catch(LookaheadSuccess ls) { return true; } + finally { jj_save(24, xla); } + } + private boolean jj_3_2() { if (jj_3R_1()) return true; return false; } - private boolean jj_3_18() { + private boolean jj_3_20() { if (jj_3R_5()) return true; return false; } @@ -438,13 +459,18 @@ return false; } - private boolean jj_3_19() { + private boolean jj_3_16() { + if (jj_3R_3()) return true; + return false; + } + + private boolean jj_3_21() { if (jj_scan_token(5)) return true; if (jj_3R_6()) return true; return false; } - private boolean jj_3_17() { + private boolean jj_3_19() { if (jj_scan_token(9)) return true; if (jj_3R_5()) return true; return false; @@ -466,7 +492,7 @@ } private boolean jj_3R_6() { - if (jj_3R_4()) return true; + if (jj_3R_3()) return true; return false; } @@ -475,6 +501,11 @@ return false; } + private boolean jj_3_15() { + if (jj_scan_token(OR)) return true; + return false; + } + private boolean jj_3_1() { if (jj_scan_token(LABEL)) return true; if (jj_scan_token(1)) return true; @@ -497,8 +528,13 @@ return false; } - private boolean jj_3_16() { - if (jj_3R_4()) return true; + private boolean jj_3_25() { + if (jj_scan_token(B)) return true; + return false; + } + + private boolean jj_3_18() { + if (jj_3R_3()) return true; if (jj_scan_token(8)) return true; return false; } @@ -509,11 +545,6 @@ } private boolean jj_3_23() { - if (jj_scan_token(B)) return true; - return false; - } - - private boolean jj_3_21() { if (jj_scan_token(C)) return true; return false; } @@ -524,6 +555,21 @@ return false; } + private boolean jj_3_24() { + if (jj_scan_token(A)) return true; + return false; + } + + private boolean jj_3R_4() { + Token xsp; + xsp = jj_scanpos; + if (jj_3_24()) { + jj_scanpos = xsp; + if (jj_3_25()) return true; + } + return false; + } + private boolean jj_3_22() { if (jj_scan_token(A)) return true; return false; @@ -537,13 +583,13 @@ private boolean jj_3R_7() { Token xsp; xsp = jj_scanpos; - if (jj_3_15()) { + if (jj_3_17()) { jj_scanpos = xsp; - if (jj_3_16()) { + if (jj_3_18()) { jj_scanpos = xsp; - if (jj_3_17()) { + if (jj_3_19()) { jj_scanpos = xsp; - if (jj_3_18()) return true; + if (jj_3_20()) return true; } } } @@ -560,8 +606,8 @@ return false; } - private boolean jj_3_15() { - if (jj_3R_3()) return true; + private boolean jj_3_17() { + if (jj_3R_4()) return true; if (jj_scan_token(6)) return true; return false; } @@ -577,28 +623,13 @@ return false; } - private boolean jj_3_20() { - if (jj_scan_token(A)) return true; - return false; - } - - private boolean jj_3R_4() { - Token xsp; - xsp = jj_scanpos; - if (jj_3_20()) { - jj_scanpos = xsp; - if (jj_3_21()) return true; - } - return false; - } - private boolean jj_3_14() { if (jj_scan_token(NO)) return true; return false; } private boolean jj_3R_1() { - if (jj_3R_4()) return true; + if (jj_3R_3()) return true; Token xsp; xsp = jj_scanpos; if (jj_3_4()) jj_scanpos = xsp; @@ -629,7 +660,7 @@ private static void jj_la1_init_0() { jj_la1_0 = new int[] {}; } - final private JJCalls[] jj_2_rtns = new JJCalls[23]; + final private JJCalls[] jj_2_rtns = new JJCalls[25]; private boolean jj_rescan = false; private int jj_gc = 0; @@ -813,7 +844,7 @@ /** Generate ParseException. */ public ParseException generateParseException() { jj_expentries.clear(); - boolean[] la1tokens = new boolean[28]; + boolean[] la1tokens = new boolean[29]; if (jj_kind >= 0) { la1tokens[jj_kind] = true; jj_kind = -1; @@ -827,7 +858,7 @@ } } } - for (int i = 0; i < 28; i++) { + for (int i = 0; i < 29; i++) { if (la1tokens[i]) { jj_expentry = new int[1]; jj_expentry[0] = i; @@ -854,7 +885,7 @@ private void jj_rescan_token() { jj_rescan = true; - for (int i = 0; i < 23; i++) { + for (int i = 0; i < 25; i++) { try { JJCalls p = jj_2_rtns[i]; do { @@ -884,6 +915,8 @@ case 20: jj_3_21(); break; case 21: jj_3_22(); break; case 22: jj_3_23(); break; + case 23: jj_3_24(); break; + case 24: jj_3_25(); break; } } p = p.next; Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/reader/DRSParser.jj =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/reader/DRSParser.jj 2012-07-03 14:16:28 UTC (rev 3770) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/reader/DRSParser.jj 2012-07-04 15:42:53 UTC (rev 3771) @@ -131,7 +131,7 @@ List<DiscourseReferent> dr_list; Token dr1; Token dr2; - Token dr; + Token dr = null; Token predicate; Token quantifier; DRS drs1; @@ -174,13 +174,14 @@ | drs1=DRS() (quantifier=<EVERY> | quantifier=<SOME> | quantifier=<AFEW> | quantifier=<MOST> | quantifier=<THEMOST> | quantifier=<THELEAST> | - quantifier=<HOWMANY> | quantifier=<MANY> | quantifier=<NO>) dr=dr() drs2=DRS() + quantifier=<HOWMANY> | quantifier=<MANY> | quantifier=<NO> | quantifier=<OR>) (dr=dr())? drs2=DRS() { - Complex_DRS_Condition drs; + Complex_DRS_Condition drs; drs = new Complex_DRS_Condition(); - drs.setRestrictor(drs1); + drs.setRestrictor(drs1); drs.setScope(drs2); - drs.setReferent(new DiscourseReferent(dr.toString())); + if (dr != null) drs.setReferent(new DiscourseReferent(dr.toString())); + else drs.setReferent(new DiscourseReferent("null")); if (quantifier.toString().equals("EVERY")) {drs.setQuantifier(DRS_Quantifier.EVERY);} if (quantifier.toString().equals("SOME")) {drs.setQuantifier(DRS_Quantifier.SOME);} @@ -243,6 +244,8 @@ TOKEN: {<NO: "NO">} +TOKEN: {<OR: "OR">} + TOKEN: {<HOWMANY: "HOWMANY">} TOKEN: {<LABEL: "l"(["0"-"9"])+>} Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/reader/DRSParserConstants.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/reader/DRSParserConstants.java 2012-07-03 14:16:28 UTC (rev 3770) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/reader/DRSParserConstants.java 2012-07-04 15:42:53 UTC (rev 3771) @@ -27,17 +27,19 @@ /** RegularExpression Id. */ int NO = 17; /** RegularExpression Id. */ - int HOWMANY = 18; + int OR = 18; /** RegularExpression Id. */ - int LABEL = 19; + int HOWMANY = 19; /** RegularExpression Id. */ - int A = 20; + int LABEL = 20; /** RegularExpression Id. */ - int B = 21; + int A = 21; /** RegularExpression Id. */ - int C = 22; + int B = 22; /** RegularExpression Id. */ - int QUOTED_STRING = 23; + int C = 23; + /** RegularExpression Id. */ + int QUOTED_STRING = 24; /** Lexical state. */ int DEFAULT = 0; @@ -62,6 +64,7 @@ "\"AFEW\"", "\"MANY\"", "\"NO\"", + "\"OR\"", "\"HOWMANY\"", "<LABEL>", "<A>", Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/reader/DRSParserTokenManager.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/reader/DRSParserTokenManager.java 2012-07-03 14:16:28 UTC (rev 3770) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/reader/DRSParserTokenManager.java 2012-07-04 15:42:53 UTC (rev 3771) @@ -20,29 +20,29 @@ switch (pos) { case 0: - if ((active0 & 0x7fe00L) != 0L) + if ((active0 & 0xffe00L) != 0L) { - jjmatchedKind = 20; + jjmatchedKind = 21; return 4; } return -1; case 1: - if ((active0 & 0x5fc00L) != 0L) + if ((active0 & 0x9fc00L) != 0L) { if (jjmatchedPos != 1) { - jjmatchedKind = 20; + jjmatchedKind = 21; jjmatchedPos = 1; } return 4; } - if ((active0 & 0x20200L) != 0L) + if ((active0 & 0x60200L) != 0L) return 4; return -1; case 2: - if ((active0 & 0x5fc00L) != 0L) + if ((active0 & 0x9fc00L) != 0L) { - jjmatchedKind = 20; + jjmatchedKind = 21; jjmatchedPos = 2; return 4; } @@ -52,9 +52,9 @@ case 3: if ((active0 & 0x19800L) != 0L) return 4; - if ((active0 & 0x46400L) != 0L) + if ((active0 & 0x86400L) != 0L) { - jjmatchedKind = 20; + jjmatchedKind = 21; jjmatchedPos = 3; return 4; } @@ -62,27 +62,27 @@ case 4: if ((active0 & 0x400L) != 0L) return 4; - if ((active0 & 0x46000L) != 0L) + if ((active0 & 0x86000L) != 0L) { - jjmatchedKind = 20; + jjmatchedKind = 21; jjmatchedPos = 4; return 4; } return -1; case 5: - if ((active0 & 0x46000L) != 0L) + if ((active0 & 0x86000L) != 0L) { - jjmatchedKind = 20; + jjmatchedKind = 21; jjmatchedPos = 5; return 4; } return -1; case 6: - if ((active0 & 0x42000L) != 0L) + if ((active0 & 0x82000L) != 0L) return 4; if ((active0 & 0x4000L) != 0L) { - jjmatchedKind = 20; + jjmatchedKind = 21; jjmatchedPos = 6; return 4; } @@ -120,11 +120,13 @@ case 69: return jjMoveStringLiteralDfa1_0(0x400L); case 72: - return jjMoveStringLiteralDfa1_0(0x40000L); + return jjMoveStringLiteralDfa1_0(0x80000L); case 77: return jjMoveStringLiteralDfa1_0(0x10800L); case 78: return jjMoveStringLiteralDfa1_0(0x20200L); + case 79: + return jjMoveStringLiteralDfa1_0(0x40000L); case 83: return jjMoveStringLiteralDfa1_0(0x1000L); case 84: @@ -160,7 +162,11 @@ jjmatchedKind = 17; jjmatchedPos = 1; } - return jjMoveStringLiteralDfa2_0(active0, 0x41a00L); + return jjMoveStringLiteralDfa2_0(active0, 0x81a00L); + case 82: + if ((active0 & 0x40000L) != 0L) + return jjStartNfaWithStates_0(1, 18, 4); + break; case 86: return jjMoveStringLiteralDfa2_0(active0, 0x400L); default : @@ -192,7 +198,7 @@ return jjStartNfaWithStates_0(2, 9, 4); break; case 87: - return jjMoveStringLiteralDfa3_0(active0, 0x40000L); + return jjMoveStringLiteralDfa3_0(active0, 0x80000L); default : break; } @@ -216,7 +222,7 @@ case 76: return jjMoveStringLiteralDfa4_0(active0, 0x4000L); case 77: - return jjMoveStringLiteralDfa4_0(active0, 0x42000L); + return jjMoveStringLiteralDfa4_0(active0, 0x82000L); case 82: return jjMoveStringLiteralDfa4_0(active0, 0x400L); case 84: @@ -248,7 +254,7 @@ switch(curChar) { case 65: - return jjMoveStringLiteralDfa5_0(active0, 0x40000L); + return jjMoveStringLiteralDfa5_0(active0, 0x80000L); case 69: return jjMoveStringLiteralDfa5_0(active0, 0x4000L); case 79: @@ -276,7 +282,7 @@ case 65: return jjMoveStringLiteralDfa6_0(active0, 0x4000L); case 78: - return jjMoveStringLiteralDfa6_0(active0, 0x40000L); + return jjMoveStringLiteralDfa6_0(active0, 0x80000L); case 83: return jjMoveStringLiteralDfa6_0(active0, 0x2000L); default : @@ -302,8 +308,8 @@ return jjStartNfaWithStates_0(6, 13, 4); break; case 89: - if ((active0 & 0x40000L) != 0L) - return jjStartNfaWithStates_0(6, 18, 4); + if ((active0 & 0x80000L) != 0L) + return jjStartNfaWithStates_0(6, 19, 4); break; default : break; @@ -366,8 +372,8 @@ jjCheckNAdd(5); if ((0x3ff008000000000L & l) != 0L) { - if (kind > 20) - kind = 20; + if (kind > 21) + kind = 21; jjCheckNAdd(2); } break; @@ -380,23 +386,23 @@ jjCheckNAdd(7); if ((0x3ff008000000000L & l) != 0L) { - if (kind > 20) - kind = 20; + if (kind > 21) + kind = 21; jjCheckNAdd(2); } break; case 1: if ((0x3ff000000000000L & l) == 0L) break; - if (kind > 19) - kind = 19; + if (kind > 20) + kind = 20; jjstateSet[jjnewStateCnt++] = 1; break; case 2: if ((0x3ff008000000000L & l) == 0L) break; - if (kind > 20) - kind = 20; + if (kind > 21) + kind = 21; jjCheckNAdd(2); break; case 3: @@ -406,8 +412,8 @@ case 5: if ((0x3ff400800000000L & l) == 0L) break; - if (kind > 21) - kind = 21; + if (kind > 22) + kind = 22; jjCheckNAdd(5); break; case 6: @@ -417,8 +423,8 @@ case 7: if ((0x3ff000000000000L & l) == 0L) break; - if (kind > 22) - kind = 22; + if (kind > 23) + kind = 23; jjCheckNAdd(7); break; case 8: @@ -430,8 +436,8 @@ jjCheckNAddTwoStates(9, 10); break; case 10: - if (curChar == 39 && kind > 23) - kind = 23; + if (curChar == 39 && kind > 24) + kind = 24; break; default : break; } @@ -449,8 +455,8 @@ jjCheckNAddTwoStates(3, 4); if ((0x7fffffe87fffffeL & l) != 0L) { - if (kind > 20) - kind = 20; + if (kind > 21) + kind = 21; jjCheckNAdd(2); } break; @@ -459,8 +465,8 @@ jjCheckNAddTwoStates(3, 4); if ((0x7fffffe87fffffeL & l) != 0L) { - if (kind > 20) - kind = 20; + if (kind > 21) + kind = 21; jjCheckNAdd(2); } if (curChar == 108) @@ -469,8 +475,8 @@ case 2: if ((0x7fffffe87fffffeL & l) == 0L) break; - if (kind > 20) - kind = 20; + if (kind > 21) + kind = 21; jjCheckNAdd(2); break; case 3: @@ -480,15 +486,15 @@ case 5: if ((0x7fffffe87fffffeL & l) == 0L) break; - if (kind > 21) - kind = 21; + if (kind > 22) + kind = 22; jjstateSet[jjnewStateCnt++] = 5; break; case 7: if ((0x7fffffe07fffffeL & l) == 0L) break; - if (kind > 22) - kind = 22; + if (kind > 23) + kind = 23; jjstateSet[jjnewStateCnt++] = 7; break; case 9: @@ -535,7 +541,7 @@ public static final String[] jjstrLiteralImages = { "", "\72", "\133", "\174", "\135", "\54", "\50", "\51", "\75", "\116\117\124", "\105\126\105\122\131", "\115\117\123\124", "\123\117\115\105", "\124\110\105\115\117\123\124", -"\124\110\105\114\105\101\123\124", "\101\106\105\127", "\115\101\116\131", "\116\117", +"\124\110\105\114\105\101\123\124", "\101\106\105\127", "\115\101\116\131", "\116\117", "\117\122", "\110\117\127\115\101\116\131", null, null, null, null, null, null, null, null, null, }; /** Lexer state names. */ @@ -543,10 +549,10 @@ "DEFAULT", }; static final long[] jjtoToken = { - 0xffffffL, + 0x1ffffffL, }; static final long[] jjtoSkip = { - 0xf000000L, + 0x1e000000L, }; protected SimpleCharStream input_stream; private final int[] jjrounds = new int[11]; Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/dudes/data/Argument.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/dudes/data/Argument.java 2012-07-03 14:16:28 UTC (rev 3770) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/dudes/data/Argument.java 2012-07-04 15:42:53 UTC (rev 3771) @@ -38,6 +38,9 @@ public String toString() { return "(" + anchor + "," + referent + "," + type + "," + label + ")"; } + public String toTex() { + return "(\\text{"+anchor+"},"+referent+","+type.toTex()+","+label.toTex()+")"; + } public Argument clone() { return new Argument(anchor,referent,type,label); Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/dudes/data/Dude.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/dudes/data/Dude.java 2012-07-03 14:16:28 UTC (rev 3770) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/dudes/data/Dude.java 2012-07-04 15:42:53 UTC (rev 3771) @@ -388,5 +388,26 @@ } } } + + public String toTex() { + + String out = "\\Dude{"+mainReferent+","+mainLabel.toTex()+","+mainType.toTex()+"}"; + out += "{"; + for (DRS drs : components) out += drs.toTex() + " \\\\ "; + out += "}{"; + for (Argument arg : arguments) out += arg.toTex() + "\\ "; + out += "}{"; + for (Iterator<DominanceConstraint> i = dominanceConstraints.iterator(); i.hasNext();) { + out += i.next().toTex(); + if (i.hasNext()) out += ","; + } + out += "}{"; + for (Iterator<Slot> i = slots.iterator(); i.hasNext();) { + out += i.next().toTex(); + if (i.hasNext()) out += ","; + } + out += "}"; + return out; + } } \ No newline at end of file Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/dudes/reader/DUDE_Parser.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/dudes/reader/DUDE_Parser.java 2012-07-03 14:16:28 UTC (rev 3770) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/dudes/reader/DUDE_Parser.java 2012-07-04 15:42:53 UTC (rev 3771) @@ -338,12 +338,12 @@ List<DiscourseReferent> dr_list; Token dr1; Token dr2; - Token dr; + Token dr = null; Token predicate; Token quantifier; DRS drs1; DRS drs2; - if (jj_2_29(2)) { + if (jj_2_31(2)) { predicate = word(); jj_consume_token(10); dr_list = DR_List(); @@ -354,7 +354,7 @@ condition.setPredicate(predicate.toString()); condition.setArguments(dr_list); {if (true) return condition;} - } else if (jj_2_30(2)) { + } else if (jj_2_32(2)) { dr1 = dr(); jj_consume_token(6); dr2 = dr(); @@ -365,13 +365,13 @@ condition.addArgument(new DiscourseReferent(dr1.toString())); condition.addArgument(new DiscourseReferent(dr2.toString())); {if (true) return condition;} - } else if (jj_2_31(2)) { + } else if (jj_2_33(2)) { jj_consume_token(13); drs1 = DRS(); Negated_DRS drs = new Negated_DRS(); drs.setDRS(drs1); {if (true) return drs;} - } else if (jj_2_32(2)) { + } else if (jj_2_34(2)) { drs1 = DRS(); if (jj_2_20(2)) { quantifier = jj_consume_token(EVERY); @@ -391,17 +391,24 @@ quantifier = jj_consume_token(MANY); } else if (jj_2_28(2)) { quantifier = jj_consume_token(NO); + } else if (jj_2_29(2)) { + quantifier = jj_consume_token(OR); } else { jj_consume_token(-1); throw new ParseException(); } - dr = dr(); + if (jj_2_30(2)) { + dr = dr(); + } else { + ; + } drs2 = DRS(); - Complex_DRS_Condition drs; + Complex_DRS_Condition drs; drs = new Complex_DRS_Condition(); - drs.setRestrictor(drs1); + drs.setRestrictor(drs1); drs.setScope(drs2); - drs.setReferent(new DiscourseReferent(dr.toString())); + if (dr != null) drs.setReferent(new DiscourseReferent(dr.toString())); + else drs.setReferent(new DiscourseReferent("null")); if (quantifier.toString().equals("EVERY")) {drs.setQuantifier(DRS_Quantifier.EVERY);} if (quantifier.toString().equals("SOME")) {drs.setQuantifier(DRS_Quantifier.SOME);} @@ -427,7 +434,7 @@ Token dr; List<DiscourseReferent> dr_list=null; dr = dr(); - if (jj_2_33(2)) { + if (jj_2_35(2)) { jj_consume_token(2); dr_list = DR_List(); } else { @@ -456,7 +463,7 @@ Slot slot; List<Slot> slots = null; slot = Slot(); - if (jj_2_34(2)) { + if (jj_2_36(2)) { jj_consume_token(2); slots = Slot_List(); } else { @@ -481,7 +488,7 @@ jj_consume_token(14); type = word(); jj_consume_token(14); - if (jj_2_35(2)) { + if (jj_2_37(2)) { words = Word_List(); } else { ; @@ -507,7 +514,7 @@ Token word; List<String> words = null; word = word(); - if (jj_2_36(2)) { + if (jj_2_38(2)) { jj_consume_token(15); words = Word_List(); } else { @@ -525,9 +532,9 @@ final public Token dr() throws ParseException { Token t; - if (jj_2_37(2)) { + if (jj_2_39(2)) { t = jj_consume_token(A); - } else if (jj_2_38(2)) { + } else if (jj_2_40(2)) { t = jj_consume_token(C); } else { jj_consume_token(-1); @@ -539,9 +546,9 @@ final public Token word() throws ParseException { Token t; - if (jj_2_39(2)) { + if (jj_2_41(2)) { t = jj_consume_token(A); - } else if (jj_2_40(2)) { + } else if (jj_2_42(2)) { t = jj_consume_token(B); } else { jj_consume_token(-1); @@ -831,6 +838,20 @@ finally { jj_save(39, xla); } } + private boolean jj_2_41(int xla) { + jj_la = xla; jj_lastpos = jj_scanpos = token; + try { return !jj_3_41(); } + catch(LookaheadSuccess ls) { return true; } + finally { jj_save(40, xla); } + } + + private boolean jj_2_42(int xla) { + jj_la = xla; jj_lastpos = jj_scanpos = token; + try { return !jj_3_42(); } + catch(LookaheadSuccess ls) { return true; } + finally { jj_save(41, xla); } + } + private boolean jj_3_12() { if (jj_scan_token(2)) return true; if (jj_3R_1()) return true; @@ -848,7 +869,7 @@ return false; } - private boolean jj_3_32() { + private boolean jj_3_34() { if (jj_3R_11()) return true; return false; } @@ -858,11 +879,21 @@ return false; } + private boolean jj_3_30() { + if (jj_3R_10()) return true; + return false; + } + private boolean jj_3_3() { if (jj_3R_3()) return true; return false; } + private boolean jj_3_42() { + if (jj_scan_token(B)) return true; + return false; + } + private boolean jj_3R_1() { if (jj_3R_11()) return true; return false; @@ -873,19 +904,20 @@ return false; } - private boolean jj_3_31() { + private boolean jj_3_33() { if (jj_scan_token(13)) return true; if (jj_3R_11()) return true; return false; } private boolean jj_3_40() { - if (jj_scan_token(B)) return true; + if (jj_scan_token(C)) return true; return false; } - private boolean jj_3_38() { - if (jj_scan_token(C)) return true; + private boolean jj_3R_16() { + if (jj_3R_7()) return true; + if (jj_scan_token(14)) return true; return false; } @@ -895,13 +927,7 @@ return false; } - private boolean jj_3R_16() { - if (jj_3R_7()) return true; - if (jj_scan_token(14)) return true; - return false; - } - - private boolean jj_3_39() { + private boolean jj_3_41() { if (jj_scan_token(A)) return true; return false; } @@ -909,45 +935,50 @@ private boolean jj_3R_7() { Token xsp; xsp = jj_scanpos; - if (jj_3_39()) { + if (jj_3_41()) { jj_scanpos = xsp; - if (jj_3_40()) return true; + if (jj_3_42()) return true; } return false; } - private boolean jj_3_37() { + private boolean jj_3_39() { if (jj_scan_token(A)) return true; return false; } - private boolean jj_3_23() { - if (jj_scan_token(MOST)) return true; - return false; - } - private boolean jj_3R_10() { Token xsp; xsp = jj_scanpos; - if (jj_3_37()) { + if (jj_3_39()) { jj_scanpos = xsp; - if (jj_3_38()) return true; + if (jj_3_40()) return true; } return false; } - private boolean jj_3_30() { - if (jj_3R_10()) return true; - if (jj_scan_token(6)) return true; + private boolean jj_3_29() { + if (jj_scan_token(OR)) return true; return false; } - private boolean jj_3_34() { + private boolean jj_3_36() { if (jj_scan_token(2)) return true; if (jj_3R_4()) return true; return false; } + private boolean jj_3_23() { + if (jj_scan_token(MOST)) return true; + return false; + } + + private boolean jj_3_32() { + if (jj_3R_10()) return true; + if (jj_scan_token(6)) return true; + return false; + } + private boolean jj_3R_3() { if (jj_3R_15()) return true; return false; @@ -956,20 +987,20 @@ private boolean jj_3R_17() { Token xsp; xsp = jj_scanpos; - if (jj_3_29()) { + if (jj_3_31()) { jj_scanpos = xsp; - if (jj_3_30()) { + if (jj_3_32()) { jj_scanpos = xsp; - if (jj_3_31()) { + if (jj_3_33()) { jj_scanpos = xsp; - if (jj_3_32()) return true; + if (jj_3_34()) return true; } } } return false; } - private boolean jj_3_29() { + private boolean jj_3_31() { if (jj_3R_7()) return true; if (jj_scan_token(10)) return true; return false; @@ -981,13 +1012,13 @@ return false; } - private boolean jj_3_15() { - if (jj_3R_7()) return true; + private boolean jj_3R_4() { + if (jj_3R_16()) return true; return false; } - private boolean jj_3R_4() { - if (jj_3R_16()) return true; + private boolean jj_3_15() { + if (jj_3R_7()) return true; return false; } @@ -1034,7 +1065,7 @@ return false; } - private boolean jj_3_33() { + private boolean jj_3_35() { if (jj_scan_token(2)) return true; if (jj_3R_12()) return true; return false; @@ -1084,17 +1115,17 @@ return false; } + private boolean jj_3R_12() { + if (jj_3R_10()) return true; + return false; + } + private boolean jj_3_13() { if (jj_scan_token(2)) return true; if (jj_3R_2()) return true; return false; } - private boolean jj_3R_12() { - if (jj_3R_10()) return true; - return false; - } - private boolean jj_3_17() { if (jj_3R_9()) return true; return false; @@ -1106,12 +1137,17 @@ return false; } - private boolean jj_3_36() { + private boolean jj_3_38() { if (jj_scan_token(15)) return true; if (jj_3R_13()) return true; return false; } + private boolean jj_3_37() { + if (jj_3R_13()) return true; + return false; + } + private boolean jj_3_25() { if (jj_scan_token(THELEAST)) return true; return false; @@ -1123,11 +1159,6 @@ return false; } - private boolean jj_3_35() { - if (jj_3R_13()) return true; - return false; - } - private boolean jj_3_18() { if (jj_scan_token(2)) return true; if (jj_3R_8()) return true; @@ -1163,19 +1194,19 @@ return false; } - private boolean jj_3R_2() { - if (jj_3R_14()) return true; - return false; - } - private boolean jj_3R_13() { if (jj_3R_7()) return true; Token xsp; xsp = jj_scanpos; - if (jj_3_36()) jj_scanpos = xsp; + if (jj_3_38()) jj_scanpos = xsp; return false; } + private boolean jj_3R_2() { + if (jj_3R_14()) return true; + return false; + } + private boolean jj_3R_8() { if (jj_3R_10()) return true; Token xsp; @@ -1208,7 +1239,7 @@ private static void jj_la1_init_1() { jj_la1_1 = new int[] {}; } - final private JJCalls[] jj_2_rtns = new JJCalls[40]; + final private JJCalls[] jj_2_rtns = new JJCalls[42]; private boolean jj_rescan = false; private int jj_gc = 0; @@ -1392,7 +1423,7 @@ /** Generate ParseException. */ public ParseException generateParseException() { jj_expentries.clear(); - boolean[] la1tokens = new boolean[34]; + boolean[] la1tokens = new boolean[35]; if (jj_kind >= 0) { la1to... [truncated message content] |
From: <lor...@us...> - 2012-07-03 14:16:39
|
Revision: 3770 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3770&view=rev Author: lorenz_b Date: 2012-07-03 14:16:28 +0000 (Tue, 03 Jul 2012) Log Message: ----------- Some changes to get relevant keywords for a question. Modified Paths: -------------- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner2.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/ltag/parser/GrammarFilter.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/ltag/parser/Parser.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/templator/Templator.java trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/OxfordEvaluation.java trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/TBSLTest.java Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner2.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner2.java 2012-07-02 11:58:25 UTC (rev 3769) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner2.java 2012-07-03 14:16:28 UTC (rev 3770) @@ -24,6 +24,7 @@ import java.util.concurrent.Future; import org.apache.log4j.Logger; +import org.dllearner.algorithm.tbsl.ltag.parser.GrammarFilter; import org.dllearner.algorithm.tbsl.nlp.Lemmatizer; import org.dllearner.algorithm.tbsl.nlp.LingPipeLemmatizer; import org.dllearner.algorithm.tbsl.nlp.PartOfSpeechTagger; @@ -143,6 +144,8 @@ private PopularityMap popularityMap; + private Set<String> relevantKeywords; + public SPARQLTemplateBasedLearner2(SparqlEndpoint endpoint, Index resourcesIndex, Index classesIndex, Index propertiesIndex){ this(endpoint, resourcesIndex, classesIndex, propertiesIndex, new StanfordPartOfSpeechTagger()); } @@ -349,6 +352,7 @@ learnedSPARQLQueries = new HashMap<String, Object>(); template2Queries = new HashMap<Template, Collection<? extends Query>>(); slot2URI = new HashMap<Slot, List<String>>(); + relevantKeywords = new HashSet<String>(); currentlyExecutedQuery = null; // templateMon.reset(); @@ -367,8 +371,10 @@ } templateMon.stop(); logger.info("Done in " + templateMon.getLastValue() + "ms."); + relevantKeywords.addAll(templateGenerator.getUnknownWords()); if(templates.isEmpty()){ throw new NoTemplateFoundException(); + } logger.info("Templates:"); for(Template t : templates){ @@ -463,13 +469,7 @@ } public Set<String> getRelevantKeywords(){ - Set<String> keywords = new HashSet<String>(); - for(Template t : templates){ - for (Slot slot : t.getSlots()) { - keywords.add(slot.getWords().get(0)); - } - } - return keywords; + return relevantKeywords; } private SortedSet<WeightedQuery> getWeightedSPARQLQueries(Set<Template> templates){ Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/ltag/parser/GrammarFilter.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/ltag/parser/GrammarFilter.java 2012-07-02 11:58:25 UTC (rev 3769) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/ltag/parser/GrammarFilter.java 2012-07-03 14:16:28 UTC (rev 3770) @@ -21,18 +21,20 @@ * grammar contains the .+ wildcard the input n-gram "a b x y c" matches the * anchor "a b .+ c". */ -class GrammarFilter { +public class GrammarFilter { private static final Logger logger = Logger.getLogger(GrammarFilter.class); final static String[] NAMED_Strings = {"named", "called"}; // DISAM - static List<Integer> usedInts = new ArrayList<Integer>(); - static ArrayList<String> doubles = new ArrayList<String>(); + private List<Integer> usedInts = new ArrayList<Integer>(); + private List<String> doubles = new ArrayList<String>(); public static boolean VERBOSE = true; - static ParseGrammar filter(String taggedinput,LTAGLexicon grammar,List<Integer> temps, String mode) { + private List<String> unknownWords; + + public ParseGrammar filter(String taggedinput,LTAGLexicon grammar,List<Integer> temps, String mode) { // DISAM: CLEAR usedInts = new ArrayList<Integer>(); @@ -208,7 +210,7 @@ } } - List<String> unknownWords = new ArrayList<String>(); + unknownWords = new ArrayList<String>(); for (String t : unknownTokens) { String[] tParts = t.split(" "); for (String s : tParts) { @@ -280,8 +282,12 @@ return parseG; } + + public List<String> getUnknownWords(){ + return unknownWords; + } - private static List<Pair<String,String>> checkForNamedString(String token) { + private List<Pair<String,String>> checkForNamedString(String token) { String[] split; if (token.contains(" ")) { @@ -366,7 +372,7 @@ return result; } - private static int createFresh() { + private int createFresh() { int fresh = 0; for (int i = 0; usedInts.contains(i); i++) { Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/ltag/parser/Parser.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/ltag/parser/Parser.java 2012-07-02 11:58:25 UTC (rev 3769) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/ltag/parser/Parser.java 2012-07-03 14:16:28 UTC (rev 3770) @@ -32,6 +32,8 @@ private List<Dude> dudes = new ArrayList<Dude>(); private ParseGrammar parseGrammar = null; private List<Integer> temporaryEntries = new ArrayList<Integer>(); + + private GrammarFilter grammarFilter = new GrammarFilter(); @SuppressWarnings("unchecked") private final Class[] operations = { Scanner.class, MoveDotDown.class, @@ -65,7 +67,7 @@ * times, a tree for each token is added. Both trees need to have * different treeIDs for the parser to work correctly. */ - parseGrammar = GrammarFilter.filter(taggeduserinput,grammar,temporaryEntries,MODE); + parseGrammar = grammarFilter.filter(taggeduserinput,grammar,temporaryEntries,MODE); String inputNoTags = ""; for (String s : taggeduserinput.split(" ")) { @@ -97,6 +99,10 @@ } + public List<String> getUnknownWords(){ + return grammarFilter.getUnknownWords(); + } + public List<DerivationTree> parseMultiThreaded(String taggeduserinput, LTAGLexicon grammar) { derivationTrees.clear(); @@ -112,7 +118,7 @@ * times, a tree for each token is added. Both trees need to have * different treeIDs for the parser to work correctly. */ - parseGrammar = GrammarFilter.filter(taggeduserinput,grammar,temporaryEntries,MODE); + parseGrammar = grammarFilter.filter(taggeduserinput,grammar,temporaryEntries,MODE); String inputNoTags = ""; for (String s : taggeduserinput.split(" ")) { Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/templator/Templator.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/templator/Templator.java 2012-07-02 11:58:25 UTC (rev 3769) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/templator/Templator.java 2012-07-03 14:16:28 UTC (rev 3770) @@ -44,7 +44,7 @@ LTAGLexicon g; LTAG_Lexicon_Constructor LTAG_Constructor = new LTAG_Lexicon_Constructor(); - Parser p; + Parser parser; Preprocessor pp; WordNet wordnet; @@ -83,11 +83,11 @@ g = LTAG_Constructor.construct(grammarFiles); - p = new Parser(); - p.SHOW_GRAMMAR = true; - p.USE_DPS_AS_INITTREES = true; - p.CONSTRUCT_SEMANTICS = true; - p.MODE = "LEIPZIG"; + parser = new Parser(); + parser.SHOW_GRAMMAR = true; + parser.USE_DPS_AS_INITTREES = true; + parser.CONSTRUCT_SEMANTICS = true; + parser.MODE = "LEIPZIG"; pp = new Preprocessor(USE_NER); } @@ -104,11 +104,11 @@ g = LTAG_Constructor.construct(grammarFiles); - p = new Parser(); - p.SHOW_GRAMMAR = true; - p.USE_DPS_AS_INITTREES = true; - p.CONSTRUCT_SEMANTICS = true; - p.MODE = "LEIPZIG"; + parser = new Parser(); + parser.SHOW_GRAMMAR = true; + parser.USE_DPS_AS_INITTREES = true; + parser.CONSTRUCT_SEMANTICS = true; + parser.MODE = "LEIPZIG"; pp = new Preprocessor(USE_NER); } @@ -125,12 +125,12 @@ g = LTAG_Constructor.construct(grammarFiles); - p = new Parser(); - p.SHOW_GRAMMAR = false; - p.VERBOSE = b; - p.USE_DPS_AS_INITTREES = true; - p.CONSTRUCT_SEMANTICS = true; - p.MODE = "LEIPZIG"; + parser = new Parser(); + parser.SHOW_GRAMMAR = false; + parser.VERBOSE = b; + parser.USE_DPS_AS_INITTREES = true; + parser.CONSTRUCT_SEMANTICS = true; + parser.MODE = "LEIPZIG"; pp = new Preprocessor(USE_NER); pp.setVERBOSE(b); @@ -180,16 +180,16 @@ newtagged = pp.condense(newtagged); if (VERBOSE) logger.trace("Preprocessed: " + newtagged); - p.parse(newtagged,g); + parser.parse(newtagged,g); - if (p.getDerivationTrees().isEmpty()) { - p.clear(g,p.getTemps()); + if (parser.getDerivationTrees().isEmpty()) { + parser.clear(g,parser.getTemps()); clearAgain = false; if (VERBOSE) logger.error("[Templator.java] '" + s + "' could not be parsed."); } else { try { - p.buildDerivedTrees(g); + parser.buildDerivedTrees(g); } catch (ParseException e) { if (VERBOSE) logger.error("[Templator.java] ParseException at '" + e.getMessage() + "'", e); } @@ -205,7 +205,7 @@ Set<DRS> drses = new HashSet<DRS>(); Set<Template> templates = new HashSet<Template>(); - for (Dude dude : p.getDudes()) { + for (Dude dude : parser.getDudes()) { UDRS udrs = d2u.convert(dude); if (udrs != null) { @@ -295,7 +295,7 @@ } if (clearAgain) { - p.clear(g,p.getTemps()); + parser.clear(g,parser.getTemps()); } // System.gc(); @@ -326,16 +326,16 @@ newtagged = pp.condense(newtagged); if (VERBOSE) logger.trace("Preprocessed: " + newtagged); - p.parseMultiThreaded(newtagged,g); + parser.parseMultiThreaded(newtagged,g); - if (p.getDerivationTrees().isEmpty()) { - p.clear(g,p.getTemps()); + if (parser.getDerivationTrees().isEmpty()) { + parser.clear(g,parser.getTemps()); clearAgain = false; if (VERBOSE) logger.error("[Templator.java] '" + s + "' could not be parsed."); } else { try { - p.buildDerivedTreesMultiThreaded(g); + parser.buildDerivedTreesMultiThreaded(g); } catch (ParseException e) { if (VERBOSE) logger.error("[Templator.java] ParseException at '" + e.getMessage() + "'", e); } @@ -358,7 +358,7 @@ // threadPool.shutdown(); // while(!threadPool.isTerminated()){} - for (Dude dude : p.getDudes()) { + for (Dude dude : parser.getDudes()) { UDRS udrs = d2u.convert(dude); if (udrs != null) { @@ -451,7 +451,7 @@ if (clearAgain) { - p.clear(g,p.getTemps()); + parser.clear(g,parser.getTemps()); } // System.gc(); @@ -462,6 +462,10 @@ return taggedInput; } + public List<String> getUnknownWords(){ + return parser.getUnknownWords(); + } + private List<String> getLemmatizedWords(List<String> words){ List<String> stemmed = new ArrayList<String>(); for(String word : words){ Modified: trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/OxfordEvaluation.java =================================================================== --- trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/OxfordEvaluation.java 2012-07-02 11:58:25 UTC (rev 3769) +++ trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/OxfordEvaluation.java 2012-07-03 14:16:28 UTC (rev 3770) @@ -49,6 +49,7 @@ SPARQLTemplateBasedLearner2 learner = new SPARQLTemplateBasedLearner2(endpoint, resourcesIndex, classesIndex, propertiesIndex); learner.setMappingIndex(mappingIndex); learner.init(); + learner.setGrammarFiles(new String[]{"tbsl/lexicon/english.lex","tbsl/lexicon/english_oxford.lex"}); int learnedQuestions = 0; Map<String, String> question2QueryMap = new HashMap<String, String>(); Modified: trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/TBSLTest.java =================================================================== --- trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/TBSLTest.java 2012-07-02 11:58:25 UTC (rev 3769) +++ trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/TBSLTest.java 2012-07-03 14:16:28 UTC (rev 3770) @@ -114,11 +114,12 @@ SPARQLTemplateBasedLearner2 learner = new SPARQLTemplateBasedLearner2(endpoint, resourcesIndex, classesIndex, propertiesIndex); learner.setMappingIndex(mappingIndex); learner.init(); + learner.setGrammarFiles(new String[]{"tbsl/lexicon/english.lex","tbsl/lexicon/english_oxford.lex"}); String question = "Give me all houses near a school."; question = "Give me all houses with more than 3 bathrooms and more than 2 bedrooms."; question = "Give me all Victorian houses in Oxfordshire"; - question = "houses with more than 3 bedrooms"; + question = "Edwardian houses close to supermarket for less than 1,000,000 in Oxfordshire"; // question = "Give me all family houses with more than 2 bathrooms and more than 4 bedrooms"; learner.setQuestion(question); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2012-07-02 11:58:36
|
Revision: 3769 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3769&view=rev Author: lorenz_b Date: 2012-07-02 11:58:25 +0000 (Mon, 02 Jul 2012) Log Message: ----------- Removed some unused classes and add option to filter predicates. Modified Paths: -------------- trunk/components-ext/src/main/java/org/dllearner/algorithm/qtl/QTL.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/cli/CLI.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner2.java trunk/components-ext/src/test/java/org/dllearner/algorithm/qtl/LGGTest.java trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/Evaluation.java trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/IndexEvaluation.java trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/TBSLTest.java Added Paths: ----------- trunk/components-ext/src/main/java/org/dllearner/common/index/ModelGenerator.java Removed Paths: ------------- trunk/components-ext/src/main/java/org/dllearner/algorithm/qtl/cache/ModelCache.java trunk/components-ext/src/main/java/org/dllearner/algorithm/qtl/util/ModelGenerator.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner.java trunk/components-ext/src/test/java/org/dllearner/algorithm/qtl/ModelCreationTest.java Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/qtl/QTL.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/qtl/QTL.java 2012-07-02 11:47:59 UTC (rev 3768) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/qtl/QTL.java 2012-07-02 11:58:25 UTC (rev 3769) @@ -31,7 +31,6 @@ import org.apache.commons.collections15.ListUtils; import org.apache.log4j.Logger; -import org.dllearner.algorithm.qtl.cache.ModelCache; import org.dllearner.algorithm.qtl.cache.QueryTreeCache; import org.dllearner.algorithm.qtl.datastructures.QueryTree; import org.dllearner.algorithm.qtl.datastructures.impl.QueryTreeImpl; @@ -42,7 +41,6 @@ import org.dllearner.algorithm.qtl.operations.NBR; import org.dllearner.algorithm.qtl.operations.lgg.LGGGenerator; import org.dllearner.algorithm.qtl.operations.lgg.LGGGeneratorImpl; -import org.dllearner.algorithm.qtl.util.ModelGenerator; import org.dllearner.algorithm.qtl.util.SPARQLEndpointEx; import org.dllearner.core.AbstractComponent; import org.dllearner.core.AbstractLearningProblem; @@ -56,6 +54,9 @@ import org.dllearner.core.options.IntegerConfigOption; import org.dllearner.core.owl.Individual; import org.dllearner.kb.SparqlEndpointKS; +import org.dllearner.kb.sparql.CachingConciseBoundedDescriptionGenerator; +import org.dllearner.kb.sparql.ConciseBoundedDescriptionGenerator; +import org.dllearner.kb.sparql.ConciseBoundedDescriptionGeneratorImpl; import org.dllearner.kb.sparql.ExtractionDBCache; import org.dllearner.kb.sparql.SparqlEndpoint; import org.dllearner.kb.sparql.SparqlQuery; @@ -92,8 +93,6 @@ private ExtractionDBCache cache; private QueryTreeCache treeCache; - private ModelGenerator modelGen; - private ModelCache modelCache; private LGGGenerator<String> lggGenerator; private NBR<String> nbr; @@ -106,6 +105,8 @@ private QueryTreeFilter queryTreeFilter; + private ConciseBoundedDescriptionGenerator cbdGenerator; + private int maxExecutionTimeInSeconds = 60; private int maxQueryTreeDepth = 2; @@ -138,9 +139,8 @@ this.cache = cache; treeCache = new QueryTreeCache(); - modelGen = new ModelGenerator(endpoint, endpoint.getPredicateFilters(), cache); - modelCache = new ModelCache(modelGen); - modelCache.setRecursionDepth(maxQueryTreeDepth); + cbdGenerator = new CachingConciseBoundedDescriptionGenerator(new ConciseBoundedDescriptionGeneratorImpl(endpoint, cache)); + cbdGenerator.setRecursionDepth(maxQueryTreeDepth); lggGenerator = new LGGGeneratorImpl<String>(); nbr = new NBR<String>(endpoint, cache); @@ -208,7 +208,7 @@ public void setMaxQueryTreeDepth(int maxQueryTreeDepth){ this.maxQueryTreeDepth = maxQueryTreeDepth; - modelCache.setRecursionDepth(maxQueryTreeDepth); + cbdGenerator.setRecursionDepth(maxQueryTreeDepth); } public String getSPARQLQuery(){ @@ -218,6 +218,10 @@ return lgg.toSPARQLQueryString(); } + public void setRestrictToNamespaces(List<String> namespaces){ + cbdGenerator.setRestrictToNamespaces(namespaces); + } + private void generatePositiveExampleTrees(){ posExampleTrees.clear(); posExampleTrees.addAll(getQueryTrees(posExamples)); @@ -236,7 +240,7 @@ if(logger.isDebugEnabled()){ logger.debug("Tree for resource " + resource); } - model = modelCache.getModel(resource); + model = cbdGenerator.getConciseBoundedDescription(resource); tree = treeCache.getQueryTree(resource, model); if(logger.isDebugEnabled()){ logger.debug(tree.getStringRepresentation()); @@ -324,9 +328,8 @@ endpoint = endpointKS.getEndpoint(); treeCache = new QueryTreeCache(); - modelGen = new ModelGenerator(endpoint); - modelCache = new ModelCache(modelGen); - modelCache.setRecursionDepth(maxQueryTreeDepth); + cbdGenerator = new CachingConciseBoundedDescriptionGenerator(new ConciseBoundedDescriptionGeneratorImpl(endpoint, cache)); + cbdGenerator.setRecursionDepth(maxQueryTreeDepth); lggGenerator = new LGGGeneratorImpl<String>(); nbr = new NBR<String>(endpoint); Deleted: trunk/components-ext/src/main/java/org/dllearner/algorithm/qtl/cache/ModelCache.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/qtl/cache/ModelCache.java 2012-07-02 11:47:59 UTC (rev 3768) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/qtl/cache/ModelCache.java 2012-07-02 11:58:25 UTC (rev 3769) @@ -1,46 +0,0 @@ -package org.dllearner.algorithm.qtl.cache; - -import java.util.HashMap; -import java.util.Map; - -import org.dllearner.algorithm.qtl.util.ModelGenerator; -import org.dllearner.algorithm.qtl.util.ModelGenerator.Strategy; - -import com.hp.hpl.jena.rdf.model.Model; - -public class ModelCache { - - private Map<String, Model> cache; - private ModelGenerator modelGen; - - private int recursionDepth = 2; - - - public ModelCache(ModelGenerator modelGen){ - this.modelGen = modelGen; - - cache = new HashMap<String, Model>(); - } - - public Model getModel(String uri){ - Model model = cache.get(uri); - if(model == null){ - model = modelGen.createModel(uri, Strategy.CHUNKS, recursionDepth); - cache.put(uri, model); - } - return cache.get(uri); - } - - public void setRecursionDepth(int recursionDepth){ - this.recursionDepth = recursionDepth; - } - - public void clear(){ - cache.clear(); - } - - public void dispose(){ - cache = null; - } - -} Deleted: trunk/components-ext/src/main/java/org/dllearner/algorithm/qtl/util/ModelGenerator.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/qtl/util/ModelGenerator.java 2012-07-02 11:47:59 UTC (rev 3768) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/qtl/util/ModelGenerator.java 2012-07-02 11:58:25 UTC (rev 3769) @@ -1,248 +0,0 @@ -package org.dllearner.algorithm.qtl.util; - -import java.io.UnsupportedEncodingException; -import java.net.MalformedURLException; -import java.net.URL; -import java.sql.SQLException; -import java.util.Collections; -import java.util.Iterator; -import java.util.Set; - -import org.apache.log4j.Logger; -import org.dllearner.kb.sparql.ExtractionDBCache; -import org.dllearner.kb.sparql.SparqlEndpoint; - -import com.hp.hpl.jena.query.Query; -import com.hp.hpl.jena.query.QueryFactory; -import com.hp.hpl.jena.rdf.model.Model; -import com.hp.hpl.jena.rdf.model.ModelFactory; -import com.hp.hpl.jena.rdf.model.Statement; -import com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP; -import com.jamonapi.Monitor; -import com.jamonapi.MonitorFactory; - -public class ModelGenerator { - - private static final Logger logger = Logger.getLogger(ModelGenerator.class); - private Monitor queryMonitor = MonitorFactory.getTimeMonitor("SPARQL Query monitor"); - - private SparqlEndpoint endpoint; - private int recursionDepth = 1; - - private static final int CHUNK_SIZE = 1000; - - private ExtractionDBCache cache; - - private Set<String> predicateFilters; - - public enum Strategy{ - INCREMENTALLY, - CHUNKS - } - - public ModelGenerator(SparqlEndpoint endpoint){ - this(endpoint, Collections.<String>emptySet(), null); - } - - public ModelGenerator(SparqlEndpoint endpoint, Set<String> predicateFilters){ - this(endpoint, predicateFilters, null); - } - - public ModelGenerator(SparqlEndpoint endpoint, Set<String> predicateFilters, ExtractionDBCache cache){ - this.endpoint = endpoint; - this.predicateFilters = predicateFilters; - this.cache = cache; - } - - public ModelGenerator(SparqlEndpoint endpoint, ExtractionDBCache cache){ - this(endpoint, Collections.<String>emptySet(), cache); - } - - public ModelGenerator(String endpointURL){ - try { - this.endpoint = new SparqlEndpoint(new URL(endpointURL)); - } catch (MalformedURLException e) { - e.printStackTrace(); - } - } - - public Model createModel(String resource, Strategy strategy, int recursionDepth){ - this.recursionDepth = recursionDepth; - if(strategy == Strategy.INCREMENTALLY){ - return getModelIncrementallyRec(resource, 0); - } else if(strategy == Strategy.CHUNKS){ - return getModelChunked(resource); - } - return ModelFactory.createDefaultModel(); - } - - public void setRecursionDepth(int recursionDepth){ - this.recursionDepth = recursionDepth; - } - - - /** - * A SPARQL CONSTRUCT query is created, to get a RDF graph for the given example with a specific recursion depth. - * @param example The example resource for which a CONSTRUCT query is created. - * @return The JENA ARQ Query object. - */ - private String makeConstructQueryOptional(String resource, int limit, int offset, Set<String> predicateFilter){ - StringBuilder sb = new StringBuilder(); - sb.append("CONSTRUCT {\n"); - sb.append("<").append(resource).append("> ").append("?p0 ").append("?o0").append(".\n"); - for(int i = 1; i < recursionDepth; i++){ - sb.append("?o").append(i-1).append(" ").append("?p").append(i).append(" ").append("?o").append(i).append(".\n"); - } - sb.append("}\n"); - sb.append("WHERE {\n"); - sb.append("<").append(resource).append("> ").append("?p0 ").append("?o0").append(".\n"); - for(int i = 1; i < recursionDepth; i++){ - sb.append("OPTIONAL{\n"); - sb.append("?o").append(i-1).append(" ").append("?p").append(i).append(" ").append("?o").append(i).append(".\n"); - } - for(int i = 1; i < recursionDepth; i++){ - sb.append("}"); - } - - - for(int i = 0; i < recursionDepth; i++){ - for(String predicate : predicateFilter){ - sb.append("FILTER (!REGEX (?p").append(i).append(", \"").append(predicate).append("\"))"); - } - - } - - sb.append("}\n"); -// sb.append("ORDER BY "); -// for(int i = 0; i < recursionDepth; i++){ -// sb.append("?p").append(i).append(" ").append("?o").append(i).append(" "); -// } -// sb.append("\n"); - sb.append("LIMIT ").append(limit).append("\n"); - sb.append("OFFSET ").append(offset); - - Query query = QueryFactory.create(sb.toString()); - - return sb.toString(); - } - - - /** - * A SPARQL CONSTRUCT query is created, to get a RDF graph for the given example. - * @param example The example resource for which a CONSTRUCT query is created. - * @return The JENA ARQ Query object. - */ - private String makeConstructQuery(String example, Set<String> predicateFilters){ - - StringBuilder sb = new StringBuilder(); - sb.append("CONSTRUCT {\n"); - sb.append("<").append(example).append("> ").append("?p ").append("?o").append(".\n"); - sb.append("}\n"); - sb.append("WHERE {\n"); - sb.append("<").append(example).append("> ").append("?p ").append("?o").append(".\n"); - - for(String predicate : predicateFilters){ - sb.append("FILTER (!REGEX (?p, \"").append(predicate).append("\"))"); - } - - sb.append("}\n"); - Query query = QueryFactory.create(sb.toString()); - - return sb.toString(); - } - - - - private Model getModelChunked(String resource){ -// logger.debug("Resource: " + resource); - String query = makeConstructQueryOptional(resource, CHUNK_SIZE, 0, predicateFilters); -// logger.debug("Sending SPARQL query ..."); -// logger.debug("Query:\n" + query.toString()); - queryMonitor.start(); - Model all = ModelFactory.createDefaultModel(); - try { - Model model; - if(cache == null){ - model = getModel(query); - } else { - model = cache.executeConstructQuery(endpoint, query); - } -// logger.debug("Got " + model.size() + " new triple in " + queryMonitor.getLastValue() + "ms."); - all.add(model); - queryMonitor.stop(); - int i = 1; - while(model.size() != 0){ - query = makeConstructQueryOptional(resource, CHUNK_SIZE, i * CHUNK_SIZE, predicateFilters); -// logger.debug("Sending SPARQL query ..."); -// logger.debug("Query:\n" + query.toString()); - queryMonitor.start(); - if(cache == null){ - model = getModel(query); - } else { - model = cache.executeConstructQuery(endpoint, query); - } - queryMonitor.stop(); -// logger.debug("Got " + model.size() + " new triple in " + queryMonitor.getLastValue() + "ms."); - all.add(model); - i++; - } - } catch (UnsupportedEncodingException e) { - logger.error(e); - } catch (SQLException e) { - logger.error(e); - } - return all; - } - - private Model getModelIncrementallyRec(String resource, int depth){ - logger.debug("Resource: " + resource); - String query = makeConstructQuery(resource, predicateFilters); - logger.debug("Sending SPARQL query ..."); - logger.debug("Query:\n" + query); - queryMonitor.start(); - Model model = null; - try { - if(cache == null){ - model = getModel(query); - } else { - model = cache.executeConstructQuery(endpoint, query); - } - } catch (UnsupportedEncodingException e) { - logger.error(e); - } catch (SQLException e) { - logger.error(e); - } - queryMonitor.stop(); - logger.debug("Got " + model.size() + " new triples in " + queryMonitor.getLastValue() + "ms:"); - Statement st = null; - for(Iterator<Statement> i = model.listStatements();i.hasNext(); st = i.next()){ - logger.debug(st); - } - if(depth < recursionDepth){ - Model tmp = ModelFactory.createDefaultModel(); - for(Iterator<Statement> i = model.listStatements(); i.hasNext();){ - st = i.next(); - if(st.getObject().isURIResource()){ - tmp.add(getModelIncrementallyRec(st.getObject().toString(), depth + 1)); - } - } - model.add(tmp); - } - - return model; - } - - private Model getModel(String query){ - QueryEngineHTTP queryExecution = new QueryEngineHTTP(endpoint.getURL().toString(), query); - for (String dgu : endpoint.getDefaultGraphURIs()) { - queryExecution.addDefaultGraph(dgu); - } - for (String ngu : endpoint.getNamedGraphURIs()) { - queryExecution.addNamedGraph(ngu); - } - Model model = queryExecution.execConstruct(); - return model; - } - - -} Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/cli/CLI.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/cli/CLI.java 2012-07-02 11:47:59 UTC (rev 3768) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/cli/CLI.java 2012-07-02 11:58:25 UTC (rev 3769) @@ -7,11 +7,11 @@ import java.net.URL; import java.util.Collections; -import org.apache.log4j.Level; -import org.apache.log4j.Logger; import org.dllearner.algorithm.tbsl.learning.NoTemplateFoundException; -import org.dllearner.algorithm.tbsl.learning.SPARQLTemplateBasedLearner; -import org.dllearner.algorithm.tbsl.templator.Templator; +import org.dllearner.algorithm.tbsl.learning.SPARQLTemplateBasedLearner2; +import org.dllearner.algorithm.tbsl.util.Knowledgebase; +import org.dllearner.common.index.Index; +import org.dllearner.common.index.SOLRIndex; import org.dllearner.kb.sparql.SparqlEndpoint; import org.ini4j.InvalidFileFormatException; @@ -21,11 +21,18 @@ public static void main(String[] args) throws InvalidFileFormatException, FileNotFoundException, IOException { // Logger.getLogger(SPARQLTemplateBasedLearner.class).setLevel(Level.OFF); + SparqlEndpoint endpoint = new SparqlEndpoint(new URL("http://live.dbpedia.org/sparql"), Collections.singletonList("http://dbpedia.org"), Collections.<String>emptyList()); + + SOLRIndex resourcesIndex = new SOLRIndex("http://dbpedia.aksw.org:8080/solr/dbpedia_resources"); + resourcesIndex.setPrimarySearchField("label"); +// resourcesIndex.setSortField("pagerank"); + Index classesIndex = new SOLRIndex("http://dbpedia.aksw.org:8080/solr/dbpedia_classes"); + Index propertiesIndex = new SOLRIndex("http://dbpedia.aksw.org:8080/solr/dbpedia_properties"); + + + Knowledgebase kb = new Knowledgebase(endpoint, "DBpedia Live", "TODO", resourcesIndex, propertiesIndex, classesIndex, null); + SPARQLTemplateBasedLearner2 learner = new SPARQLTemplateBasedLearner2(kb); - SPARQLTemplateBasedLearner learner = new SPARQLTemplateBasedLearner(); - SparqlEndpoint endpoint = new SparqlEndpoint(new URL("http://live.dbpedia.org/sparql"), - Collections.<String>singletonList(""), Collections.<String>emptyList()); - System.out.println("======= TBSL v0.1 ============="); System.out.println("\nType ':q' to quit."); Deleted: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner.java 2012-07-02 11:47:59 UTC (rev 3768) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner.java 2012-07-02 11:58:25 UTC (rev 3769) @@ -1,1644 +0,0 @@ -package org.dllearner.algorithm.tbsl.learning; - -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import java.util.SortedSet; -import java.util.TreeMap; -import java.util.TreeSet; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; - -import org.apache.log4j.Logger; -import org.dllearner.algorithm.qtl.util.ModelGenerator; -import org.dllearner.algorithm.qtl.util.ModelGenerator.Strategy; -import org.dllearner.algorithm.tbsl.nlp.Lemmatizer; -import org.dllearner.algorithm.tbsl.nlp.LingPipeLemmatizer; -import org.dllearner.algorithm.tbsl.nlp.PartOfSpeechTagger; -import org.dllearner.algorithm.tbsl.nlp.StanfordPartOfSpeechTagger; -import org.dllearner.algorithm.tbsl.nlp.WordNet; -import org.dllearner.algorithm.tbsl.search.HierarchicalSolrSearch; -import org.dllearner.algorithm.tbsl.search.SolrQueryResultItem; -import org.dllearner.algorithm.tbsl.search.SolrQueryResultSet; -import org.dllearner.algorithm.tbsl.search.SolrSearch; -import org.dllearner.algorithm.tbsl.search.ThresholdSlidingSolrSearch; -import org.dllearner.algorithm.tbsl.sparql.Allocation; -import org.dllearner.algorithm.tbsl.sparql.Query; -import org.dllearner.algorithm.tbsl.sparql.RatedQuery; -import org.dllearner.algorithm.tbsl.sparql.SPARQL_Prefix; -import org.dllearner.algorithm.tbsl.sparql.SPARQL_QueryType; -import org.dllearner.algorithm.tbsl.sparql.Slot; -import org.dllearner.algorithm.tbsl.sparql.SlotType; -import org.dllearner.algorithm.tbsl.sparql.Template; -import org.dllearner.algorithm.tbsl.sparql.WeightedQuery; -import org.dllearner.algorithm.tbsl.templator.Templator; -import org.dllearner.algorithm.tbsl.util.Prefixes; -import org.dllearner.algorithm.tbsl.util.Similarity; -import org.dllearner.algorithm.tbsl.util.SolrQueryResultStringSimilarityComparator; -import org.dllearner.core.ComponentInitException; -import org.dllearner.core.LearningProblem; -import org.dllearner.core.Oracle; -import org.dllearner.core.SparqlQueryLearningAlgorithm; -import org.dllearner.core.owl.Description; -import org.dllearner.core.owl.NamedClass; -import org.dllearner.kb.SparqlEndpointKS; -import org.dllearner.kb.sparql.ExtractionDBCache; -import org.dllearner.kb.sparql.SparqlEndpoint; -import org.dllearner.kb.sparql.SparqlQuery; -import org.dllearner.reasoning.SPARQLReasoner; -import org.ini4j.InvalidFileFormatException; -import org.ini4j.Options; - -import com.hp.hpl.jena.graph.Triple; -import com.hp.hpl.jena.query.QueryExecution; -import com.hp.hpl.jena.query.QueryExecutionFactory; -import com.hp.hpl.jena.query.QueryFactory; -import com.hp.hpl.jena.query.QuerySolution; -import com.hp.hpl.jena.query.ResultSet; -import com.hp.hpl.jena.rdf.model.Model; -import com.hp.hpl.jena.rdf.model.ModelFactory; -import com.hp.hpl.jena.sparql.core.Var; -import com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP; -import com.hp.hpl.jena.sparql.syntax.Element; -import com.hp.hpl.jena.sparql.syntax.ElementAssign; -import com.hp.hpl.jena.sparql.syntax.ElementBind; -import com.hp.hpl.jena.sparql.syntax.ElementDataset; -import com.hp.hpl.jena.sparql.syntax.ElementExists; -import com.hp.hpl.jena.sparql.syntax.ElementFetch; -import com.hp.hpl.jena.sparql.syntax.ElementFilter; -import com.hp.hpl.jena.sparql.syntax.ElementGroup; -import com.hp.hpl.jena.sparql.syntax.ElementMinus; -import com.hp.hpl.jena.sparql.syntax.ElementNamedGraph; -import com.hp.hpl.jena.sparql.syntax.ElementNotExists; -import com.hp.hpl.jena.sparql.syntax.ElementOptional; -import com.hp.hpl.jena.sparql.syntax.ElementPathBlock; -import com.hp.hpl.jena.sparql.syntax.ElementService; -import com.hp.hpl.jena.sparql.syntax.ElementSubQuery; -import com.hp.hpl.jena.sparql.syntax.ElementTriplesBlock; -import com.hp.hpl.jena.sparql.syntax.ElementUnion; -import com.hp.hpl.jena.sparql.syntax.ElementVisitor; -import com.hp.hpl.jena.vocabulary.OWL; -import com.hp.hpl.jena.vocabulary.RDF; -import com.hp.hpl.jena.vocabulary.RDFS; -import com.jamonapi.Monitor; -import com.jamonapi.MonitorFactory; - -public class SPARQLTemplateBasedLearner implements SparqlQueryLearningAlgorithm{ - - //for debugging - List<String> exclusions = Arrays.asList(new String[]{"http://dbpedia.org/ontology/GeopoliticalOrganisation", - "http://dbpedia.org/ontology/Non-ProfitOrganisation"}); - - enum Ranking{ - LUCENE, SIMILARITY, NONE - } - - private static final String OPTIONS_FILE = SPARQLTemplateBasedLearner.class.getClassLoader().getResource("tbsl/tbsl.properties").getPath(); - - private static final Logger logger = Logger.getLogger(SPARQLTemplateBasedLearner.class); - private Monitor mon = MonitorFactory.getTimeMonitor("tbsl"); - - private static final int RECURSION_DEPTH = 2; - private static final int MAX_URIS_PER_SLOT = 10; - - private Ranking ranking; - private boolean useRemoteEndpointValidation; - private boolean stopIfQueryResultNotEmpty; - private int maxTestedQueriesPerTemplate = 50; - private int maxQueryExecutionTimeInSeconds; - - private int maxTestedQueries = 200; - - private SparqlEndpoint endpoint = SparqlEndpoint.getEndpointDBpediaLiveAKSW(); - private ExtractionDBCache cache = new ExtractionDBCache("cache"); - - private SolrSearch resource_index; - private SolrSearch class_index; - private SolrSearch property_index; - private SolrSearch boa_pattern_property_index; - private ModelGenerator modelGenenerator; - private Templator templateGenerator; - - private String question; - private int learnedPos = -1; - - private Oracle oracle; - - private Map<String, SolrQueryResultSet> resourcesURICache; - private Map<String, SolrQueryResultSet> classesURICache; - private Map<String, SolrQueryResultSet> propertiesURICache; - - private Map<String, Object> learnedSPARQLQueries; - private Set<Template> templates; - private Collection<Query> sparqlQueryCandidates; - private Map<Template, Collection<? extends Query>> template2Queries; - private Map<Slot, List<String>> slot2URI; - - private Set<WeightedQuery> generatedQueries; - - private Map<String, String> prefixMap; - - private Lemmatizer lemmatizer = new LingPipeLemmatizer();// StanfordLemmatizer(); - - private SPARQLReasoner reasoner; - - public SPARQLTemplateBasedLearner() throws InvalidFileFormatException, FileNotFoundException, IOException{ - this(OPTIONS_FILE); - } - - public SPARQLTemplateBasedLearner(String optionsFile) throws InvalidFileFormatException, FileNotFoundException, IOException{ - this(new Options(new FileInputStream(optionsFile))); - } - - public SPARQLTemplateBasedLearner(Options options){ - this(options, new StanfordPartOfSpeechTagger()); - } - - public SPARQLTemplateBasedLearner(Options options, PartOfSpeechTagger tagger){ - this(options, tagger, new WordNet()); - } - - public SPARQLTemplateBasedLearner(Options options, PartOfSpeechTagger tagger, WordNet wordNet){ - this(options, tagger, wordNet, "cache"); - } - - public SPARQLTemplateBasedLearner(Options options, PartOfSpeechTagger tagger, WordNet wordNet, String cacheDir){ - init(options); - - Set<String> predicateFilters = new HashSet<String>(); - predicateFilters.add("http://dbpedia.org/ontology/wikiPageWikiLink"); - predicateFilters.add("http://dbpedia.org/property/wikiPageUsesTemplate"); - - prefixMap = Prefixes.getPrefixes(); - - modelGenenerator = new ModelGenerator(endpoint, predicateFilters); - - templateGenerator = new Templator(tagger, wordNet); - cache = new ExtractionDBCache(cacheDir); - } - - /* - * Only for Evaluation useful. - */ - public void setUseIdealTagger(boolean value){ - templateGenerator.setUNTAGGED_INPUT(!value); - } - - private void init(Options options){ - String resourcesIndexUrl = options.fetch("solr.resources.url"); - String resourcesIndexSearchField = options.fetch("solr.resources.searchfield"); - resource_index = new ThresholdSlidingSolrSearch(resourcesIndexUrl, resourcesIndexSearchField, "label", 1.0, 0.1); - - String classesIndexUrl = options.fetch("solr.classes.url"); - String classesIndexSearchField = options.fetch("solr.classes.searchfield"); - SolrSearch dbpediaClassIndex = new SolrSearch(classesIndexUrl, classesIndexSearchField, "label"); - - String yagoClassesIndexUrl = options.fetch("solr.yago.classes.url"); - String yagoClassesIndexSearchField = options.fetch("solr.yago.classes.searchfield"); - SolrSearch yagoClassIndex = new SolrSearch(yagoClassesIndexUrl, yagoClassesIndexSearchField); - - class_index = new ThresholdSlidingSolrSearch(dbpediaClassIndex);// new HierarchicalSolrSearch(dbpediaClassIndex, yagoClassIndex); - - String propertiesIndexUrl = options.fetch("solr.properties.url"); - String propertiesIndexSearchField = options.fetch("solr.properties.searchfield"); - SolrSearch labelBasedPropertyIndex = new ThresholdSlidingSolrSearch(propertiesIndexUrl, propertiesIndexSearchField, "label", 1.0, 0.1); - - String boaPatternIndexUrl = options.fetch("solr.boa.properties.url"); - String boaPatternIndexSearchField = options.fetch("solr.boa.properties.searchfield"); - SolrSearch patternBasedPropertyIndex = new SolrSearch(boaPatternIndexUrl, boaPatternIndexSearchField, "nlr-no-var"); - - //first BOA pattern then label based -// property_index = new HierarchicalSolrSearch(patternBasedPropertyIndex, labelBasedPropertyIndex); - - //first label based then BOA pattern - property_index = new HierarchicalSolrSearch(labelBasedPropertyIndex, patternBasedPropertyIndex); - - int maxIndexResults = Integer.parseInt(options.fetch("solr.query.limit"), 10); - - maxQueryExecutionTimeInSeconds = Integer.parseInt(options.get("sparql.query.maxExecutionTimeInSeconds", "20")); - cache.setMaxExecutionTimeInSeconds(maxQueryExecutionTimeInSeconds); - - ranking = Ranking.valueOf(options.get("learning.ranking", "similarity").toUpperCase()); - useRemoteEndpointValidation = options.get("learning.validationType", "remote").equals("remote") ? true : false; - stopIfQueryResultNotEmpty = Boolean.parseBoolean(options.get("learning.stopAfterFirstNonEmptyQueryResult", "true")); - maxTestedQueriesPerTemplate = Integer.parseInt(options.get("learning.maxTestedQueriesPerTemplate", "20")); - - String wordnetPath = options.get("wordnet.dictionary", "tbsl/dict"); - wordnetPath = this.getClass().getClassLoader().getResource(wordnetPath).getPath(); - System.setProperty("wordnet.database.dir", wordnetPath); - } - - public void setEndpoint(SparqlEndpoint endpoint){ - this.endpoint = endpoint; - Set<String> predicateFilters = new HashSet<String>(); - predicateFilters.add("http://dbpedia.org/ontology/wikiPageWikiLink"); - predicateFilters.add("http://dbpedia.org/property/wikiPageUsesTemplate"); - modelGenenerator = new ModelGenerator(endpoint, predicateFilters); - - reasoner = new SPARQLReasoner(new SparqlEndpointKS(endpoint)); - reasoner.setCache(cache); - reasoner.prepareSubsumptionHierarchy(); - } - - public void setQuestion(String question){ - this.question = question; - } - - public void setUseRemoteEndpointValidation(boolean useRemoteEndpointValidation){ - this.useRemoteEndpointValidation = useRemoteEndpointValidation; - } - - public int getMaxQueryExecutionTimeInSeconds() { - return maxQueryExecutionTimeInSeconds; - } - - public void setMaxQueryExecutionTimeInSeconds(int maxQueryExecutionTimeInSeconds) { - this.maxQueryExecutionTimeInSeconds = maxQueryExecutionTimeInSeconds; - } - - public int getMaxTestedQueriesPerTemplate() { - return maxTestedQueriesPerTemplate; - } - - public void setMaxTestedQueriesPerTemplate(int maxTestedQueriesPerTemplate) { - this.maxTestedQueriesPerTemplate = maxTestedQueriesPerTemplate; - } - - public void setRanking(Ranking ranking) { - this.ranking = ranking; - } - - private void reset(){ - learnedSPARQLQueries = new HashMap<String, Object>(); - resourcesURICache = new HashMap<String, SolrQueryResultSet>(); - classesURICache = new HashMap<String, SolrQueryResultSet>(); - propertiesURICache = new HashMap<String, SolrQueryResultSet>(); - template2Queries = new HashMap<Template, Collection<? extends Query>>(); - slot2URI = new HashMap<Slot, List<String>>(); - } - - public void learnSPARQLQueries() throws NoTemplateFoundException{ - reset(); - //generate SPARQL query templates - logger.info("Generating SPARQL query templates..."); - mon.start(); - templates = templateGenerator.buildTemplates(question); - mon.stop(); - logger.info("Done in " + mon.getLastValue() + "ms."); - if(templates.isEmpty()){ - throw new NoTemplateFoundException(); - } - logger.info("Templates:"); - for(Template t : templates){ - logger.info(t); - } - -// //generate SPARQL query candidates, but select only a fixed number per template -// template2Queries = getSPARQLQueryCandidates(templates, ranking); -// sparqlQueryCandidates = getNBestQueryCandidatesForTemplates(template2Queries); - - //get the weighted query candidates - generatedQueries = getWeightedSPARQLQueries(templates); - sparqlQueryCandidates = new ArrayList<Query>(); - int i = 0; - for(WeightedQuery wQ : generatedQueries){ - System.out.println(wQ.explain()); - sparqlQueryCandidates.add(wQ.getQuery()); - if(i == maxTestedQueries){ - break; - } - i++; - } - - //test candidates - if(useRemoteEndpointValidation){ //on remote endpoint - validateAgainstRemoteEndpoint(sparqlQueryCandidates); - } else {//on local model - validateAgainstLocalModel(sparqlQueryCandidates); - } - - } - - public Set<WeightedQuery> getGeneratedQueries() { - return generatedQueries; - } - - public Set<WeightedQuery> getGeneratedQueries(int topN) { - Set<WeightedQuery> topNQueries = new TreeSet<WeightedQuery>(); - int max = Math.min(topN, generatedQueries.size()); - for(WeightedQuery wQ : generatedQueries){ - topNQueries.add(wQ); - if(topNQueries.size() == max){ - break; - } - } - return topNQueries; - } - - public List<String> getSPARQLQueries() throws NoTemplateFoundException{ - logger.info("Generating SPARQL query templates..."); - mon.start(); - templates = templateGenerator.buildTemplates(question); - mon.stop(); - logger.info("Done in " + mon.getLastValue() + "ms."); - if(templates.isEmpty()){ - throw new NoTemplateFoundException(); - } - logger.info("Templates:"); - for(Template t : templates){ - logger.info(t); - } - - //generate SPARQL query candidates - logger.info("Generating SPARQL query candidates..."); - mon.start(); - Map<Template, Collection<? extends Query>> template2Queries = getSPARQLQueryCandidates(templates, ranking); - sparqlQueryCandidates = getNBestQueryCandidatesForTemplates(template2Queries); - - - mon.stop(); - logger.info("Done in " + mon.getLastValue() + "ms."); - - List<String> queries = new ArrayList<String>(); - for(Query q : sparqlQueryCandidates){ - queries.add(q.toString()); - } - - return queries; - } - - public Set<Template> getTemplates(){ - return templates; - } - - public List<String> getGeneratedSPARQLQueries(){ - List<String> queries = new ArrayList<String>(); - for(Query q : sparqlQueryCandidates){ - queries.add(q.toString()); - } - - return queries; - } - - public Map<Template, Collection<? extends Query>> getTemplates2SPARQLQueries(){ - return template2Queries; - } - - public Map<Slot, List<String>> getSlot2URIs(){ - return slot2URI; - } - - private Model getWorkingModel(List<String> resources){ - logger.info("Generating local model..."); - mon.start(); - Model workingModel = ModelFactory.createDefaultModel(); - Model model; - for(String resource : resources){ - model = modelGenenerator.createModel(resource, Strategy.CHUNKS, RECURSION_DEPTH); - workingModel.add(model); - } - mon.stop(); - logger.info("Done in " + mon.getLastValue() + "ms."); - logger.info("Local model contains " + workingModel.size() + " triples."); - return workingModel; - } - - private Map<Template,Collection<? extends Query>> getSPARQLQueryCandidates(Set<Template> templates, Ranking ranking){ - switch(ranking){ - case LUCENE: return getSPARQLQueryCandidatesSortedByLucene(templates); - case SIMILARITY: return getSPARQLQueryCandidatesSortedBySimilarity(templates); - case NONE: return getSPARQLQueryCandidates(templates); - default: return null; - } - } - - /* - private Set<WeightedQuery> getWeightedSPARQLQueries(Set<Template> templates){ - double alpha = 0.8; - double beta = 1 - alpha; - Map<Slot, Set<Allocation>> slot2Allocations = new HashMap<Slot, Set<Allocation>>(); - - Set<WeightedQuery> allQueries = new TreeSet<WeightedQuery>(); - - Set<Allocation> allAllocations; - for(Template t : templates){ - allAllocations = new HashSet<Allocation>(); - - for(Slot slot : t.getSlots()){ - Set<Allocation> allocations = computeAllocation(slot); - allAllocations.addAll(allocations); - slot2Allocations.put(slot, allocations); - } - - int min = Integer.MAX_VALUE; - int max = Integer.MIN_VALUE; - for(Allocation a : allAllocations){ - if(a.getInDegree() < min){ - min = a.getInDegree(); - } - if(a.getInDegree() > max){ - max = a.getInDegree(); - } - } - for(Allocation a : allAllocations){ - double prominence = a.getInDegree()/(max-min); - a.setProminence(prominence); - - double score = alpha * a.getSimilarity() + beta * a.getProminence(); - a.setScore(score); - - } -// System.out.println(allAllocations); - - Set<WeightedQuery> queries = new HashSet<WeightedQuery>(); - Query cleanQuery = t.getQuery(); - queries.add(new WeightedQuery(cleanQuery)); - - Set<WeightedQuery> tmp = new HashSet<WeightedQuery>(); - List<Slot> sortedSlots = new ArrayList<Slot>(); - Set<Slot> classSlots = new HashSet<Slot>(); - for(Slot slot : t.getSlots()){ - if(slot.getSlotType() == SlotType.CLASS){ - sortedSlots.add(slot); - classSlots.add(slot); - } - } - for(Slot slot : t.getSlots()){ - if(!sortedSlots.contains(slot)){ - sortedSlots.add(slot); - } - } - for(Slot slot : sortedSlots){ - if(!slot2Allocations.get(slot).isEmpty()){ - for(Allocation a : slot2Allocations.get(slot)){ - for(WeightedQuery query : queries){ - //check if the query is possible - if(slot.getSlotType() == SlotType.SYMPROPERTY){ - Query reversedQuery = new Query(query.getQuery()); - reversedQuery.getTriplesWithVar(slot.getAnchor()).iterator().next().reverse(); - - boolean drop = false; - for(SPARQL_Triple triple : reversedQuery.getTriplesWithVar(slot.getAnchor())){ - String objectVar = triple.getValue().getName(); - String subjectVar = triple.getVariable().getName(); -// System.out.println(triple); - for(SPARQL_Triple typeTriple : reversedQuery.getRDFTypeTriples(objectVar)){ -// System.out.println(typeTriple); - Set<String> ranges = getRanges(a.getUri()); -// System.out.println(a); - if(!ranges.isEmpty()){ - Set<String> allRanges = new HashSet<String>(); - for(String range : ranges){ - allRanges.addAll(getSuperClasses(range)); - } - String typeURI = typeTriple.getValue().getName().substring(1,typeTriple.getValue().getName().length()-1); - Set<String> allTypes = getSuperClasses(typeURI); - allTypes.add(typeTriple.getValue().getName()); -// System.out.println("RANGES: " + ranges); -// System.out.println("TYPES: " + allTypes); - - if(!org.mindswap.pellet.utils.SetUtils.intersects(allRanges, allTypes)){ - drop = true; - } else { - System.out.println("DROPPING: \n" + reversedQuery.toString()); - } - } - } - for(SPARQL_Triple typeTriple : reversedQuery.getRDFTypeTriples(subjectVar)){ -// System.out.println(typeTriple); - Set<String> domains = getDomains(a.getUri()); -// System.out.println(a); - if(!domains.isEmpty()){ - Set<String> allDomains = new HashSet<String>(); - for(String domain : domains){ - allDomains.addAll(getSuperClasses(domain)); - } - String typeURI = typeTriple.getValue().getName().substring(1,typeTriple.getValue().getName().length()-1); - Set<String> allTypes = getSuperClasses(typeURI); - allTypes.add(typeTriple.getValue().getName()); -// System.out.println("DOMAINS: " + domains); -// System.out.println("TYPES: " + allTypes); - - if(!org.mindswap.pellet.utils.SetUtils.intersects(allDomains, allTypes)){ - drop = true; - } else { - System.out.println("DROPPING: \n" + reversedQuery.toString()); - } - } - } - } - - if(!drop){ - reversedQuery.replaceVarWithURI(slot.getAnchor(), a.getUri()); - WeightedQuery w = new WeightedQuery(reversedQuery); - double newScore = query.getScore() + a.getScore(); - w.setScore(newScore); - tmp.add(w); - } - - } - Query q = new Query(query.getQuery()); - - boolean drop = false; - if(slot.getSlotType() == SlotType.PROPERTY || slot.getSlotType() == SlotType.SYMPROPERTY){ - for(SPARQL_Triple triple : q.getTriplesWithVar(slot.getAnchor())){ - String objectVar = triple.getValue().getName(); - String subjectVar = triple.getVariable().getName(); -// System.out.println(triple); - for(SPARQL_Triple typeTriple : q.getRDFTypeTriples(objectVar)){ -// System.out.println(typeTriple); - Set<String> ranges = getRanges(a.getUri()); -// System.out.println(a); - if(!ranges.isEmpty()){ - Set<String> allRanges = new HashSet<String>(); - for(String range : ranges){ - allRanges.addAll(getSuperClasses(range)); - } - String typeURI = typeTriple.getValue().getName().substring(1,typeTriple.getValue().getName().length()-1); - Set<String> allTypes = getSuperClasses(typeURI); - allTypes.add(typeTriple.getValue().getName()); -// System.out.println("RANGES: " + ranges); -// System.out.println("TYPES: " + allTypes); - - if(!org.mindswap.pellet.utils.SetUtils.intersects(allRanges, allTypes)){ - drop = true; - } else { - System.out.println("DROPPING: \n" + q.toString()); - } - } - } - for(SPARQL_Triple typeTriple : q.getRDFTypeTriples(subjectVar)){ -// System.out.println(typeTriple); - Set<String> domains = getDomains(a.getUri()); -// System.out.println(a); - if(!domains.isEmpty()){ - Set<String> allDomains = new HashSet<String>(); - for(String domain : domains){ - allDomains.addAll(getSuperClasses(domain)); - } - String typeURI = typeTriple.getValue().getName().substring(1,typeTriple.getValue().getName().length()-1); - Set<String> allTypes = getSuperClasses(typeURI); - allTypes.add(typeTriple.getValue().getName()); -// System.out.println("DOMAINS: " + domains); -// System.out.println("TYPES: " + allTypes); - - if(!org.mindswap.pellet.utils.SetUtils.intersects(allDomains, allTypes)){ - drop = true; - } else { - System.out.println("DROPPING: \n" + q.toString()); - } - } - } - } - } - - - if(!drop){ - q.replaceVarWithURI(slot.getAnchor(), a.getUri()); - WeightedQuery w = new WeightedQuery(q); - double newScore = query.getScore() + a.getScore(); - w.setScore(newScore); - tmp.add(w); - } - - - } - } - queries.clear(); - queries.addAll(tmp);System.out.println(tmp); - tmp.clear(); - } - - } - for(WeightedQuery q : queries){ - q.setScore(q.getScore()/t.getSlots().size()); - } - allQueries.addAll(queries); - List<Query> qList = new ArrayList<Query>(); - for(WeightedQuery wQ : queries){//System.err.println(wQ.getQuery()); - qList.add(wQ.getQuery()); - } - template2Queries.put(t, qList); - } - return allQueries; - } - */ - - private void normProminenceValues(Set<Allocation> allocations){ - double min = 0; - double max = 0; - for(Allocation a : allocations){ - if(a.getProminence() < min){ - min = a.getProminence(); - } - if(a.getProminence() > max){ - max = a.getProminence(); - } - } - for(Allocation a : allocations){ - double prominence = a.getProminence()/(max-min); - a.setProminence(prominence); - } - } - - private void computeScore(Set<Allocation> allocations){ - double alpha = 0.8; - double beta = 1 - alpha; - - for(Allocation a : allocations){ - double score = alpha * a.getSimilarity() + beta * a.getProminence(); - a.setScore(score); - } - - } - - private Set<WeightedQuery> getWeightedSPARQLQueries(Set<Template> templates){ - logger.info("Generating SPARQL query candidates..."); - - Map<Slot, Set<Allocation>> slot2Allocations2 = new TreeMap<Slot, Set<Allocation>>(new Comparator<Slot>() { - - @Override - public int compare(Slot o1, Slot o2) { - if(o1.getSlotType() == o2.getSlotType()){ - return o1.getToken().compareTo(o2.getToken()); - } else { - return -1; - } - } - }); - - - Map<Slot, Set<Allocation>> slot2Allocations = new HashMap<Slot, Set<Allocation>>(); - - Set<WeightedQuery> allQueries = new TreeSet<WeightedQuery>(); - - Set<Allocation> allocations; - - for(Template t : templates){ - logger.info("Processing template:\n" + t.toString()); - allocations = new TreeSet<Allocation>(); - - ExecutorService executor = Executors.newFixedThreadPool(t.getSlots().size()); - List<Future<SortedSet<Allocation>>> list = new ArrayList<Future<SortedSet<Allocation>>>(); - - for (Slot slot : t.getSlots()) { - Callable<SortedSet<Allocation>> worker = new SlotProcessor(slot); - Future<SortedSet<Allocation>> submit = executor.submit(worker); - list.add(submit); - } - -// for (Future<SortedSet<Allocation>> future : list) { -// try { -// future.get(); -// } catch (InterruptedException e) { -// e.printStackTrace(); -// } catch (ExecutionException e) { -// e.printStackTrace(); -// } -// } - - /*for(Slot slot : t.getSlots()){ - allocations = slot2Allocations2.get(slot); - if(allocations == null){ - allocations = computeAllocations(slot, 10); - slot2Allocations2.put(slot, allocations); - } - slot2Allocations.put(slot, allocations); - - //for tests add the property URI with http://dbpedia.org/property/ namespace - //TODO should be replaced by usage of a separate SOLR index - Set<Allocation> tmp = new HashSet<Allocation>(); - if(slot.getSlotType() == SlotType.PROPERTY || slot.getSlotType() == SlotType.SYMPROPERTY){ - for(Allocation a : allocations){ - String uri = "http://dbpedia.org/property/" + a.getUri().substring(a.getUri().lastIndexOf("/")+1); - Allocation newA = new Allocation(uri, a.getSimilarity(), a.getProminence()); - newA.setScore(a.getScore()-0.000001); - tmp.add(newA); - } - } - allocations.addAll(tmp); - }*/ - - - Set<WeightedQuery> queries = new HashSet<WeightedQuery>(); - Query cleanQuery = t.getQuery(); - queries.add(new WeightedQuery(cleanQuery)); - - Set<WeightedQuery> tmp = new TreeSet<WeightedQuery>(); - List<Slot> sortedSlots = new ArrayList<Slot>(); - Set<Slot> classSlots = new HashSet<Slot>(); - for(Slot slot : t.getSlots()){ - if(slot.getSlotType() == SlotType.CLASS){ - sortedSlots.add(slot); - classSlots.add(slot); - } - } - for(Slot slot : t.getSlots()){ - if(!sortedSlots.contains(slot)){ - sortedSlots.add(slot); - } - } - //add for each SYMPROPERTY Slot the reversed query - for(Slot slot : sortedSlots){ - for(WeightedQuery wQ : queries){ - if(slot.getSlotType() == SlotType.SYMPROPERTY){ - Query reversedQuery = new Query(wQ.getQuery()); - reversedQuery.getTriplesWithVar(slot.getAnchor()).iterator().next().reverse(); - tmp.add(new WeightedQuery(reversedQuery)); - } - tmp.add(wQ); - } - queries.clear(); - queries.addAll(tmp); - tmp.clear(); - } - - for(Slot slot : sortedSlots){ - if(!slot2Allocations.get(slot).isEmpty()){ - for(Allocation a : slot2Allocations.get(slot)){ - for(WeightedQuery query : queries){ - Query q = new Query(query.getQuery()); - - boolean drop = false;/* - if(slot.getSlotType() == SlotType.PROPERTY || slot.getSlotType() == SlotType.SYMPROPERTY){ - for(SPARQL_Triple triple : q.getTriplesWithVar(slot.getAnchor())){ - String objectVar = triple.getValue().getName(); - String subjectVar = triple.getVariable().getName(); -// System.out.println(triple); - for(SPARQL_Triple typeTriple : q.getRDFTypeTriples(objectVar)){ -// System.out.println(typeTriple); - if(isObjectProperty(a.getUri())){ - Set<String> ranges = getRanges(a.getUri()); -// System.out.println(a); - if(!ranges.isEmpty()){ - Set<String> allRanges = new HashSet<String>(); - for(String range : ranges){ - allRanges.addAll(getSuperClasses(range)); - } - allRanges.addAll(ranges); - allRanges.remove("http://www.w3.org/2002/07/owl#Thing"); - String typeURI = typeTriple.getValue().getName().substring(1,typeTriple.getValue().getName().length()-1); - Set<String> allTypes = getSuperClasses(typeURI); - allTypes.add(typeURI); -// if(typeURI.equals("http://dbpedia.org/ontology/Organisation") && a.getUri().equals("http://dbpedia.org/ontology/developer")){ -// System.out.println("RANGES: " + allRanges); -// System.out.println("TYPES: " + allTypes); -// } - - if(!org.mindswap.pellet.utils.SetUtils.intersects(allRanges, allTypes)){ - drop = true; -// if(typeURI.equals("http://dbpedia.org/ontology/Organisation") && a.getUri().equals("http://dbpedia.org/ontology/developer") && q.toString().contains("/Software>")){ -// System.out.println("RANGES: " + allRanges); -// System.out.println("TYPES: " + allTypes); -// System.out.println("DROPPING: \n" + q.toString()); -// } - } else { - - } - } - } else { - drop = true; - } - - } - for(SPARQL_Triple typeTriple : q.getRDFTypeTriples(subjectVar)){ -// System.out.println(typeTriple); - Set<String> domains = getDomains(a.getUri()); -// System.out.println(a); - if(!domains.isEmpty()){ - Set<String> allDomains = new HashSet<String>(); - for(String domain : domains){ - allDomains.addAll(getSuperClasses(domain)); - } - allDomains.addAll(domains); - allDomains.remove("http://www.w3.org/2002/07/owl#Thing"); - String typeURI = typeTriple.getValue().getName().substring(1,typeTriple.getValue().getName().length()-1); - Set<String> allTypes = getSuperClasses(typeURI); - allTypes.add(typeTriple.getValue().getName()); -// if(typeURI.equals("http://dbpedia.org/ontology/Organisation") && a.getUri().equals("http://dbpedia.org/ontology/developer")){ -// System.out.println("DOMAINS: " + allDomains); -// System.out.println("TYPES: " + allTypes); -// } - - if(!org.mindswap.pellet.utils.SetUtils.intersects(allDomains, allTypes)){ - drop = true; -// System.out.println("DROPPING: \n" + q.toString()); - } else { - - } - } - } - } - }*/ - - - if(!drop){ - q.replaceVarWithURI(slot.getAnchor(), a.getUri()); - WeightedQuery w = new WeightedQuery(q); - double newScore = query.getScore() + a.getScore(); - w.setScore(newScore); - w.addAllocations(query.getAllocations()); - w.addAllocation(a); - tmp.add(w); - } - - - } - } - queries.clear(); - queries.addAll(tmp);//System.out.println(tmp); - tmp.clear(); - } - - } - for(WeightedQuery q : queries){ - q.setScore(q.getScore()/t.getSlots().size()); - } - allQueries.addAll(queries); - List<Query> qList = new ArrayList<Query>(); - for(WeightedQuery wQ : queries){//System.err.println(wQ.getQuery()); - qList.add(wQ.getQuery()); - } - template2Queries.put(t, qList); - } - logger.info("...done in "); - return allQueries; - } - -/* - * for(SPARQL_Triple triple : t.getQuery().getTriplesWithVar(slot.getAnchor())){System.out.println(triple); - for(SPARQL_Triple typeTriple : t.getQuery().getRDFTypeTriples(triple.getVariable().getName())){ - System.out.println(typeTriple); - for(Allocation a : allocations){ - Set<String> domains = getDomains(a.getUri()); - System.out.println(a); - System.out.println(domains); - for(Slot s : classSlots){ - if(s.getAnchor().equals(triple.getVariable().getName())){ - for(Allocation all : slot2Allocations.get(s)){ - if(!domains.contains(all.getUri())){ - System.out.println("DROP " + a); - } - } - } - } - } - - - } - */ - - private SortedSet<Allocation> computeAllocations(Slot slot){ - SortedSet<Allocation> allocations = new TreeSet<Allocation>(); - - SolrSearch index = getIndexBySlotType(slot); - - SolrQueryResultSet rs; - for(String word : slot.getWords()){ - if(slot.getSlotType() == SlotType.RESOURCE){ - rs = index.getResourcesWithScores(word, 250); - } else { - rs = index.getResourcesWithScores(word, 20); - } - - - //debugging -// for(Iterator<SolrQueryResultItem> iter = rs.getItems().iterator();iter.hasNext();){ -// SolrQueryResultItem item = iter.next(); -// if(exclusions.contains(item.getUri())){ -// iter.remove(); -// } -// } - - for(SolrQueryResultItem item : rs.getItems()){ - double similarity = Similarity.getSimilarity(word, item.getLabel()); - //get the labels of the redirects and compute the highest similarity - if(slot.getSlotType() == SlotType.RESOURCE){ - Set<String> labels = getRedirectLabels(item.getUri()); - for(String label : labels){ - double tmp = Similarity.getSimilarity(word, label); - if(tmp > similarity){ - similarity = tmp; - } - } - } - double prominence = getProminenceValue(item.getUri(), slot.getSlotType()); - allocations.add(new Allocation(item.getUri(), prominence, similarity)); - } - - } - - normProminenceValues(allocations); - - computeScore(allocations); - return new TreeSet<Allocation>(allocations); - } - - private Set<Allocation> computeAllocations(Slot slot, int limit){ - logger.info("Computing allocations for " + slot); - SortedSet<Allocation> allocations = computeAllocations(slot); - - if(allocations.isEmpty()){ - logger.info("...done."); - return allocations; - } - - ArrayList<Allocation> l = new ArrayList<Allocation>(allocations); - Collections.sort(l, new Comparator<Allocation>() { - - @Override - public int compare(Allocation o1, Allocation o2) { - double dif = o1.getScore() - o2.getScore(); - if(dif < 0){ - return 1; - } else if(dif > 0){ - return -1; - } else { - return o1.getUri().compareTo(o2.getUri()); - } - } - }); - logger.info("...done."); - return new TreeSet<Allocation>(l.subList(0, Math.min(limit, allocations.size()))); - } - - private Set<String> getRedirectLabels(String uri){ - Set<String> labels = new HashSet<String>(); - String query = String.format("SELECT ?label WHERE {?s <http://dbpedia.org/ontology/wikiPageRedirects> <%s>. ?s <%s> ?label.}", uri, RDFS.label.getURI()); - ResultSet rs = SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(endpoint, query)); - QuerySolution qs; - while(rs.hasNext()){ - qs = rs.next(); - labels.add(qs.getLiteral("label").getLexicalForm()); - - } - return labels; - } - - private double getProminenceValue(String uri, SlotType type){ - int cnt = 1; - String query = null; - if(type == SlotType.CLASS){ - query = "SELECT COUNT(?s) WHERE {?s a <%s>}"; - } else if(type == SlotType.PROPERTY || type == SlotType.SYMPROPERTY){ - query = "SELECT COUNT(*) WHERE {?s <%s> ?o}"; - } else if(type == SlotType.RESOURCE || type == SlotType.UNSPEC){ - query = "SELECT COUNT(*) WHERE {?s ?p <%s>}"; - } - query = String.format(query, uri); - - ResultSet rs = SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(endpoint, query)); - QuerySolution qs; - String projectionVar; - while(rs.hasNext()){ - qs = rs.next(); - projectionVar = qs.varNames().next(); - cnt = qs.get(projectionVar).asLiteral().getInt(); - } -// if(cnt == 0){ -// return 0; -// } -// return Math.log(cnt); - return cnt; - } - - - private Map<Template, Collection<? extends Query>> getSPARQLQueryCandidates(Set<Template> templates){ - logger.info("Generating candidate SPARQL queries..."); - mon.start(); - Set<Query> queries = new HashSet<Query>(); - Map<Template, Collection<? extends Query>> template2Queries = new HashMap<Template, Collection<? extends Query>>(); - for(Template template : templates){ - queries = new HashSet<Query>(); - queries.add(template.getQuery()); - template2Queries.put(template, queries); - for(Slot slot : template.getSlots()){ - Set<Query> tmp = new HashSet<Query>(); - String var = slot.getAnchor(); - List<String> words = slot.getWords(); - for(SolrQueryResultItem item : getCandidateURIsWithScore(slot).getItems()){ - for(Query query : queries){ - Query newQuery = new Query(query); - newQuery.replaceVarWithURI(var, item.getUri()); - tmp.add(newQuery); - } - } - if(!words.isEmpty()){ - queries.clear(); - queries.addAll(tmp); - } - } - } - mon.stop(); - logger.info("Done in " + mon.getLastValue() + "ms."); - return template2Queries; - } - - private Map<String, Float> getCandidateRatedSPARQLQueries(Set<Template> templates){ - logger.info("Generating candidate SPARQL queries..."); - mon.start(); - Map<String, Float> query2Score = new HashMap<String, Float>(); - - Query query; - for(Template template : templates){ - query = template.getQuery(); - query2Score.put(query.toString(), Float.valueOf(0)); - for(Slot slot : template.getSlots()){ - Map<String, Float> tmp = new HashMap<String, Float>(); - String var = slot.getAnchor(); - List<String> words = slot.getWords(); - for(SolrQueryResultItem item : getCandidateURIsWithScore(slot).getItems()){ - for(Entry<String, Float> entry2 : query2Score.entrySet()){ - tmp.put(entry2.getKey().replace("?" + var, "<" + item.getUri() + ">"), item.getScore() + entry2.getValue()); - } - } - if(!words.isEmpty()){ - query2Score.clear(); - query2Score.putAll(tmp); - } - } - } - mon.stop(); - logger.info("Done in " + mon.getLastValue() + "ms."); - return query2Score; - } - - private Map<Template, Collection<? extends Query>> getSPARQLQueryCandidatesSortedByLucene(Set<Template> templates){ - logger.info("Generating candidate SPARQL queries..."); - mon.start(); - SortedSet<RatedQuery> ratedQueries = new TreeSet<RatedQuery>(); - Map<Template, Collection<? extends Query>> template2Queries = new HashMap<Template, Collection<? extends Query>>(); - - Query query; - for(Template template : templates){ - query = template.getQuery(); - ratedQueries = new TreeSet<RatedQuery>(); - ratedQueries.add(new RatedQuery(query, 0)); - template2Queries.put(template, ratedQueries); - for(Slot slot : template.getSlots()){ - Set<RatedQuery> tmp = new HashSet<RatedQuery>(); - String var = slot.getAnchor(); - List<String> words = slot.getWords(); - for(SolrQueryResultItem item : getCandidateURIsWithScore(slot).getItems()){ - for(RatedQuery rQ : ratedQueries){ - RatedQuery newRQ = new RatedQuery(rQ, rQ.getScore()); - newRQ.replaceVarWithURI(var, item.getUri()); - newRQ.setScore(newRQ.getScore() + item.getScore()); - tmp.add(newRQ); - } - } - if(!words.isEmpty()){ - ratedQueries.clear(); - ratedQueries.addAll(tmp); - } - } - } - mon.stop(); - logger.info("Done in " + mon.getLastValue() + "ms."); - return template2Queries; - } - - private Map<Template, Collection<? extends Query>> getSPARQLQueryCandidatesSortedBySimilarity(Set<Template> templates){ - logger.info("Generating candidate SPARQL queries..."); - mon.start(); - List<Query> queries = new ArrayList<Query>(); - Map<Template, Collection<? extends Query>> template2Queries = new HashMap<Template, Collection<? extends Query>>(); - List<String> uriCandidates; - for(Template template : templates){ - queries = new ArrayList<Query>(); - queries.add(template.getQuery()); - template2Queries.put(template, queries); - for(Slot slot : template.getSlots()){ - List<Query> tmp = new ArrayList<Query>(); - String var = slot.getAnchor(); - List<String> words = slot.getWords(); - SPARQL_Prefix prefix = null; - uriCandidates = getCandidateURIsSortedBySimilarity(slot); - for(S... [truncated message content] |
From: <lor...@us...> - 2012-07-02 11:48:10
|
Revision: 3768 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3768&view=rev Author: lorenz_b Date: 2012-07-02 11:47:59 +0000 (Mon, 02 Jul 2012) Log Message: ----------- Added caching decorator for CBD generator. Added some config options. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/kb/sparql/ConciseBoundedDescriptionGenerator.java trunk/components-core/src/main/java/org/dllearner/kb/sparql/ConciseBoundedDescriptionGeneratorImpl.java trunk/components-core/src/main/java/org/dllearner/kb/sparql/SymmetricConciseBoundedDescriptionGeneratorImpl.java Added Paths: ----------- trunk/components-core/src/main/java/org/dllearner/kb/sparql/CachingConciseBoundedDescriptionGenerator.java Added: trunk/components-core/src/main/java/org/dllearner/kb/sparql/CachingConciseBoundedDescriptionGenerator.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/sparql/CachingConciseBoundedDescriptionGenerator.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/CachingConciseBoundedDescriptionGenerator.java 2012-07-02 11:47:59 UTC (rev 3768) @@ -0,0 +1,47 @@ +package org.dllearner.kb.sparql; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.hp.hpl.jena.rdf.model.Model; + +public class CachingConciseBoundedDescriptionGenerator implements ConciseBoundedDescriptionGenerator{ + + private Map<String, Model> cache; + private ConciseBoundedDescriptionGenerator cbdGen; + + public CachingConciseBoundedDescriptionGenerator(ConciseBoundedDescriptionGenerator cbdGen) { + this.cbdGen = cbdGen; + cache = new HashMap<String, Model>(); + } + + public Model getConciseBoundedDescription(String resourceURI){ + Model cbd = cache.get(resourceURI); + if(cbd == null){ + cbd = cbdGen.getConciseBoundedDescription(resourceURI); + cache.put(resourceURI, cbd); + } + return cbd; + } + + public Model getConciseBoundedDescription(String resourceURI, int depth){ + Model cbd = cache.get(resourceURI); + if(cbd == null){ + cbd = cbdGen.getConciseBoundedDescription(resourceURI, depth); + cache.put(resourceURI, cbd); + } + return cbd; + } + + @Override + public void setRestrictToNamespaces(List<String> namespaces) { + cbdGen.setRestrictToNamespaces(namespaces); + } + + @Override + public void setRecursionDepth(int maxRecursionDepth) { + cbdGen.setRecursionDepth(maxRecursionDepth); + } + +} Modified: trunk/components-core/src/main/java/org/dllearner/kb/sparql/ConciseBoundedDescriptionGenerator.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/sparql/ConciseBoundedDescriptionGenerator.java 2012-06-29 12:18:39 UTC (rev 3767) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/ConciseBoundedDescriptionGenerator.java 2012-07-02 11:47:59 UTC (rev 3768) @@ -1,5 +1,7 @@ package org.dllearner.kb.sparql; +import java.util.List; + import com.hp.hpl.jena.rdf.model.Model; public interface ConciseBoundedDescriptionGenerator { @@ -7,4 +9,8 @@ public Model getConciseBoundedDescription(String resourceURI); public Model getConciseBoundedDescription(String resourceURI, int depth); + + public void setRestrictToNamespaces(List<String> namespaces); + + public void setRecursionDepth(int maxRecursionDepth); } Modified: trunk/components-core/src/main/java/org/dllearner/kb/sparql/ConciseBoundedDescriptionGeneratorImpl.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/sparql/ConciseBoundedDescriptionGeneratorImpl.java 2012-06-29 12:18:39 UTC (rev 3767) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/ConciseBoundedDescriptionGeneratorImpl.java 2012-07-02 11:47:59 UTC (rev 3768) @@ -2,6 +2,9 @@ import java.io.UnsupportedEncodingException; import java.sql.SQLException; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; import java.util.Set; import org.apache.log4j.Level; @@ -13,18 +16,22 @@ import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.ModelFactory; import com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP; +import com.hp.hpl.jena.vocabulary.RDF; +import com.hp.hpl.jena.vocabulary.RDFS; public class ConciseBoundedDescriptionGeneratorImpl implements ConciseBoundedDescriptionGenerator{ private static final Logger logger = Logger.getLogger(ConciseBoundedDescriptionGeneratorImpl.class); private static final int CHUNK_SIZE = 1000; - private static final int DEFAULT_DEPTH = 2; private ExtractionDBCache cache; private SparqlEndpoint endpoint; private Model baseModel; + private List<String> namespaces; + private int maxRecursionDepth = 2; + public ConciseBoundedDescriptionGeneratorImpl(SparqlEndpoint endpoint, ExtractionDBCache cache) { this.endpoint = endpoint; this.cache = cache; @@ -39,7 +46,7 @@ } public Model getConciseBoundedDescription(String resourceURI){ - return getConciseBoundedDescription(resourceURI, DEFAULT_DEPTH); + return getConciseBoundedDescription(resourceURI, maxRecursionDepth); } public Model getConciseBoundedDescription(String resourceURI, int depth){ @@ -78,6 +85,16 @@ return all; } + @Override + public void setRestrictToNamespaces(List<String> namespaces) { + this.namespaces = namespaces; + } + + @Override + public void setRecursionDepth(int maxRecursionDepth) { + this.maxRecursionDepth = maxRecursionDepth; + } + /** * A SPARQL CONSTRUCT query is created, to get a RDF graph for the given example with a specific recursion depth. * @param example The example resource for which a CONSTRUCT query is created. @@ -95,11 +112,13 @@ sb.append("}\n"); sb.append("WHERE {\n"); sb.append("<").append(resource).append("> ").append("?p0 ").append("?o0").append(".\n"); + sb.append(createNamespacesFilter("?p0")); // sb.append("?p0 a ?type0.\n"); for(int i = 1; i < depth; i++){ sb.append("OPTIONAL{\n"); sb.append("?o").append(i-1).append(" ").append("?p").append(i).append(" ").append("?o").append(i).append(".\n"); // sb.append("?p").append(i).append(" ").append("a").append(" ").append("?type").append(i).append(".\n"); + sb.append(createNamespacesFilter("?p" + i)); } for(int i = 1; i < depth; i++){ sb.append("}"); @@ -110,6 +129,22 @@ return sb.toString(); } + private String createNamespacesFilter(String targetVar){ + String filter = ""; + if(namespaces != null){ + filter += "FILTER("; + for(Iterator<String> iter = namespaces.iterator(); iter.hasNext();){ + String ns = iter.next(); + filter += "(REGEX(STR(" + targetVar + "),'" + ns + "'))"; + if(iter.hasNext()){ + filter += " || "; + } + } + filter += ")"; + } + return filter; + } + private Model getModel(String query) throws UnsupportedEncodingException, SQLException{ if(logger.isDebugEnabled()){ logger.debug("Sending SPARQL query ..."); @@ -143,7 +178,10 @@ public static void main(String[] args) { Logger.getRootLogger().setLevel(Level.DEBUG); ConciseBoundedDescriptionGenerator cbdGen = new ConciseBoundedDescriptionGeneratorImpl(SparqlEndpoint.getEndpointDBpedia()); - cbdGen.getConciseBoundedDescription("http://dbpedia.org/resource/Leipzig", 2); + cbdGen = new CachingConciseBoundedDescriptionGenerator(cbdGen); + cbdGen.setRestrictToNamespaces(Arrays.asList(new String[]{"http://dbpedia.org/ontology/", RDF.getURI(), RDFS.getURI()})); + Model cbd = cbdGen.getConciseBoundedDescription("http://dbpedia.org/resource/Leipzig", 2); + System.out.println(cbd.size()); } } Modified: trunk/components-core/src/main/java/org/dllearner/kb/sparql/SymmetricConciseBoundedDescriptionGeneratorImpl.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/sparql/SymmetricConciseBoundedDescriptionGeneratorImpl.java 2012-06-29 12:18:39 UTC (rev 3767) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/SymmetricConciseBoundedDescriptionGeneratorImpl.java 2012-07-02 11:47:59 UTC (rev 3768) @@ -2,6 +2,7 @@ import java.io.UnsupportedEncodingException; import java.sql.SQLException; +import java.util.List; import java.util.Set; import org.apache.log4j.Level; @@ -18,11 +19,13 @@ private static final Logger logger = Logger.getLogger(SymmetricConciseBoundedDescriptionGeneratorImpl.class); private static final int CHUNK_SIZE = 1000; - private static final int DEFAULT_DEPTH = 1; private ExtractionDBCache cache; private SparqlEndpoint endpoint; + private List<String> namespaces; + private int maxRecursionDepth = 1; + public SymmetricConciseBoundedDescriptionGeneratorImpl(SparqlEndpoint endpoint, ExtractionDBCache cache) { this.endpoint = endpoint; this.cache = cache; @@ -33,7 +36,7 @@ } public Model getConciseBoundedDescription(String resourceURI){ - return getConciseBoundedDescription(resourceURI, DEFAULT_DEPTH); + return getConciseBoundedDescription(resourceURI, maxRecursionDepth); } public Model getConciseBoundedDescription(String resourceURI, int depth){ @@ -43,6 +46,11 @@ return cbd; } + @Override + public void setRestrictToNamespaces(List<String> namespaces) { + this.namespaces = namespaces; + } + private Model getModelChunkedResourceIsObject(String resource, int depth){ String query = makeConstructQueryObject(resource, CHUNK_SIZE, 0, depth); Model all = ModelFactory.createDefaultModel(); @@ -194,4 +202,10 @@ cbdGen.getConciseBoundedDescription("http://dbpedia.org/resource/Leipzig", 1); } + @Override + public void setRecursionDepth(int maxRecursionDepth) { + this.maxRecursionDepth = maxRecursionDepth; + + } + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2012-06-29 12:18:50
|
Revision: 3767 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3767&view=rev Author: lorenz_b Date: 2012-06-29 12:18:39 +0000 (Fri, 29 Jun 2012) Log Message: ----------- Using popularity map as executing cache. Modified Paths: -------------- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner2.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/PopularityMap.java Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner2.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner2.java 2012-06-28 13:44:49 UTC (rev 3766) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner2.java 2012-06-29 12:18:39 UTC (rev 3767) @@ -47,6 +47,7 @@ import org.dllearner.algorithm.tbsl.templator.Templator; import org.dllearner.algorithm.tbsl.util.Knowledgebase; import org.dllearner.algorithm.tbsl.util.PopularityMap; +import org.dllearner.algorithm.tbsl.util.PopularityMap.EntityType; import org.dllearner.algorithm.tbsl.util.Similarity; import org.dllearner.common.index.Index; import org.dllearner.common.index.IndexResultItem; @@ -782,9 +783,13 @@ private double getProminenceValue(String uri, SlotType type){ Integer popularity = null; if(popularityMap != null){ - if(type == SlotType.CLASS || type == SlotType.PROPERTY || type == SlotType.SYMPROPERTY + if(type == SlotType.CLASS){ + popularity = popularityMap.getPopularity(uri, EntityType.CLASS); + } else if(type == SlotType.PROPERTY || type == SlotType.SYMPROPERTY || type == SlotType.DATATYPEPROPERTY || type == SlotType.OBJECTPROPERTY){ - popularity = popularityMap.getPopularity(uri); + popularity = popularityMap.getPopularity(uri, EntityType.PROPERTY); + } else if(type == SlotType.RESOURCE || type == SlotType.UNSPEC){ + popularity = popularityMap.getPopularity(uri, EntityType.RESOURCE); } } if(popularity == null){ @@ -808,6 +813,9 @@ popularity = qs.get(projectionVar).asLiteral().getInt(); } } + if(popularity == null){ + popularity = Integer.valueOf(0); + } // if(cnt == 0){ Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/PopularityMap.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/PopularityMap.java 2012-06-28 13:44:49 UTC (rev 3766) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/PopularityMap.java 2012-06-29 12:18:39 UTC (rev 3767) @@ -7,7 +7,9 @@ import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.dllearner.core.owl.DatatypeProperty; @@ -23,7 +25,7 @@ public class PopularityMap { - enum EntityType { + public enum EntityType { CLASS, PROPERTY, RESOURCE } @@ -48,22 +50,19 @@ // load popularity of classes for (NamedClass nc : new SPARQLTasks(endpoint).getAllClasses()) { System.out.println("Computing popularity for " + nc); - String query = String.format("SELECT COUNT(?s) WHERE {?s a <%s>}", nc.getName()); - int popularity = loadPopularity(query); + int popularity = loadPopularity(nc.getName(), EntityType.CLASS); class2Popularity.put(nc.getName(), Integer.valueOf(popularity)); } // load popularity of properties for (ObjectProperty op : new SPARQLTasks(endpoint).getAllObjectProperties()) { System.out.println("Computing popularity for " + op); - String query = String.format("SELECT COUNT(*) WHERE {?s <%s> ?o}", op.getName()); - int popularity = loadPopularity(query); - class2Popularity.put(op.getName(), Integer.valueOf(popularity)); + int popularity = loadPopularity(op.getName(), EntityType.PROPERTY); + property2Popularity.put(op.getName(), Integer.valueOf(popularity)); } for (DatatypeProperty dp : new SPARQLTasks(endpoint).getAllDataProperties()) { System.out.println("Computing popularity for " + dp); - String query = String.format("SELECT COUNT(*) WHERE {?s <%s> ?o}", dp.getName()); - int popularity = loadPopularity(query); - class2Popularity.put(dp.getName(), Integer.valueOf(popularity)); + int popularity = loadPopularity(dp.getName(), EntityType.PROPERTY); + property2Popularity.put(dp.getName(), Integer.valueOf(popularity)); } serialize(); } @@ -73,7 +72,11 @@ ObjectOutputStream oos = null; try { oos = new ObjectOutputStream(new FileOutputStream(new File(file))); - oos.writeObject(class2Popularity); + List<Map<String, Integer>> mapList = new ArrayList<Map<String,Integer>>(); + mapList.add(class2Popularity); + mapList.add(property2Popularity); + mapList.add(resource2Popularity); + oos.writeObject(mapList); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -98,7 +101,10 @@ ObjectInputStream ois = null; try { ois = new ObjectInputStream(new FileInputStream(new File(file))); - class2Popularity = (Map<String, Integer>) ois.readObject(); + List<Map<String, Integer>> mapList = (List<Map<String, Integer>>) ois.readObject(); + class2Popularity = mapList.get(0); + property2Popularity = mapList.get(1); + resource2Popularity = mapList.get(2); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { @@ -115,12 +121,21 @@ } } + System.out.println("Loaded popularity map."); return true; } return false; } - private int loadPopularity(String query){ + private int loadPopularity(String uri, EntityType entityType){ + String query; + if(entityType == EntityType.CLASS){ + query = String.format("SELECT COUNT(?s) WHERE {?s a <%s>}", uri); + } else if(entityType == EntityType.PROPERTY){ + query = String.format("SELECT COUNT(*) WHERE {?s <%s> ?o}", uri); + } else { + query = String.format("SELECT COUNT(*) WHERE {?s ?p <%s>}", uri); + } int pop = 0; ResultSet rs = SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(endpoint, query)); QuerySolution qs; @@ -137,10 +152,22 @@ Integer popularity; if(entityType == EntityType.CLASS){ popularity = class2Popularity.get(uri); + if(popularity == null){ + popularity = loadPopularity(uri, entityType); + class2Popularity.put(uri, popularity); + } } else if(entityType == EntityType.PROPERTY){ popularity = property2Popularity.get(uri); + if(popularity == null){ + popularity = loadPopularity(uri, entityType); + property2Popularity.put(uri, popularity); + } } else { popularity = resource2Popularity.get(uri); + if(popularity == null){ + popularity = loadPopularity(uri, entityType); + resource2Popularity.put(uri, popularity); + } } return popularity; } @@ -157,7 +184,9 @@ } public static void main(String[] args) { - new PopularityMap("dbpedia_popularity.map", SparqlEndpoint.getEndpointDBpedia(), new ExtractionDBCache("cache")).init(); + PopularityMap map = new PopularityMap("dbpedia_popularity.map", SparqlEndpoint.getEndpointDBpediaLiveAKSW(), new ExtractionDBCache("cache")); + map.init(); + System.out.println(map.getPopularity("http://dbpedia.org/ontology/Book")); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2012-06-28 13:44:58
|
Revision: 3766 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3766&view=rev Author: lorenz_b Date: 2012-06-28 13:44:49 +0000 (Thu, 28 Jun 2012) Log Message: ----------- Added object to precompute popularity of entities. Modified Paths: -------------- trunk/components-ext/src/main/java/org/dllearner/algorithm/qtl/QTL.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner2.java Added Paths: ----------- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/PopularityMap.java Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/qtl/QTL.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/qtl/QTL.java 2012-06-26 14:34:56 UTC (rev 3765) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/qtl/QTL.java 2012-06-28 13:44:49 UTC (rev 3766) @@ -285,7 +285,7 @@ private String getDistinctSPARQLQuery(QueryTree<String> tree){ String query = tree.toSPARQLQueryString(); - query = "SELECT DISTINCT " + query.substring(7); +// query = "SELECT DISTINCT " + query.substring(7); return query; } Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner2.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner2.java 2012-06-26 14:34:56 UTC (rev 3765) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner2.java 2012-06-28 13:44:49 UTC (rev 3766) @@ -46,6 +46,7 @@ import org.dllearner.algorithm.tbsl.sparql.WeightedQuery; import org.dllearner.algorithm.tbsl.templator.Templator; import org.dllearner.algorithm.tbsl.util.Knowledgebase; +import org.dllearner.algorithm.tbsl.util.PopularityMap; import org.dllearner.algorithm.tbsl.util.Similarity; import org.dllearner.common.index.Index; import org.dllearner.common.index.IndexResultItem; @@ -139,6 +140,8 @@ private String [] grammarFiles = new String[]{"tbsl/lexicon/english.lex"}; + private PopularityMap popularityMap; + public SPARQLTemplateBasedLearner2(SparqlEndpoint endpoint, Index resourcesIndex, Index classesIndex, Index propertiesIndex){ this(endpoint, resourcesIndex, classesIndex, propertiesIndex, new StanfordPartOfSpeechTagger()); } @@ -777,33 +780,46 @@ } private double getProminenceValue(String uri, SlotType type){ - int cnt = 1; - String query = null; - if(type == SlotType.CLASS){ - query = "SELECT COUNT(?s) WHERE {?s a <%s>}"; - } else if(type == SlotType.PROPERTY || type == SlotType.SYMPROPERTY - || type == SlotType.DATATYPEPROPERTY || type == SlotType.OBJECTPROPERTY){ - query = "SELECT COUNT(*) WHERE {?s <%s> ?o}"; - } else if(type == SlotType.RESOURCE || type == SlotType.UNSPEC){ - query = "SELECT COUNT(*) WHERE {?s ?p <%s>}"; + Integer popularity = null; + if(popularityMap != null){ + if(type == SlotType.CLASS || type == SlotType.PROPERTY || type == SlotType.SYMPROPERTY + || type == SlotType.DATATYPEPROPERTY || type == SlotType.OBJECTPROPERTY){ + popularity = popularityMap.getPopularity(uri); + } + } + if(popularity == null){ + String query = null; + if(type == SlotType.CLASS){ + query = "SELECT COUNT(?s) WHERE {?s a <%s>}"; + } else if(type == SlotType.PROPERTY || type == SlotType.SYMPROPERTY + || type == SlotType.DATATYPEPROPERTY || type == SlotType.OBJECTPROPERTY){ + query = "SELECT COUNT(*) WHERE {?s <%s> ?o}"; + } else if(type == SlotType.RESOURCE || type == SlotType.UNSPEC){ + query = "SELECT COUNT(*) WHERE {?s ?p <%s>}"; + } + query = String.format(query, uri); + + ResultSet rs = executeSelect(query); + QuerySolution qs; + String projectionVar; + while(rs.hasNext()){ + qs = rs.next(); + projectionVar = qs.varNames().next(); + popularity = qs.get(projectionVar).asLiteral().getInt(); + } } - query = String.format(query, uri); - ResultSet rs = executeSelect(query); - QuerySolution qs; - String projectionVar; - while(rs.hasNext()){ - qs = rs.next(); - projectionVar = qs.varNames().next(); - cnt = qs.get(projectionVar).asLiteral().getInt(); - } + // if(cnt == 0){ // return 0; // } // return Math.log(cnt); - return cnt; + return popularity; } + public void setPopularityMap(PopularityMap popularityMap) { + this.popularityMap = popularityMap; + } private List<String> pruneList(List<String> words){ Added: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/PopularityMap.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/PopularityMap.java (rev 0) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/PopularityMap.java 2012-06-28 13:44:49 UTC (rev 3766) @@ -0,0 +1,163 @@ +package org.dllearner.algorithm.tbsl.util; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.HashMap; +import java.util.Map; + +import org.dllearner.core.owl.DatatypeProperty; +import org.dllearner.core.owl.NamedClass; +import org.dllearner.core.owl.ObjectProperty; +import org.dllearner.kb.sparql.ExtractionDBCache; +import org.dllearner.kb.sparql.SPARQLTasks; +import org.dllearner.kb.sparql.SparqlEndpoint; +import org.dllearner.kb.sparql.SparqlQuery; + +import com.hp.hpl.jena.query.QuerySolution; +import com.hp.hpl.jena.query.ResultSet; + +public class PopularityMap { + + enum EntityType { + CLASS, PROPERTY, RESOURCE + } + + private SparqlEndpoint endpoint; + private ExtractionDBCache cache; + private String file; + + private Map<String, Integer> class2Popularity = new HashMap<String, Integer>(); + private Map<String, Integer> property2Popularity = new HashMap<String, Integer>(); + private Map<String, Integer> resource2Popularity = new HashMap<String, Integer>(); + + public PopularityMap(String file, SparqlEndpoint endpoint, ExtractionDBCache cache) { + this.file = file; + this.endpoint = endpoint; + this.cache = cache; + + } + + public void init() { + boolean deserialized = deserialize(); + if(!deserialized){ + // load popularity of classes + for (NamedClass nc : new SPARQLTasks(endpoint).getAllClasses()) { + System.out.println("Computing popularity for " + nc); + String query = String.format("SELECT COUNT(?s) WHERE {?s a <%s>}", nc.getName()); + int popularity = loadPopularity(query); + class2Popularity.put(nc.getName(), Integer.valueOf(popularity)); + } + // load popularity of properties + for (ObjectProperty op : new SPARQLTasks(endpoint).getAllObjectProperties()) { + System.out.println("Computing popularity for " + op); + String query = String.format("SELECT COUNT(*) WHERE {?s <%s> ?o}", op.getName()); + int popularity = loadPopularity(query); + class2Popularity.put(op.getName(), Integer.valueOf(popularity)); + } + for (DatatypeProperty dp : new SPARQLTasks(endpoint).getAllDataProperties()) { + System.out.println("Computing popularity for " + dp); + String query = String.format("SELECT COUNT(*) WHERE {?s <%s> ?o}", dp.getName()); + int popularity = loadPopularity(query); + class2Popularity.put(dp.getName(), Integer.valueOf(popularity)); + } + serialize(); + } + } + + private void serialize(){ + ObjectOutputStream oos = null; + try { + oos = new ObjectOutputStream(new FileOutputStream(new File(file))); + oos.writeObject(class2Popularity); + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + if(oos != null){ + try { + oos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + } + } + + private boolean deserialize(){ + File mapFile = new File(file); + if(mapFile.exists()){ + ObjectInputStream ois = null; + try { + ois = new ObjectInputStream(new FileInputStream(new File(file))); + class2Popularity = (Map<String, Integer>) ois.readObject(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } finally { + if(ois != null){ + try { + ois.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + } + return true; + } + return false; + } + + private int loadPopularity(String query){ + int pop = 0; + ResultSet rs = SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(endpoint, query)); + QuerySolution qs; + String projectionVar; + while(rs.hasNext()){ + qs = rs.next(); + projectionVar = qs.varNames().next(); + pop = qs.get(projectionVar).asLiteral().getInt(); + } + return pop; + } + + public int getPopularity(String uri, EntityType entityType){ + Integer popularity; + if(entityType == EntityType.CLASS){ + popularity = class2Popularity.get(uri); + } else if(entityType == EntityType.PROPERTY){ + popularity = property2Popularity.get(uri); + } else { + popularity = resource2Popularity.get(uri); + } + return popularity; + } + + public Integer getPopularity(String uri){ + Integer popularity = class2Popularity.get(uri); + if(popularity == null){ + popularity = property2Popularity.get(uri); + } + if(popularity == null){ + popularity = resource2Popularity.get(uri); + } + return popularity; + } + + public static void main(String[] args) { + new PopularityMap("dbpedia_popularity.map", SparqlEndpoint.getEndpointDBpedia(), new ExtractionDBCache("cache")).init(); + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2012-06-26 14:35:07
|
Revision: 3765 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3765&view=rev Author: lorenz_b Date: 2012-06-26 14:34:56 +0000 (Tue, 26 Jun 2012) Log Message: ----------- Some extensions for new TBSL UI. Modified Paths: -------------- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner2.java trunk/components-ext/src/main/java/org/dllearner/common/index/SOLRIndex.java Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner2.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner2.java 2012-06-25 13:21:58 UTC (rev 3764) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner2.java 2012-06-26 14:34:56 UTC (rev 3765) @@ -268,6 +268,19 @@ this.resourcesIndex = knowledgebase.getResourceIndex(); this.classesIndex = knowledgebase.getClassIndex(); this.propertiesIndex = knowledgebase.getPropertyIndex(); + this.mappingIndex = knowledgebase.getMappingIndex(); + if(propertiesIndex instanceof SPARQLPropertiesIndex){ + if(propertiesIndex instanceof VirtuosoPropertiesIndex){ + datatypePropertiesIndex = new VirtuosoDatatypePropertiesIndex((SPARQLPropertiesIndex)propertiesIndex); + objectPropertiesIndex = new VirtuosoObjectPropertiesIndex((SPARQLPropertiesIndex)propertiesIndex); + } else { + datatypePropertiesIndex = new SPARQLDatatypePropertiesIndex((SPARQLPropertiesIndex)propertiesIndex); + objectPropertiesIndex = new SPARQLObjectPropertiesIndex((SPARQLPropertiesIndex)propertiesIndex); + } + } else { + datatypePropertiesIndex = propertiesIndex; + objectPropertiesIndex = propertiesIndex; + } } /* @@ -545,7 +558,7 @@ //add for each SYMPROPERTY Slot the reversed query for(Slot slot : sortedSlots){ for(WeightedQuery wQ : queries){ - if(slot.getSlotType() == SlotType.SYMPROPERTY){ + if(slot.getSlotType() == SlotType.SYMPROPERTY || slot.getSlotType() == SlotType.OBJECTPROPERTY){ Query reversedQuery = new Query(wQ.getQuery()); reversedQuery.getTriplesWithVar(slot.getAnchor()).iterator().next().reverse(); tmp.add(new WeightedQuery(reversedQuery)); Modified: trunk/components-ext/src/main/java/org/dllearner/common/index/SOLRIndex.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/common/index/SOLRIndex.java 2012-06-25 13:21:58 UTC (rev 3764) +++ trunk/components-ext/src/main/java/org/dllearner/common/index/SOLRIndex.java 2012-06-26 14:34:56 UTC (rev 3765) @@ -5,6 +5,7 @@ import java.util.List; import org.apache.solr.client.solrj.SolrQuery; +import org.apache.solr.client.solrj.SolrQuery.ORDER; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.BinaryRequestWriter; import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer; @@ -20,8 +21,11 @@ private static final int DEFAULT_LIMIT = 10; private static final int DEFAULT_OFFSET = 0; - private String searchField; + private String primarySearchField; + private String secondarySearchField; + private String sortField; + public SOLRIndex(String solrServerURL){ try { server = new CommonsHttpSolrServer(solrServerURL); @@ -31,10 +35,19 @@ } } - public void setSearchField(String searchField) { - this.searchField = searchField; + public void setSearchFields(String primarySearchField, String secondarySearchField){ + this.primarySearchField = primarySearchField; + this.secondarySearchField = secondarySearchField; } + public void setPrimarySearchField(String primarySearchField) { + this.primarySearchField = primarySearchField; + } + + public void setSecondarySearchField(String secondarySearchField) { + this.secondarySearchField = secondarySearchField; + } + @Override public List<String> getResources(String queryString) { return getResources(queryString, DEFAULT_LIMIT); @@ -81,9 +94,16 @@ QueryResponse response; try { - SolrQuery query = new SolrQuery((searchField != null) ? searchField + ":" + queryString : queryString); + String solrString = queryString; + if(primarySearchField != null){ + solrString = primarySearchField + ":" + "\"" + queryString + "\"" + "^2 " + queryString; + } + SolrQuery query = new SolrQuery(solrString); query.setRows(limit); query.setStart(offset); + if(sortField != null){ + query.addSortField(sortField, ORDER.desc); + } query.addField("score"); response = server.query(query); SolrDocumentList docList = response.getResults(); @@ -102,5 +122,9 @@ } return rs; } + + public void setSortField(String sortField){ + this.sortField = sortField; + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2012-06-25 13:22:09
|
Revision: 3764 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3764&view=rev Author: lorenz_b Date: 2012-06-25 13:21:58 +0000 (Mon, 25 Jun 2012) Log Message: ----------- Added option to set grammar files. Modified Paths: -------------- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner2.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/templator/Templator.java Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner2.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner2.java 2012-06-23 07:37:03 UTC (rev 3763) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner2.java 2012-06-25 13:21:58 UTC (rev 3764) @@ -137,12 +137,14 @@ private boolean multiThreaded = true; + private String [] grammarFiles = new String[]{"tbsl/lexicon/english.lex"}; + public SPARQLTemplateBasedLearner2(SparqlEndpoint endpoint, Index resourcesIndex, Index classesIndex, Index propertiesIndex){ this(endpoint, resourcesIndex, classesIndex, propertiesIndex, new StanfordPartOfSpeechTagger()); } public SPARQLTemplateBasedLearner2(Knowledgebase knowledgebase, PartOfSpeechTagger posTagger, WordNet wordNet, Options options){ - this(knowledgebase.getEndpoint(), knowledgebase.getResourceIndex(), knowledgebase.getPropertyIndex(), knowledgebase.getClassIndex(), posTagger, wordNet, options); + this(knowledgebase.getEndpoint(), knowledgebase.getResourceIndex(), knowledgebase.getClassIndex(),knowledgebase.getPropertyIndex(), posTagger, wordNet, options); } public SPARQLTemplateBasedLearner2(SparqlEndpoint endpoint, Index index){ @@ -247,9 +249,13 @@ } } + public void setGrammarFiles(String[] grammarFiles){ + templateGenerator.setGrammarFiles(grammarFiles); + } + @Override public void init() throws ComponentInitException { - templateGenerator = new Templator(posTagger, wordNet); + templateGenerator = new Templator(posTagger, wordNet, grammarFiles); lemmatizer = new LingPipeLemmatizer(); } @@ -260,8 +266,8 @@ public void setKnowledgebase(Knowledgebase knowledgebase){ this.endpoint = knowledgebase.getEndpoint(); this.resourcesIndex = knowledgebase.getResourceIndex(); - this.classesIndex = knowledgebase.getPropertyIndex(); - this.propertiesIndex = knowledgebase.getClassIndex(); + this.classesIndex = knowledgebase.getClassIndex(); + this.propertiesIndex = knowledgebase.getPropertyIndex(); } /* Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/templator/Templator.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/templator/Templator.java 2012-06-23 07:37:03 UTC (rev 3763) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/templator/Templator.java 2012-06-25 13:21:58 UTC (rev 3764) @@ -92,6 +92,27 @@ pp = new Preprocessor(USE_NER); } + public Templator(final PartOfSpeechTagger tagger, WordNet wordnet, String[] GRAMMAR_FILES) { + this.tagger = tagger; + this.wordnet = wordnet; + this.GRAMMAR_FILES = GRAMMAR_FILES; + + List<InputStream> grammarFiles = new ArrayList<InputStream>(); + for(int i = 0; i < GRAMMAR_FILES.length; i++){ + grammarFiles.add(this.getClass().getClassLoader().getResourceAsStream(GRAMMAR_FILES[i])); + } + + g = LTAG_Constructor.construct(grammarFiles); + + p = new Parser(); + p.SHOW_GRAMMAR = true; + p.USE_DPS_AS_INITTREES = true; + p.CONSTRUCT_SEMANTICS = true; + p.MODE = "LEIPZIG"; + + pp = new Preprocessor(USE_NER); +} + public Templator(boolean b) { this.tagger = new StanfordPartOfSpeechTagger(); this.USE_WORDNET = false; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2012-06-23 07:37:09
|
Revision: 3763 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3763&view=rev Author: lorenz_b Date: 2012-06-23 07:37:03 +0000 (Sat, 23 Jun 2012) Log Message: ----------- Some extension for TBSL web UI. Modified Paths: -------------- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner2.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/nlp/WordNet.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/templator/Templator.java Added Paths: ----------- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/Knowledgebase.java Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner2.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner2.java 2012-06-20 12:48:53 UTC (rev 3762) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner2.java 2012-06-23 07:37:03 UTC (rev 3763) @@ -45,6 +45,7 @@ import org.dllearner.algorithm.tbsl.sparql.Template; import org.dllearner.algorithm.tbsl.sparql.WeightedQuery; import org.dllearner.algorithm.tbsl.templator.Templator; +import org.dllearner.algorithm.tbsl.util.Knowledgebase; import org.dllearner.algorithm.tbsl.util.Similarity; import org.dllearner.common.index.Index; import org.dllearner.common.index.IndexResultItem; @@ -140,18 +141,46 @@ this(endpoint, resourcesIndex, classesIndex, propertiesIndex, new StanfordPartOfSpeechTagger()); } + public SPARQLTemplateBasedLearner2(Knowledgebase knowledgebase, PartOfSpeechTagger posTagger, WordNet wordNet, Options options){ + this(knowledgebase.getEndpoint(), knowledgebase.getResourceIndex(), knowledgebase.getPropertyIndex(), knowledgebase.getClassIndex(), posTagger, wordNet, options); + } + + public SPARQLTemplateBasedLearner2(SparqlEndpoint endpoint, Index index){ + this(endpoint, index, new StanfordPartOfSpeechTagger()); + } + public SPARQLTemplateBasedLearner2(SparqlEndpoint endpoint, Index resourcesIndex, Index classesIndex, Index propertiesIndex, PartOfSpeechTagger posTagger){ this(endpoint, resourcesIndex, classesIndex, propertiesIndex, posTagger, new WordNet(), new Options()); } + public SPARQLTemplateBasedLearner2(SparqlEndpoint endpoint, Index index, PartOfSpeechTagger posTagger){ + this(endpoint, index, posTagger, new WordNet(), new Options()); + } + public SPARQLTemplateBasedLearner2(SparqlEndpoint endpoint, Index resourcesIndex, Index classesIndex, Index propertiesIndex, WordNet wordNet){ this(endpoint, resourcesIndex, classesIndex, propertiesIndex, new StanfordPartOfSpeechTagger(), wordNet, new Options()); } + public SPARQLTemplateBasedLearner2(SparqlEndpoint endpoint, Index index, WordNet wordNet){ + this(endpoint, index, new StanfordPartOfSpeechTagger(), wordNet, new Options()); + } + + public SPARQLTemplateBasedLearner2(SparqlEndpoint endpoint, Index resourcesIndex, Index classesIndex, Index propertiesIndex, PartOfSpeechTagger posTagger, WordNet wordNet){ + this(endpoint, resourcesIndex, classesIndex, propertiesIndex, posTagger, wordNet, new Options(), new ExtractionDBCache("cache")); + } + + public SPARQLTemplateBasedLearner2(SparqlEndpoint endpoint, Index index, PartOfSpeechTagger posTagger, WordNet wordNet){ + this(endpoint, index, index, index, posTagger, wordNet, new Options(), new ExtractionDBCache("cache")); + } + public SPARQLTemplateBasedLearner2(SparqlEndpoint endpoint, Index resourcesIndex, Index classesIndex, Index propertiesIndex, PartOfSpeechTagger posTagger, WordNet wordNet, Options options){ this(endpoint, resourcesIndex, classesIndex, propertiesIndex, posTagger, wordNet, options, new ExtractionDBCache("cache")); } + public SPARQLTemplateBasedLearner2(SparqlEndpoint endpoint, Index index, PartOfSpeechTagger posTagger, WordNet wordNet, Options options){ + this(endpoint, index, index, index, posTagger, wordNet, options, new ExtractionDBCache("cache")); + } + public SPARQLTemplateBasedLearner2(SparqlEndpoint endpoint, Index resourcesIndex, Index classesIndex, Index propertiesIndex, PartOfSpeechTagger posTagger, WordNet wordNet, Options options, ExtractionDBCache cache){ this.endpoint = endpoint; this.resourcesIndex = resourcesIndex; @@ -228,6 +257,13 @@ this.mappingIndex = mappingIndex; } + public void setKnowledgebase(Knowledgebase knowledgebase){ + this.endpoint = knowledgebase.getEndpoint(); + this.resourcesIndex = knowledgebase.getResourceIndex(); + this.classesIndex = knowledgebase.getPropertyIndex(); + this.propertiesIndex = knowledgebase.getClassIndex(); + } + /* * Only for Evaluation useful. */ @@ -689,7 +725,7 @@ for (Iterator<WeightedQuery> iterator = queries.iterator(); iterator.hasNext();) { WeightedQuery wQ = iterator.next(); if(dropZeroScoredQueries){ - if(wQ.getScore() == 0){ + if(wQ.getScore() <= 0){ iterator.remove(); } } else { Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/nlp/WordNet.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/nlp/WordNet.java 2012-06-20 12:48:53 UTC (rev 3762) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/nlp/WordNet.java 2012-06-23 07:37:03 UTC (rev 3763) @@ -1,5 +1,6 @@ package org.dllearner.algorithm.tbsl.nlp; +import java.io.InputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -40,6 +41,15 @@ } } + public WordNet(InputStream propertiesStream) { + try { + JWNL.initialize(propertiesStream); + dict = Dictionary.getInstance(); + } catch (JWNLException e) { + e.printStackTrace(); + } + } + public List<String> getBestSynonyms(POS pos, String s) { List<String> synonyms = new ArrayList<String>(); Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/templator/Templator.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/templator/Templator.java 2012-06-20 12:48:53 UTC (rev 3762) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/templator/Templator.java 2012-06-23 07:37:03 UTC (rev 3763) @@ -57,7 +57,7 @@ boolean UNTAGGED_INPUT = true; boolean USE_NER = false; boolean USE_WORDNET = true; - boolean VERBOSE = false; + boolean VERBOSE = true; private String taggedInput; Added: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/Knowledgebase.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/Knowledgebase.java (rev 0) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/Knowledgebase.java 2012-06-23 07:37:03 UTC (rev 3763) @@ -0,0 +1,68 @@ +package org.dllearner.algorithm.tbsl.util; + +import org.dllearner.common.index.Index; +import org.dllearner.common.index.MappingBasedIndex; +import org.dllearner.kb.sparql.SparqlEndpoint; + +public class Knowledgebase { + + private String label; + private SparqlEndpoint endpoint; + private String description; + + private Index resourceIndex; + private Index propertyIndex; + private Index classIndex; + + private MappingBasedIndex mappingIndex; + + public Knowledgebase(SparqlEndpoint endpoint, String label, String description, + Index resourceIndex, Index propertyIndex, Index classIndex) { + this(endpoint, label, description, resourceIndex, propertyIndex, classIndex, null); + } + + public Knowledgebase(SparqlEndpoint endpoint, String label, String description, + Index resourceIndex, Index propertyIndex, Index classIndex, MappingBasedIndex mappingIndex) { + this.label = label; + this.endpoint = endpoint; + this.description = description; + this.resourceIndex = resourceIndex; + this.propertyIndex = propertyIndex; + this.classIndex = classIndex; + this.mappingIndex = mappingIndex; + } + + public String getLabel() { + return label; + } + + public SparqlEndpoint getEndpoint() { + return endpoint; + } + + public String getDescription() { + return description; + } + + public Index getResourceIndex() { + return resourceIndex; + } + + public Index getPropertyIndex() { + return propertyIndex; + } + + public Index getClassIndex() { + return classIndex; + } + + public MappingBasedIndex getMappingIndex() { + return mappingIndex; + } + + @Override + public String toString() { + return label; + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <seb...@us...> - 2012-06-20 12:49:01
|
Revision: 3762 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3762&view=rev Author: sebastianwtr Date: 2012-06-20 12:48:53 +0000 (Wed, 20 Jun 2012) Log Message: ----------- [tbsl exploration] submitting the last changes of the system Modified Paths: -------------- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Index/Index_utils.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Index/SQLiteIndex.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Sparql/Elements.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Sparql/TemplateBuilder.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Utils/Query.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Utils/QueryPair.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Utils/ServerUtil.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/exploration_main/MainInterface.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/exploration_main/Setting.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/exploration_main/exploration_main.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/modules/IterationModule.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/modules/LevenstheinModule.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/modules/WordnetModule.java Added Paths: ----------- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Utils/ElementStorage.java Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Index/Index_utils.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Index/Index_utils.java 2012-06-18 13:55:56 UTC (rev 3761) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Index/Index_utils.java 2012-06-20 12:48:53 UTC (rev 3762) @@ -7,6 +7,7 @@ import java.util.Map; import org.dllearner.algorithm.tbsl.exploration.Utils.DebugMode; +import org.dllearner.algorithm.tbsl.exploration.Utils.ElementStorage; import org.dllearner.algorithm.tbsl.exploration.exploration_main.Setting; @@ -103,7 +104,7 @@ } public static ArrayList<String> searchIndexForProperty(String string, SQLiteIndex myindex) throws SQLException{ - HashMap<String,Float> hm = new HashMap<String,Float>(); + //HashMap<String,Float> hm = new HashMap<String,Float>(); if(Setting.isDebugModus())DebugMode.debugPrint("######\n In search Index for Property"); // adding or set elements in Map by put method key and value pair @@ -113,13 +114,38 @@ map.put(23, 2.5f); map.put(64, 4.83f); */ - + ArrayList<String> result_List = new ArrayList<String>(); string=string.replace("_", " "); string=string.replace("-", " "); string=string.replace(".", " "); + if(string.contains("label")&&string.contains("name")){ + string="name"; + } + + /*String value= null; + value=ElementStorage.getStorage_property().get(string); + + if(value!=null){ + result_List.add(value); + return result_List; + } + else{*/ + String result_new= null; + if(Setting.isLoadedProperties()){ + try { + result_new = myindex.getManualPropertyURI(string); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if(result_new!=null){ + result_List.add(result_new); + ElementStorage.addStorage_property(string, result_new); + return result_List; + } + } String result=null; String result2 = null; - ArrayList<String> result_List = new ArrayList<String>(); if(string.substring(string.length()-1).contains("s")){ String neuer_string = string.substring(0, string.length() -1); @@ -133,18 +159,19 @@ //tmp2=myindex.getYagoURI(neuer_string.toLowerCase()); if(result2!=null){ result_List.add(result2); - hm.put(result, 1.0f); + //hm.put(result, 1.0f); } else if(result!=null){ result_List.add(result); - hm.put(result, 1.0f); + ElementStorage.addStorage_property(string, result); + //hm.put(result, 1.0f); if(Setting.isDebugModus())DebugMode.debugPrint("Found uri for: "+string.toLowerCase()); } else{ if(Setting.isDebugModus())DebugMode.debugErrorPrint("Didnt find uri for: "+string.toLowerCase()); result_List.add("http://dbpedia.org/ontology/"+string.toLowerCase().replace(" ", "_")); - hm.put(result, 0.0f); + //hm.put(result, 0.0f); } } else{ @@ -158,19 +185,22 @@ if(Setting.isDebugModus())DebugMode.debugPrint("Result: "+result); if(result2!=null){ result_List.add(result2); - hm.put(result, 1.0f); + //ElementStorage.addStorage_property(string, result2); + //hm.put(result, 1.0f); if(Setting.isDebugModus())DebugMode.debugPrint("Found uri for: "+string.toLowerCase()); } else if(result!=null){ result_List.add(result); - hm.put(result, 1.0f); + //ElementStorage.addStorage_property(string, result); + //hm.put(result, 1.0f); if(Setting.isDebugModus())DebugMode.debugPrint("Found uri for: "+string.toLowerCase()); } else{ if(Setting.isDebugModus())DebugMode.debugErrorPrint("Didnt find uri for: "+string.toLowerCase()); result_List.add("http://dbpedia.org/ontology/"+string.toLowerCase().replace(" ", "_")); - hm.put(result, 0.0f); + //ElementStorage.addStorage_property(string, "http://dbpedia.org/ontology/"+string.toLowerCase().replace(" ", "_")); + //hm.put(result, 0.0f); } } Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Index/SQLiteIndex.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Index/SQLiteIndex.java 2012-06-18 13:55:56 UTC (rev 3761) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Index/SQLiteIndex.java 2012-06-20 12:48:53 UTC (rev 3762) @@ -32,6 +32,7 @@ Class.forName( "org.sqlite.JDBC" ); conn = DriverManager.getConnection("jdbc:sqlite::memory:"); createIndexPropertys(); + createIndexManualPropertys(); createIndexResource(); createWordnetHelp(); createIndexOntology(); @@ -205,6 +206,30 @@ } + public String getManualPropertyURI(String string) throws SQLException, IOException{ + Statement stat = conn.createStatement(); + ResultSet rs; + string = string.replace("_"," "); + try { + rs = stat.executeQuery("select uri from manualproperty where name='"+string.toLowerCase()+"';"); + while(rs.next()){ + String result_string= rs.getString("uri"); + return result_string; + } + + } catch (Exception e) { + // TODO Auto-generated catch block + //e.printStackTrace(); + //System.err.println("Error in SQLiteIndex.getProperty!!"); + + + return null; + } + + return null; + } + + public String getontologyURI(String string) throws SQLException{ Statement stat = conn.createStatement(); ResultSet rs; @@ -449,6 +474,61 @@ System.out.println("Done"); } + + + +private void createIndexManualPropertys() throws ClassNotFoundException, SQLException{ + System.out.println("start indexing ManualProperties"); + Statement stat = conn.createStatement(); + stat.executeUpdate("drop table if exists manualproperty;"); + stat.executeUpdate("create table manualproperty (name, uri);"); + PreparedStatement prep = conn.prepareStatement("insert into manualproperty values (?, ?);"); + BufferedReader in=null; + int zaehler=0; + try { + in = new BufferedReader( + new InputStreamReader( + new FileInputStream( "/home/swalter/workspace/manualAddedProperties" ) ) ); + String s; + while( null != (s = in.readLine()) ) { + String[] tmp_array =s.split(":::"); + if(tmp_array.length>=2){ + prep.setString(1, tmp_array[0]); + prep.setString(2, tmp_array[1]); + prep.addBatch(); + zaehler=zaehler+1; + if(zaehler%1000000==0){ + conn.setAutoCommit(false); + prep.executeBatch(); + conn.setAutoCommit(false); + // System.out.println(zaehler+" done"); + } + + } + } + } catch( FileNotFoundException ex ) { + } catch( Exception ex ) { + System.out.println( ex ); + } finally { + if( in != null ) + try { + in.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + conn.setAutoCommit(false); + prep.executeBatch(); + conn.setAutoCommit(true); + System.out.println("Number of ManualProperty: "+zaehler); + System.out.println("Done"); + + } + + + private void createIndexResource() throws ClassNotFoundException, SQLException{ System.out.println("start indexing Resources"); Statement stat = conn.createStatement(); Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Sparql/Elements.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Sparql/Elements.java 2012-06-18 13:55:56 UTC (rev 3761) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Sparql/Elements.java 2012-06-20 12:48:53 UTC (rev 3762) @@ -2,8 +2,10 @@ import java.io.IOException; import java.util.ArrayList; +import java.util.HashMap; import org.dllearner.algorithm.tbsl.exploration.Utils.DebugMode; +import org.dllearner.algorithm.tbsl.exploration.Utils.ElementStorage; import org.dllearner.algorithm.tbsl.exploration.Utils.ServerUtil; import org.dllearner.algorithm.tbsl.exploration.exploration_main.Setting; @@ -27,7 +29,7 @@ } public Elements(ArrayList<ArrayList<String>> condition, ArrayList<ArrayList<Hypothesis>> hypothesen){ - + long start = System.currentTimeMillis(); /* * first all Classes! */ @@ -51,6 +53,8 @@ } if(Setting.isDebugModus())DebugMode.debugPrint("Created Elements"); + long stop = System.currentTimeMillis(); + Setting.addTime_elements(stop-start); } private void createElementsOfClasses(ArrayList<ArrayList<Hypothesis>> hypothesenList) throws IOException{ @@ -64,13 +68,25 @@ * if isA is found and if Class has uri, get Elements */ if(h.getType().contains("ISA")&&h.getUri().contains("http")){ + if(Setting.isDebugModus())DebugMode.debugPrint("Create Elements for Class: "+h.getName()+" Uri: "+h.getUri()); /* - * TODO: improver performance, using geschicktes zwischenspeichern + * Todo First Lookup an HashMap with if the resource is in it, if yes, take the results, + * if not, create new Elements */ - if(Setting.isDebugModus())DebugMode.debugPrint("Create Elements for Class: "+h.getName()+" Uri: "+h.getUri()); - ElementList el = new ElementList(h.getName(),h.getUri(),ServerUtil.getElementsForGivenClass(h.getUri())); + if(ElementStorage.getStorage_classes().containsKey(h.getUri())){ + ElementList el = new ElementList(h.getName(),h.getUri(),ElementStorage.getStorage_classes().get(h.getUri())); + this.addElements(el); + } + else{ + HashMap<String,String> tmp_hm = new HashMap<String,String>(); + tmp_hm=ServerUtil.getElementsForGivenClass(h.getUri()); + ElementList el = new ElementList(h.getName(),h.getUri(),tmp_hm); + ElementStorage.addStorage_classes(h.getUri(), tmp_hm); + this.addElements(el); + } + //ElementList el = new ElementList(h.getName(),h.getUri(),ServerUtil.getElementsForGivenClass(h.getUri())); //classes.add(el); - this.addElements(el); + //this.addElements(el); } } } @@ -90,18 +106,38 @@ for(ArrayList<String> cl : conditionList){ if(h.getVariable().equals(cl.get(0))) { - ElementList el = new ElementList(h.getName()+"RIGHT",h.getUri(),ServerUtil.getPropertiesForGivenResource(h.getUri(), "RIGHT")); - //resources.add(el); - this.addElements(el); + if(ElementStorage.getStorage_resource_right().containsKey(h.getUri())){ + ElementList el = new ElementList(h.getName()+"RIGHT",h.getUri(),ElementStorage.getStorage_resource_right().get(h.getUri())); + //resources.add(el); + this.addElements(el); + } + else{ + HashMap<String,String> tmp_hm = new HashMap<String,String>(); + tmp_hm=ServerUtil.getPropertiesForGivenResource(h.getUri(), "RIGHT"); + ElementList el = new ElementList(h.getName()+"RIGHT",h.getUri(),tmp_hm); + ElementStorage.addStorage_resource_right(h.getUri(), tmp_hm); + //resources.add(el); + this.addElements(el); + } + + } if(h.getVariable().equals(cl.get(2))) { - /* - * TDO: Geht hier in die Schleife, aber die Liste wird nicht hinzugefügt.... - */ - ElementList el_left = new ElementList(h.getName()+"LEFT",h.getUri(),ServerUtil.getPropertiesForGivenResource(h.getUri(), "LEFT")); - //resources.add(el); - //el_left.printAll(); - this.addElements(el_left); + + if(ElementStorage.getStorage_resource_left().containsKey(h.getUri())){ + ElementList el = new ElementList(h.getName()+"LEFT",h.getUri(),ElementStorage.getStorage_resource_left().get(h.getUri())); + //resources.add(el); + this.addElements(el); + } + else{ + HashMap<String,String> tmp_hm = new HashMap<String,String>(); + tmp_hm=ServerUtil.getPropertiesForGivenResource(h.getUri(), "LEFT"); + ElementList el = new ElementList(h.getName()+"LEFT",h.getUri(),tmp_hm); + ElementStorage.addStorage_resource_left(h.getUri(), tmp_hm); + //resources.add(el); + this.addElements(el); + } + } } Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Sparql/TemplateBuilder.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Sparql/TemplateBuilder.java 2012-06-18 13:55:56 UTC (rev 3761) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Sparql/TemplateBuilder.java 2012-06-20 12:48:53 UTC (rev 3762) @@ -47,8 +47,13 @@ ArrayList<Template> resultArrayList = new ArrayList<Template>(); Set<BasicQueryTemplate> querytemps =null; - querytemps = btemplator.buildBasicQueries(question); - + try{ + querytemps = btemplator.buildBasicQueries(question); + } + catch (Exception e){ + System.err.println("Error in Templategeneration"); + querytemps=null; + } /* * check if templates were build, if not, safe the question and delete it for next time from the xml file. @@ -83,7 +88,15 @@ long stop_template = System.currentTimeMillis(); + Setting.addTime_tbsl(stop_template-start); + + + + + + long start_builder = System.currentTimeMillis(); if(Setting.isDebugModus())DebugMode.waitForButton(); + if(querytemps!=null){ for (BasicQueryTemplate bqt : querytemps) { long start_part1= System.currentTimeMillis(); @@ -217,14 +230,10 @@ } if(slot.toString().contains("PROPERTY")){ - System.out.println("Slot.toString(): "+slot.toString()); String tmp= slot.toString().replace(" PROPERTY {", ""); tmp=tmp.replace("}",""); - System.out.println(tmp); String[] tmp_array = tmp.split(":"); if(tmp_array.length>1){ - System.out.println("tmp_array[0]:"+tmp_array[0]); - System.out.println("tmp_array[1]:"+tmp_array[1]); Hypothesis tmp_hypothesis = new Hypothesis("?"+tmp_array[0], tmp_array[1],tmp_array[1], "PROPERTY", 0.0); list_of_hypothesis.add(tmp_hypothesis); @@ -340,7 +349,6 @@ if(h.getType().contains("ISA")){ try { ArrayList<String> tmp = Index_utils.searchIndexForClass(h.getUri(), myindex); - System.out.println("Laenge tmp: "+tmp.size()); if(tmp.size()>0){ h.setUri(tmp.get(0)); h.setRank(1.0); @@ -354,7 +362,6 @@ if(h.getType().contains("RESOURCE")){ try { ArrayList<String> tmp = Index_utils.searchIndexForResource(h.getUri(), myindex); - System.out.println("Laenge tmp: "+tmp.size()); if(tmp.size()>0){ h.setUri(tmp.get(0)); h.setRank(1.0); @@ -453,10 +460,13 @@ } } - + long stop_builder = System.currentTimeMillis(); + Setting.addTime_builder(stop_builder-start_builder); if(Setting.isDebugModus())DebugMode.printTemplateList(resultArrayList, "Templates nach allen Verarbeitungsschritten"); return resultArrayList; } + return resultArrayList; + } } Added: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Utils/ElementStorage.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Utils/ElementStorage.java (rev 0) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Utils/ElementStorage.java 2012-06-20 12:48:53 UTC (rev 3762) @@ -0,0 +1,63 @@ +package org.dllearner.algorithm.tbsl.exploration.Utils; + +import java.util.HashMap; + +public class ElementStorage { +private static HashMap<String,HashMap<String,String>> storage_classes = new HashMap<String,HashMap<String,String>> (); +private static HashMap<String,HashMap<String,String>> storage_resource_right = new HashMap<String,HashMap<String,String>> (); +private static HashMap<String,HashMap<String,String>> storage_resource_left = new HashMap<String,HashMap<String,String>> (); +private static HashMap<String,String> storage_property= new HashMap<String,String> (); + +/* + * First String contains URI + */ +public static HashMap<String,HashMap<String,String>> getStorage_classes() { + return storage_classes; +} + +public static void setStorage_classes(HashMap<String,HashMap<String,String>> storage_classes) { + ElementStorage.storage_classes = storage_classes; +} + +public static void addStorage_classes(String key, HashMap<String,String> value) { + ElementStorage.storage_classes.put(key, value); +} + +public static HashMap<String,HashMap<String,String>> getStorage_resource_right() { + return storage_resource_right; +} + +public static void setStorage_resource_right(HashMap<String,HashMap<String,String>> storage_resource_right) { + ElementStorage.storage_resource_right = storage_resource_right; +} + +public static void addStorage_resource_right(String key, HashMap<String,String> value) { + ElementStorage.storage_resource_right.put(key, value); +} + +public static HashMap<String,HashMap<String,String>> getStorage_resource_left() { + return storage_resource_left; +} + +public static void setStorage_resource_left(HashMap<String,HashMap<String,String>> storage_resource_left) { + ElementStorage.storage_resource_left = storage_resource_left; +} + +public static void addStorage_resource_left(String key, HashMap<String,String> value) { + ElementStorage.storage_resource_left.put(key, value); +} + +public static HashMap<String,String> getStorage_property() { + return storage_property; +} + +public static void setStorage_property(HashMap<String,String> storage_property) { + ElementStorage.storage_property = storage_property; +} + +public static void addStorage_property(String key, String value) { + ElementStorage.storage_property.put(key, value); +} + + +} Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Utils/Query.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Utils/Query.java 2012-06-18 13:55:56 UTC (rev 3761) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Utils/Query.java 2012-06-20 12:48:53 UTC (rev 3762) @@ -1,5 +1,6 @@ package org.dllearner.algorithm.tbsl.exploration.Utils; +import java.io.IOException; import java.util.ArrayList; import org.dllearner.algorithm.tbsl.exploration.Sparql.Hypothesis; @@ -46,16 +47,23 @@ for(ArrayList<Hypothesis> hypothesenList : givenHypothesenList){ String condition_new = condition; String Resource=null; + String PropertyName=null; + String Property=null; //System.out.println("New_Condition before replacing "+condition_new); double global_rank=0; boolean addQuery=true; for(Hypothesis h : hypothesenList){ if(h.getType().toLowerCase().contains("resource")){ - Resource=h.getName(); + Resource=h.getUri(); } + if(h.getType().toLowerCase().contains("property")){ + PropertyName=h.getName(); + Property=h.getUri(); + } - condition_new=condition_new.replace(h.getVariable(), "<"+h.getUri()+">"); + condition_new=condition_new.replace(h.getVariable()+" ", "<"+h.getUri()+"> "); + /* * Dont create a Query with variables, which dont have a correct uri */ @@ -86,6 +94,8 @@ String query="PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> "+t.getQueryType()+" "+t.getSelectTerm()+"?string WHERE {"+ condition_new+" OPTIONAL { "+ t.getSelectTerm()+" rdfs:label ?string. FILTER (lang(?string) = 'en') }"+ t.getFilter()+"}"+t.getOrderBy()+" "+t.getHaving() +" "+t.getLimit(); QueryPair qp = new QueryPair(query,global_rank); qp.setResource(Resource); + qp.setProperty(Property); + qp.setPropertyName(PropertyName); if(addQuery)queryList.add(qp); } @@ -93,6 +103,8 @@ String query="PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> "+t.getQueryType()+" "+t.getSelectTerm()+" WHERE {"+ condition_new+" "+ t.getFilter()+"}"+t.getOrderBy()+" "+t.getHaving() +" "+t.getLimit(); QueryPair qp = new QueryPair(query,global_rank); qp.setResource(Resource); + qp.setProperty(Property); + qp.setPropertyName(PropertyName); if(addQuery)queryList.add(qp); } Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Utils/QueryPair.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Utils/QueryPair.java 2012-06-18 13:55:56 UTC (rev 3761) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Utils/QueryPair.java 2012-06-20 12:48:53 UTC (rev 3762) @@ -3,6 +3,8 @@ public class QueryPair { private String Query; private String Resource; + private String Property; + private String PropertyName; private double rank; public String getQuery() { return Query; @@ -32,6 +34,18 @@ public void setResource(String resource) { Resource = resource; } + public String getProperty() { + return Property; + } + public void setProperty(String property) { + Property = property; + } + public String getPropertyName() { + return PropertyName; + } + public void setPropertyName(String propertyName) { + PropertyName = propertyName; + } } Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Utils/ServerUtil.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Utils/ServerUtil.java 2012-06-18 13:55:56 UTC (rev 3761) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/Utils/ServerUtil.java 2012-06-20 12:48:53 UTC (rev 3762) @@ -15,9 +15,10 @@ public class ServerUtil { - //String static server_Prefix="http://greententacle.techfak.uni-bielefeld.de:5171/sparql"; + //private static String server_Prefix="http://greententacle.techfak.uni-bielefeld.de:5171/sparql"; //private static String server_Prefix="http://dbpedia.org/sparql"; private static String server_Prefix="http://greententacle.techfak.uni-bielefeld.de:5171/sparql"; + //private static String server_Prefix="http://purpurtentacle.techfak.uni-bielefeld.de:8897/sparql"; //private static String server_Prefix="http://purpurtentacle.techfak.uni-bielefeld.de:8890/sparql"; private static int timeToTimeoutOnServer=3000; @@ -108,6 +109,7 @@ String result=""; /*System.out.println(verarbeitungsurl); System.out.println("side: "+ side);*/ + // System.out.println(verarbeitungsurl); result = getListOfElements(verarbeitungsurl); return generateList(result); @@ -121,26 +123,7 @@ */ public static HashMap<String,String> getElementsForGivenClass(String classUri) throws IOException{ - /* - PREFIX dbo: <http://dbpedia.org/ontology/> -SELECT DISTINCT ?p WHERE { - { ?x ?p ?y . } UNION { ?y ?p ?x . } - { - SELECT ?x { - ?x rdf:type dbo:Mountain . - } - LIMIT 10 - } -} -ORDER BY ?x - - - TODO:Try with different Limits - */ - /* - * TODO: Still a not "valid" url - */ String query="SELECT DISTINCT ?s ?p WHERE {{?x ?p ?y. ?p rdfs:label ?s. FILTER (lang(?s) = 'en').} UNION {?y ?p ?x. ?p rdfs:label ?s. FILTER (lang(?s) = 'en').} { SELECT ?x { ?x rdf:type <"+classUri+">.}LIMIT 10}}"; //System.out.println(query); //DebugMode.waitForButton(); @@ -243,8 +226,8 @@ } public static ArrayList<String> requestAnswerFromServer(String query){ + query=query.replace(">0",">"); String query_url=server_Prefix+"?default-graph-uri=&query="+createServerRequest(query)+"&format=text%2Fhtml&debug=on&timeout="; - //System.out.println(tmp); String result=""; HttpURLConnection connection = null; Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/exploration_main/MainInterface.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/exploration_main/MainInterface.java 2012-06-18 13:55:56 UTC (rev 3761) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/exploration_main/MainInterface.java 2012-06-20 12:48:53 UTC (rev 3762) @@ -11,6 +11,8 @@ import java.sql.SQLException; import java.util.ArrayList; +import net.didion.jwnl.JWNLException; + import org.dllearner.algorithm.tbsl.exploration.Index.SQLiteIndex; import org.dllearner.algorithm.tbsl.exploration.Sparql.Elements; import org.dllearner.algorithm.tbsl.exploration.Sparql.Hypothesis; @@ -31,6 +33,12 @@ public class MainInterface { //private static int anzahlAbgeschickterQueries = 10; + private static ArrayList<Template> global_template_list=new ArrayList<Template>(); + private static BasicTemplator btemplator_global; + private static SQLiteIndex myindex_global; + private static WordNet wordnet_global; + private static StanfordLemmatizer lemmatiser_global; + private static String type_global=""; public static ArrayList<String> startQuestioning(String question,BasicTemplator btemplator,SQLiteIndex myindex, WordNet wordnet,StanfordLemmatizer lemmatiser) throws ClassNotFoundException, SQLException, IOException{ @@ -87,6 +95,8 @@ //generate QueryPair String Question=""; + + //TODO: parallel here? for(Template t : template_list){ Question=t.getQuestion(); t.printAll(); @@ -110,6 +120,10 @@ //if(Setting.isDebugModus())printQueries(qp, "NORMAL", Question); //printQueries(qp, "NORMAL", Question); Setting.setAnzahlAbgeschickterQueries(10); + System.out.println("Following Querries were created:"); + for(QueryPair q : qp){ + System.out.println(q.getQuery()+" rank:"+q.getRank()); + } int anzahl=1; boolean go_on = true; @@ -124,6 +138,9 @@ go_on=false; //if(qp.size()<3)go_on=true; System.out.println("Got Answer from Server with this Query: "+ q.getQuery()); + if(Setting.isTagging()) write_ResourcePropertyInformation(q.getResource(),q.getPropertyName(),q.getProperty()); + + //printSingleQuery(q.getQuery(),Question); //go_on=true; boolean contains_uri=false; for(String s : answer_tmp){ @@ -162,6 +179,8 @@ System.out.println(answer); } if(wait)DebugMode.waitForButton(); + + if(answers.isEmpty()&&Setting.getModuleStep()>=2){ @@ -190,6 +209,7 @@ if(wait)DebugMode.waitForButton(); } + if(answers.isEmpty()&&Setting.getModuleStep()>=5){ System.out.println("NO Answer from Server =>Start Query Manipulation"); answers.clear(); @@ -202,7 +222,6 @@ - /* * return answers! */ @@ -229,23 +248,65 @@ boolean special=false; int anzahl; boolean go_on; - /*if(type.contains("SPECIAL")){ - type ="LEVENSTHEIN"; - special=true; - }*/ System.out.println("No answer from direkt match, start "+type+"Modul"); + + /*ArrayList<Thread> thread_list = new ArrayList<Thread>(); + ThreadGroup group = new ThreadGroup("QA-Threads"); + int anzahl_thread=0; + global_template_list.clear(); + global_template_list=template_list; + myindex_global=myindex; + wordnet_global=wordnet; + lemmatiser_global=lemmatiser; + type_global=type; + for(Template t : template_list){ + final int anzahl_thread_new=anzahl_thread; + + Thread t1; + try { + t1 = new Thread(group,String.valueOf(anzahl_thread)) + { + String blub=do_something(anzahl_thread_new); + }; + + thread_list.add(t1); + t1.start(); + + + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (JWNLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + anzahl_thread+=1; + + } + */ + + /* + * NOw wait until all are finished + */ + + /*for(int i =0; i<thread_list.size();i++){ + try { + thread_list.get(i).join(); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + }*/ + + + for(Template t : template_list){ try{ - /*if(test.contains("alt")){ - ArrayList<ArrayList<Hypothesis>> hypothesenSetList = IterationModule.doIteration(t.getElm(),t.getHypothesen(),t.getCondition(),type,myindex,wordnet,lemmatiser); - if(type.contains("WORDNET"))t.setHypothesenWordnet(hypothesenSetList); - if(type.contains("LEVENSTHEIN"))t.setHypothesenLevensthein(hypothesenSetList); - if(type.contains("RELATE"))t.setHypothesenRelate(hypothesenSetList); - }*/ - //if(test.contains("neu")){ - // System.err.println("IN NEU!!!!!"); ArrayList<ArrayList<Hypothesis>> hypothesenSetList = new ArrayList<ArrayList<Hypothesis>>(); @@ -275,6 +336,8 @@ } + + /* * Generate Queries and test queries */ @@ -299,12 +362,12 @@ //sort QueryPairs qp=LinearSort.doSort(qp); + qp=HeuristicSort.doHeuristicSort(qp, Question); //printQueries(qp, type, Question); - qp=HeuristicSort.doHeuristicSort(qp, Question); System.out.println("Following Querries were created:"); - for(QueryPair z : qp){ - System.out.println(z.getQuery()+" "+z.getRank()); + for(QueryPair q : qp){ + System.out.println(q.getQuery()+" rank:"+q.getRank()); } if(Setting.isDebugModus())printQueries(qp, type, Question); //printQueries(qp, type, Question); @@ -324,6 +387,8 @@ go_on=false; System.out.println("Got Answer from Server with this Query: "+ q.getQuery()); + if(Setting.isTagging()) write_ResourcePropertyInformation(q.getResource(),q.getPropertyName(),q.getProperty()); + //printSingleQuery(q.getQuery(),Question); if(qp.size()>(id+1)){ //&&anzahl<2 if(q.getRank()==qp.get(id+1).getRank()){ @@ -480,7 +545,7 @@ } private static void printQueries(ArrayList<QueryPair> qp, String type, String Question){ - String dateiname="/home/swalter/Dokumente/Auswertung/CreatedQueryListNLD"+Setting.getLevenstheinMin()+".txt"; + /*String dateiname="/home/swalter/Dokumente/Auswertung/CreatedQuery"+Setting.getLevenstheinMin()+".txt"; String result_string =""; //Open the file for reading try { @@ -508,7 +573,7 @@ /* * write only the first 10 queries: */ - for(QueryPair q : qp){ + /* for(QueryPair q : qp){ if(anzahl<10){ querylist+=q.getQuery()+" "+q.getRank()+"\n"; anzahl+=1; @@ -535,7 +600,54 @@ } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); + }*/ + } + + + + private static void printSingleQuery(String query,String Question){ + /*String dateiname="/home/swalter/Dokumente/Auswertung/WorkingQuery"+Setting.getLevenstheinMin()+".txt"; + String result_string =""; + //Open the file for reading + try { + BufferedReader br = new BufferedReader(new FileReader(dateiname)); + String thisLine; + while ((thisLine = br.readLine()) != null) { // while loop begins here + result_string+=thisLine+"\n"; + } // end while + } // end try + catch (IOException e) { + System.err.println("Error: " + e); + } + + File file = new File(dateiname); + BufferedWriter bw = null; + try { + bw = new BufferedWriter(new FileWriter(file)); + } catch (IOException e2) { + // TODO Auto-generated catch block + e2.printStackTrace(); + } + + + try { + bw.write(result_string+Question+" "+query+"\n"); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); } + try { + bw.flush(); + } catch (IOException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + try { + bw.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }*/ } @@ -767,6 +879,115 @@ } + + if(t.getCondition().size()>=30){ + ArrayList<ArrayList<Hypothesis>> new_hypothesen_list = new ArrayList<ArrayList<Hypothesis>>(); + for(ArrayList<Hypothesis> h_l :t.getHypothesen()){ + /* + * if greater 2, than it means, there are at least 3 propertys/resources or whatever + */ + + /* + * Resource ?x + * Property ?y + * Select auf ?z + */ + if(h_l.size()>2){ + if(h_l.get(0).getUri().contains("resource")){ + Hypothesis h_r= h_l.get(0); + Hypothesis h_p1= h_l.get(1); + Hypothesis h_p2= h_l.get(2); + h_r.setVariable("?x"); + h_p1.setVariable("?y"); + h_p2.setVariable("?y"); + ArrayList<Hypothesis> list_one = new ArrayList<Hypothesis>(); + ArrayList<Hypothesis> list_two = new ArrayList<Hypothesis>(); + list_one.add(h_r); + list_one.add(h_p1); + new_hypothesen_list.add(list_one); + list_two.add(h_r); + list_two.add(h_p2); + new_hypothesen_list.add(list_two); + } + else if(h_l.get(1).getUri().contains("resource")){ + Hypothesis h_r= h_l.get(1); + Hypothesis h_p1= h_l.get(0); + Hypothesis h_p2= h_l.get(2); + h_r.setVariable("?x"); + h_p1.setVariable("?y"); + h_p2.setVariable("?y"); + ArrayList<Hypothesis> list_one = new ArrayList<Hypothesis>(); + ArrayList<Hypothesis> list_two = new ArrayList<Hypothesis>(); + list_one.add(h_r); + list_one.add(h_p1); + new_hypothesen_list.add(list_one); + list_two.add(h_r); + list_two.add(h_p2); + new_hypothesen_list.add(list_two); + } + else{ + Hypothesis h_r= h_l.get(2); + Hypothesis h_p1= h_l.get(1); + Hypothesis h_p2= h_l.get(0); + h_r.setVariable("?x"); + h_p1.setVariable("?y"); + h_p2.setVariable("?y"); + ArrayList<Hypothesis> list_one = new ArrayList<Hypothesis>(); + ArrayList<Hypothesis> list_two = new ArrayList<Hypothesis>(); + list_one.add(h_r); + list_one.add(h_p1); + new_hypothesen_list.add(list_one); + list_two.add(h_r); + list_two.add(h_p2); + new_hypothesen_list.add(list_two); + + } + } + } + + ArrayList<ArrayList<String>> condition_new=new ArrayList<ArrayList<String>>(); + ArrayList<String> con = new ArrayList<String>(); + con.add("?x"); + con.add("?y"); + con.add("?z"); + condition_new.add(con); + + ArrayList<ArrayList<String>> condition_new_r=new ArrayList<ArrayList<String>>(); + ArrayList<String> con_r = new ArrayList<String>(); + con_r.add("?z"); + con_r.add("?y"); + con_r.add("?x"); + condition_new_r.add(con_r); + + + + Template template_new = new Template(condition_new,"SELECT", t.getHaving(), t.getFilter(), "?z", t.getOrderBy(), t.getLimit(), t.getQuestion()); + template_new.setHypothesen(new_hypothesen_list); + template_new.setElm(t.getElm()); + + Template template_new_r = new Template(condition_new_r,"SELECT", t.getHaving(), t.getFilter(), "?z", t.getOrderBy(), t.getLimit(), t.getQuestion()); + template_new_r.setHypothesen(new_hypothesen_list); + template_new_r.setElm(t.getElm()); + + Elements elm = new Elements(template_new.getCondition(),template_new.getHypothesen()); + if(elm.isElementEmty()==false){ + //elm.printAll(); + template_new.setElm(elm); + new_template_list.add(template_new); + } + + Elements elm_r = new Elements(template_new.getCondition(),template_new.getHypothesen()); + if(elm.isElementEmty()==false){ + //elm.printAll(); + template_new_r.setElm(elm_r); + new_template_list.add(template_new_r); + } + + + + //new_template_list.add(template_new); + //new_template_list.add(template_new_r); + } } /* @@ -785,4 +1006,80 @@ return answers; } + + + private static String do_something(int number) throws SQLException, JWNLException, IOException{ + //String str_number=Thread.currentThread().getName(); + //System.out.println("ThreadName: "+str_number); + //int number= Integer.parseInt(str_number); + ArrayList<ArrayList<Hypothesis>> hypothesenSetList = new ArrayList<ArrayList<Hypothesis>>(); + + + for(ArrayList<Hypothesis> l_h : global_template_list.get(number).getHypothesen()){ + ArrayList<ArrayList<Hypothesis>> generated_hypothesis = new ArrayList<ArrayList<Hypothesis>>(); + generated_hypothesis= IterationModule.new_iteration(global_template_list.get(number).getElm(),l_h,global_template_list.get(number).getCondition(),type_global,myindex_global,wordnet_global,lemmatiser_global); + for(ArrayList<Hypothesis> h_t : generated_hypothesis){ + ArrayList<Hypothesis> new_hypothesen_set = new ArrayList<Hypothesis>(); + for(Hypothesis bla : h_t){ + new_hypothesen_set.add(bla); + } + hypothesenSetList.add(new_hypothesen_set); + } + + //hypothesenSetList.addAll(blub); + } + if(type_global.contains("WORDNET"))global_template_list.get(number).setHypothesenWordnet(hypothesenSetList); + if(type_global.contains("LEVENSTHEIN"))global_template_list.get(number).setHypothesenLevensthein(hypothesenSetList); + if(type_global.contains("RELATE"))global_template_list.get(number).setHypothesenRelate(hypothesenSetList); + return "DONE"; + + } + + private static void write_ResourcePropertyInformation(String Resource, String PropertyName, String Property){ + String dateiname="/home/swalter/Dokumente/Auswertung/ResourcePropertyRelation.txt"; + String result_string =""; + //Open the file for reading + try { + BufferedReader br = new BufferedReader(new FileReader(dateiname)); + String thisLine; + while ((thisLine = br.readLine()) != null) { // while loop begins here + result_string+=thisLine+"\n"; + } // end while + } // end try + catch (IOException e) { + System.err.println("Error: " + e); + } + + + + File file = new File(dateiname); + BufferedWriter bw = null; + try { + bw = new BufferedWriter(new FileWriter(file)); + } catch (IOException e2) { + // TODO Auto-generated catch block + e2.printStackTrace(); + } + + + + try { + bw.write(result_string+Resource+"::"+PropertyName+"::"+Property+"\n"); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + try { + bw.flush(); + } catch (IOException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + try { + bw.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } } Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/exploration_main/Setting.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/exploration_main/Setting.java 2012-06-18 13:55:56 UTC (rev 3761) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/exploration_main/Setting.java 2012-06-20 12:48:53 UTC (rev 3762) @@ -14,9 +14,15 @@ private static boolean loadedProperties; private static int version; private static boolean saveAnsweredQueries; + private static boolean tagging; + private static boolean loadTagging; + private static long time_tbsl; + private static long time_builder; + private static long time_elements; + public static boolean isWaitModus() { return waitModus; } @@ -90,6 +96,54 @@ public static void setSaveAnsweredQueries(boolean saveAnsweredQueries) { Setting.saveAnsweredQueries = saveAnsweredQueries; } + public static long getTime_tbsl() { + return time_tbsl; + } + public static void setTime_tbsl(long time_tbsl) { + Setting.time_tbsl = time_tbsl; + } + + public static void addTime_tbsl(long time_tbsl) { + long tmp=getTime_tbsl(); + Setting.time_tbsl = time_tbsl+tmp; + } + public static long getTime_builder() { + return time_builder; + } + public static void setTime_builder(long time_builder) { + Setting.time_builder = time_builder; + } + + public static void addTime_builder(long time_builder) { + long tmp=getTime_builder(); + Setting.time_builder = time_builder+tmp; + } + public static long getTime_elements() { + return time_elements; + } + public static void setTime_elements(long time_elements) { + Setting.time_elements = time_elements; + } + + public static void addTime_elements(long time_elements) { + long tmp = getTime_elements(); + Setting.time_elements = time_elements+tmp; + } + public static boolean isTagging() { + //if(isLoadTagging()) return false; + return tagging; + } + public static void setTagging(boolean tagging) { + Setting.tagging = tagging; + } + public static boolean isLoadTagging() { + if(isTagging())return false; + else return loadTagging; + } + public static void setLoadTagging(boolean loadTagging) { + Setting.loadTagging = loadTagging; + } + } Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/exploration_main/exploration_main.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/exploration_main/exploration_main.java 2012-06-18 13:55:56 UTC (rev 3761) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/exploration_main/exploration_main.java 2012-06-20 12:48:53 UTC (rev 3762) @@ -9,6 +9,7 @@ import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; +import java.io.PrintStream; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -44,6 +45,9 @@ System.out.println("Starting Main File"); long startInitTime = System.currentTimeMillis(); + //PrintStream err = new PrintStream(new FileOutputStream("/home/swalter/Dokumente/ERRListe.txt")); + //System.setErr(err); + /* * Initial Index and Templator */ @@ -66,6 +70,7 @@ Setting.setThresholdSelect(0.5); Setting.setLoadedProperties(false); Setting.setSaveAnsweredQueries(false); + Setting.setTagging(false); //default //Setting.setVersion(1); /* @@ -73,7 +78,7 @@ * 2= "Normal" + Levensthein * 3= Normal+Levensthein+Wordnet */ - Setting.setModuleStep(5); + Setting.setModuleStep(4); Setting.setEsaMin(0.4); @@ -84,7 +89,7 @@ boolean startQuestioning = true; while(schleife==true){ BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); - String line; + String line=""; startQuestioning = true; try { System.out.println("\n\n"); @@ -134,35 +139,40 @@ } - + if(line.contains(":xml")&& schleife==true){ TimeZone.setDefault(TimeZone.getTimeZone("GMT")); + + float global_tbsl_avaerage = 0; + float global_builder_average=0; - //for(int i = 1; i<2;i++){ + for(int i = 1; i<2;i++){ //double min = 0.95; //min+=(i*0.05); - /*if(i==1){ + if(i==1){ line="/home/swalter/Dokumente/Auswertung/XMLDateien/dbpedia-train-tagged-new.xml"; } if(i==2){ line="/home/swalter/Dokumente/Auswertung/XMLDateien/dbpedia-test-new-tagged2.xml"; - }*/ + } - line="/home/swalter/Dokumente/Auswertung/XMLDateien/dbpedia-train-tagged-new.xml"; + //line="/home/swalter/Dokumente/Auswertung/Yahoo/works"; + //line="/home/swalter/Dokumente/Auswertung/XMLDateien/dbpedia-test-new-tagged2.xml"; for(int j=1;j<2;j++){ - Setting.setVersion(1); + //Setting.setVersion(99); - for(int z=1;z<7;z++){ + for(int z=4;z<5;z++){ //Setting.setLevenstheinMin(min); Setting.setLevenstheinMin(0.95); //Setting.setThresholdSelect(0.4); - Setting.setModuleStep(2); + Setting.setModuleStep(z); Setting.setThresholdSelect(0.5); - Setting.setEsaMin(0.0+(z/10.0)); + Setting.setEsaMin(0.4); Setting.setLoadedProperties(false); + Setting.setTagging(false); /*if(i==2)Setting.setLoadedProperties(true); else Setting.setLoadedProperties(false); */ @@ -174,6 +184,7 @@ ArrayList<queryInformation> list_of_structs = new ArrayList<queryInformation>(); list_of_structs=generateStruct(line,true); + //list_of_structs=generateStructTextfile(line,true); //Start Time measuring long startTime = System.currentTimeMillis(); @@ -192,7 +203,18 @@ long stopTime = System.currentTimeMillis(); System.out.println("For "+anzahl+" Questions the QA_System took "+ ((stopTime-startTime)/1000)+"sek"); + System.out.println("Tbsl took overall: "+Setting.getTime_tbsl()+"ms"); + System.out.println("Builder took overall: "+Setting.getTime_builder()+"ms"); + int anzahl_questions=list_of_structs.size(); + System.out.println("Tbsl Average: "+Setting.getTime_tbsl()/anzahl_questions+"ms"); + System.out.println("Builder Average: "+Setting.getTime_builder()/anzahl_questions+"ms"); + System.out.println("Elements Average: "+Setting.getTime_elements()/anzahl_questions+"ms"); + System.out.println("OverallTime Average: "+(stopTime-startTime)/anzahl_questions+"ms"); + global_tbsl_avaerage+=Setting.getTime_tbsl()/anzahl_questions; + global_builder_average+=Setting.getTime_builder()/anzahl_questions; + + String filename=""; filename=createXML(list_of_structs,((stopTime-startTime)/1000)); String filename_for_evaluation="/home/swalter/Dokumente/Auswertung/ResultXml/"+filename; @@ -237,16 +259,20 @@ - // } + } + System.out.println("Average Tbsl:"+global_tbsl_avaerage/4/1000); + System.out.println("Average Builder:"+global_builder_average/4/1000); /*schleife=false; System.out.println("Bye!"); System.exit(0);*/ } + //else else if(schleife==true && startQuestioning ==true){ long startTime = System.currentTimeMillis(); queryInformation result = new queryInformation(line,"0","",false,false,false,"non",false); + //line="Give/VB me/PRP all/DT actors/NNS starring/VBG in/IN Batman/NNP Begins/NNP"; MainInterface.startQuestioning(line,btemplator,myindex,wordnet,lemmatiser); ArrayList<String> ergebnis = result.getResult(); //get eacht result only once! @@ -260,6 +286,7 @@ } long endTime= System.currentTimeMillis(); System.out.println("\n The complete answering of the Question took "+(endTime-startTime)+" ms"); + //System.exit(0); } } catch (IOException e) { @@ -539,5 +566,53 @@ } + +private static ArrayList<queryInformation> generateStructTextfile(String filename, boolean hint) { + + + + BufferedReader in = null; + ArrayList<queryInformation> querylist = new ArrayList<queryInformation>(); + String tmp=""; + // Lies Textzeilen aus der Datei in einen Vector: + try { + in = new BufferedReader( + new InputStreamReader( + new FileInputStream(filename) ) ); + String s; + int anzahl=0; + String XMLType="dbpedia-train"; + while( null != (s = in.readLine()) ) { + anzahl+=1; + queryInformation blaquery=new queryInformation(s.replace("\n", ""), Integer.toString(anzahl),"",false,false,false,XMLType,false); + querylist.add(blaquery); + } + } catch( FileNotFoundException ex ) { + } catch( Exception ex ) { + System.out.println( ex ); + } finally { + if( in != null ) + try { + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + + + + + for(queryInformation s : querylist){ + System.out.println(""); + if(s.getId()==""||s.getId()==null)System.out.println("NO"); + System.out.println("ID: "+s.getId()); + System.out.println("Query: "+s.getQuery()); + System.out.println("Type: "+s.getType()); + System.out.println("XMLType: "+s.getXMLtype()); + } + return querylist; + } + } Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/modules/IterationModule.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/modules/IterationModule.java 2012-06-18 13:55:56 UTC (rev 3761) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/modules/IterationModule.java 2012-06-20 12:48:53 UTC (rev 3762) @@ -109,7 +109,6 @@ e1.printStackTrace(); }*/ if(givenConditionList.size()==1){ - System.err.println("Only one Condition => simple Struktur"); simple_structure=true; boolean resource_case=false; @@ -188,7 +187,6 @@ * two conditions! */ if(givenConditionList.size()==2){ - System.out.println("two Conditions => NOT simple Struktur"); ArrayList<ElementList> resources = new ArrayList<ElementList>(); boolean gotResource=true; try{ @@ -259,7 +257,6 @@ * */ if((condition1_exists_isa||condition2_exists_isa)&&gotResource&&(condition1_exists_resource||condition2_exists_resource)){ - System.err.println("CASE1"); String class_variable=null; String class_property_variable=null; ArrayList<String> working_condition=new ArrayList<String>(); @@ -345,7 +342,6 @@ * ISA */ else if((condition1_exists_isa||condition2_exists_isa)&&gotResource){ - System.err.println("CASE2"); /* * get Hypothese for the Class */ @@ -421,7 +417,6 @@ else if((condition1_exists_resource||condition2_exists_resource)&&gotResource){ - System.err.println("CASE3"); String property_name=""; String second_property_name=""; String property_variable=""; @@ -470,26 +465,26 @@ for(Hypothesis h_temp : resultHypothesenList) { String Query=""; if(property_side_new.contains("LEFT")){ - Query= "SELECT DISTINCT ?s ?x WHERE {<"+ resource_h.getUri()+"> <"+h_temp.getUri()+"> ?x. ?x rdfs:label ?s. FILTER (lang(?s) = 'en') }"; + //{ [] foaf:name ?name1 } UNION { [] vCard:FN ?name2 } + Query= "SELECT DISTINCT ?s ?x WHERE {{<"+ resource_h.getUri()+"> <"+h_temp.getUri()+"> ?x} UNION {<"+ resource_h.getUri()+"> <"+h_temp.getUri().replace("property", "ontology")+"> ?x}. ?x rdfs:label ?s. FILTER (lang(?s) = 'en') }"; } else{ - Query= "SELECT DISTINCT ?s ?x WHERE {?x <"+h_temp.getUri()+"> <"+ resource_h.getUri()+"> . ?x rdfs:label ?s. FILTER (lang(?s) = 'en') }"; + Query= "SELECT DISTINCT ?s ?x WHERE {{?x <"+h_temp.getUri()+"> <"+ resource_h.getUri()+">} UNION {?x <"+h_temp.getUri().replace("property", "ontology")+"> <"+ resource_h.getUri()+">} . ?x rdfs:label ?s. FILTER (lang(?s) = 'en') }"; } /* * Now use the variable from the second condition which does not has an Resource in the Hypothesis */ - System.out.println("Query: "+Query); HashMap<String, String> hm_newClasses=ServerUtil.generatesQueryForOutsideClasses(Query); ArrayList<Hypothesis> second_resultHypothesenList=new ArrayList<Hypothesis>(); - second_resultHypothesenList = creatNewPropertyList(type, myindex, wordnet, lemmatiser, second_property_variable, second_property_name,hm_newClasses,resource_h.getName()); + for(Hypothesis second_h_temp : second_resultHypothesenList) { ArrayList<Hypothesis> temp_al = new ArrayList<Hypothesis>(); temp_al.add(resource_h); Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/modules/LevenstheinModule.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/modules/LevenstheinModule.java 2012-06-18 13:55:56 UTC (rev 3761) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/modules/LevenstheinModule.java 2012-06-20 12:48:53 UTC (rev 3762) @@ -32,122 +32,8 @@ boolean found_property_in_loaded_property=false; boolean found_property_in_created_property=false; - if(Setting.isLoadedProperties()){ - System.out.println("in Loaded!!"); - //Open the file for reading - try { - BufferedReader br = new BufferedReader(new FileReader(dateiname)); - String thisLine; - while ((thisLine = br.readLine()) != null) { // while loop begins here - String[] tmp_array = thisLine.split("::"); - if(tmp_array.length>1){ - loaded_properties.put(tmp_array[0].replace("\n", ""), tmp_array[1].replace("\n", "")); - } - - } // end while - } // end try - catch (IOException e) { - System.err.println("Error: " + e); - } - for (Entry<String, String> entry_loaded : loaded_properties.entrySet()) { - - String key_loaded= entry_loaded.getKey(); - String value_loaded= entry_loaded.getValue(); - if(key_loaded.replace("_", " ").equals(property_to_compare_with.replace("_", " ").toLowerCase())){ - System.out.println("FOUND!!"); - for (Entry<String, String> entry : properties.entrySet()) { - String key = entry.getKey(); - key=key.replace("\"",""); - key=key.replace("@en",""); - key=key.replace("(μ)", ""); - key=key.replace("(cm)", ""); - key=key.toLowerCase(); - String value = entry.getValue(); - /*System.out.println("KEY_old:"+key); - System.out.println("value_loaded:"+value_loaded+"DONE"); - System.out.println("Value:"+value); - System.out.println("\n");*/ - if(key.equals(value_loaded)){ - Hypothesis h = new Hypothesis(variable, key, value, "PROPERTY", 2.0); - listOfNewHypothesen.add(h); - h.printAll(); - found_property_in_loaded_property=true; - } - } - } - - } - } - /* - * createdPropertyCombinations - */ - - /* - * Second read in File with the propertys, which were created, when a query produced an answer and query had the rank >0.8 - * and the property hast the given "matserresource" - */ - /* if(found_property_in_loaded_property==false&&Setting.isSaveAnsweredQueries()){ - HashMap<String, String> created_properties = new HashMap<String, String>(); - System.out.println("in Save!!"); - dateiname="/home/swalter/workspace/createdPropertyCombinations"; - System.out.println("Resource to compare: "+resource_name); - //Open the file for reading - try { - BufferedReader br = new BufferedReader(new FileReader(dateiname)); - String thisLine; - while ((thisLine = br.readLine()) != null) { // while loop begins here - String[] tmp_array = thisLine.split("::"); - if(tmp_array.length>2){ - - // check, if the given resource is equal to the reosource loaded from the file! - - if(tmp_array[0].toLowerCase().replace("\n", "").equals(resource_name.toLowerCase())){ - created_properties.put(tmp_array[1].replace("\n", ""), tmp_array[2].replace("\n", "")); - } - - } - - } // end while - } // end try - catch (IOException e) { - System.err.println("Error: " + e); - } - if(!created_properties.isEmpty()){ - for (Entry<String, String> entry_loaded : created_properties.entrySet()) { - - String key_loaded= entry_loaded.getKey(); - String value_loaded= entry_loaded.getValue(); - if(key_loaded.replace("_", " ").equals(property_to_compare_with.replace("_", " ").toLowerCase())){ - System.out.println("FOUND!!"); - for (Entry<String, String> entry : properties.entrySet()) { - String key = entry.getKey(); - key=key.replace("\"",""); - key=key.replace("@en",""); - key=key.replace("(μ)", ""); - key=key.replace("(cm)", ""); - key=key.toLowerCase(); - String value = entry.getValue(); - System.out.println("KEY_old:"+key); - System.out.println("value_loaded:"+value_loaded+"DONE"); - System.out.println("Value:"+value); - System.out.println("\n"); - if(key.equals(value_loaded)){ - Hypothesis h = new Hypothesis(variable, key, value, "PROPERTY", 2.0); - listOfNewHypothesen.add(h); - h.printAll(); - found_property_in_created_property=true; - } - } - } - - } - } - - - }*/ - if(found_property_in_loaded_property==false||found_property_in_created_property==false){ //} @@ -211,7 +97,6 @@ } else if(compare_property.substring(compare_property.length()-2).contains("ed")){ String compare_property_neu = compare_property.substring(0, compare_property.length() -2); - System.out.println("NEW compare_property: "+compare_property_neu); if(key.contains(compare_property_neu)||compare_property_neu.contains(key)){ Hypothesis h = new Hypothesis(variable, key, value, "PROPERTY", 0.95); Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/modules/WordnetModule.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/modules/WordnetModule.java 2012-06-18 13:55:56 UTC (rev 3761) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/exploration/modules/WordnetModule.java 2012-06-20 12:48:53 UTC (rev 3762) @@ -20,14 +20,12 @@ public class WordnetModule { - private static int explorationdepthwordnet =0; + private static int explorationdepthwordnet =1; public static ArrayList<Hypothesis> doWordnet(String variable, String property_to_compare_with, HashMap<String, String> properties, SQLiteIndex myindex,WordNet wordnet,StanfordLemmatizer lemmatiser) throw... [truncated message content] |
From: <chr...@us...> - 2012-06-18 13:56:05
|
Revision: 3761 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3761&view=rev Author: christinaunger Date: 2012-06-18 13:55:56 +0000 (Mon, 18 Jun 2012) Log Message: ----------- [tbsl] re-arrange regex parts in the correct order (if the user says "gas central heating", he's getting "gas central heating"...) Modified Paths: -------------- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/converter/DRS2SPARQL_Converter.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/templator/Templator.java Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/converter/DRS2SPARQL_Converter.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/converter/DRS2SPARQL_Converter.java 2012-06-18 12:51:44 UTC (rev 3760) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/converter/DRS2SPARQL_Converter.java 2012-06-18 13:55:56 UTC (rev 3761) @@ -29,6 +29,7 @@ private boolean silent = true; // suppresses console output private boolean oxford = true; + private String inputstring = null; List<Slot> slots; Template template; List<Integer> usedInts; @@ -44,6 +45,9 @@ usedInts = new ArrayList<Integer>(); } + public void setInputString(String s) { + inputstring = s; + } public void setSlots(List<Slot> ls) { slots = ls; } @@ -457,7 +461,7 @@ String var; String newvar; - String regex = ""; + List<String> regexs = new ArrayList<String>(); String[] forbidden = {"regextoken","regex","count","minimum","maximum","greater","less","greaterorequal","lessorequal","equal","sum","location","description"}; Set<Simple_DRS_Condition> used = new HashSet<Simple_DRS_Condition>(); @@ -473,7 +477,9 @@ } } if (takeit) { - regex += cond.getPredicate().replace("SLOT","").replaceAll("_"," "); + for (String s : cond.getPredicate().replace("SLOT","").replaceAll("_"," ").trim().split(" ")) { + regexs.add(s); + } used.add(cond); } else if (!cond.getPredicate().equals("regextoken")) { @@ -482,9 +488,9 @@ } } } - if (!regex.isEmpty()) { + if (!regexs.isEmpty()) { c.getArguments().remove(1); - c.getArguments().add(new DiscourseReferent("'"+regex.trim()+"'")); + c.getArguments().add(new DiscourseReferent("'"+orderedRegex(regexs)+"'")); c.setPredicate("regex"); } else { used.add(c); } // TODO should not happen! @@ -503,7 +509,7 @@ for (Simple_DRS_Condition c : drs.getAllSimpleConditions()) { String d = ""; String d2 = ""; - String newregex = ""; + List<String> regextokens = new ArrayList<String>(); if (c.getPredicate().equals("SLOT_description")) { d = c.getArguments().get(0).getValue(); d2 = c.getArguments().get(1).getValue(); @@ -519,14 +525,16 @@ for (Simple_DRS_Condition cond : drs.getAllSimpleConditions()) { if (cond.getPredicate().equals("regex") && (cond.getArguments().get(0).getValue().equals(d) || cond.getArguments().get(0).getValue().equals(d2))) { - newregex += cond.getArguments().get(1).getValue().replaceAll("'","").replaceAll("_"," ").trim() + " "; + for (String s : cond.getArguments().get(1).getValue().replaceAll("'","").replaceAll("_"," ").trim().split(" ")) { + regextokens.add(s); + } oldconds.add(cond); } } for (Simple_DRS_Condition cond : oldconds) drs.removeCondition(cond); List<DiscourseReferent> newrefs = new ArrayList<DiscourseReferent>(); newrefs.add(new DiscourseReferent(d)); - newrefs.add(new DiscourseReferent("'"+newregex.trim()+"'")); + newrefs.add(new DiscourseReferent("'"+orderedRegex(regextokens)+"'")); drs.addCondition(new Simple_DRS_Condition("regex",newrefs)); break; } @@ -605,13 +613,37 @@ return false; // TODO } - private int createFresh() { + private int createFresh() { - int fresh = 0; - for (int i = 0; usedInts.contains(i); i++) { - fresh = i+1 ; - } - usedInts.add(fresh); - return fresh; + int fresh = 0; + for (int i = 0; usedInts.contains(i); i++) { + fresh = i+1 ; } + usedInts.add(fresh); + return fresh; + } + + private String orderedRegex(List<String> regextokens) { + + String newregex = ""; + if (inputstring != null) { + String[] inputparts = inputstring.split(" "); + TreeMap<Integer,String> regexparts = new TreeMap<Integer,String>(); + for (String s : regextokens) { + for (int i = 0; i < inputparts.length; i++) { + if (inputparts[i].matches(s+"(/\\w+)?")) { + regexparts.put(i,s); + break; + } + } + } + for (int n : regexparts.descendingKeySet()) { + newregex = regexparts.get(n) + " " + newregex; + } + } + else for (String s : regextokens) newregex += s + " "; + + return newregex.trim(); + } + } Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/templator/Templator.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/templator/Templator.java 2012-06-18 12:51:44 UTC (rev 3760) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/templator/Templator.java 2012-06-18 13:55:56 UTC (rev 3761) @@ -135,6 +135,8 @@ public Set<Template> buildTemplates(String s) { + d2s.setInputString(s); + boolean clearAgain = true; String tagged; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2012-06-18 12:51:56
|
Revision: 3760 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3760&view=rev Author: lorenz_b Date: 2012-06-18 12:51:44 +0000 (Mon, 18 Jun 2012) Log Message: ----------- Added further lexicon entries for Oxford data. Extended eval output. Added some manual mappings. Modified Paths: -------------- trunk/components-ext/src/main/resources/tbsl/lexicon/english_oxford.lex trunk/components-ext/src/main/resources/tbsl/oxford_dataproperty_mappings.txt trunk/components-ext/src/main/resources/tbsl/oxford_objectproperty_mappings.txt trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/OxfordEvaluation.java trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/TBSLTest.java Modified: trunk/components-ext/src/main/resources/tbsl/lexicon/english_oxford.lex =================================================================== --- trunk/components-ext/src/main/resources/tbsl/lexicon/english_oxford.lex 2012-06-18 10:50:46 UTC (rev 3759) +++ trunk/components-ext/src/main/resources/tbsl/lexicon/english_oxford.lex 2012-06-18 12:51:44 UTC (rev 3760) @@ -15,21 +15,22 @@ in walking distance from || (PP P:'in' (NP N:'walking' N:'distance' P:'from' DP[dp])) || <x,l1,<e,t>, [ l1:[ | SLOT_near(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_near/OBJECTPROPERTY/at_walking_distance ]> at walking distance from || (NP NP* (PP P:'at' (NP N:'walking' N:'distance' P:'from' DP[dp]))) || <x,l1,<e,t>, [ l1:[ | SLOT_near(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_near/OBJECTPROPERTY/at_walking_distance ]> at walking distance from || (PP P:'at' (NP N:'walking' N:'distance' P:'from' DP[dp])) || <x,l1,<e,t>, [ l1:[ | SLOT_near(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_near/OBJECTPROPERTY/at_walking_distance ]> - + in the area || (NP NP* (PP P:'in' (DP DET:'the' (NP N:'area' DP[dp])))) || <x,l1,<e,t>, [ l1:[ | SLOT_near(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_near/OBJECTPROPERTY/near]> in || (NP NP* (PP P:'in' DP[dp])) || <x,l1,<e,t>, [ l1:[ | SLOT_location(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_location/PROPERTY/location^city^postal_code^address^street ]> + on || (NP NP* (PP P:'on' DP[dp])) || <x,l1,<e,t>, [ l1:[ | SLOT_location(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_location/PROPERTY/location^city^postal_code^address^street ]> since || (NP NP* (PP P:'since' DP[dp])) || <x,l1,<e,t>, [ l1:[ | SLOT_since(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_since/PROPERTY/since ]> - for .+ pounds || (NP NP* (PP P:'for' (NP NUM[num] N:'pounds'))) || <x,l1,<e,t>, [ l1:[ | SLOT_price(x,y) ] ], [ (l2,y,num,e) ], [ l2=l1 ],[ SLOT_price/DATATYPEPROPERTY/price ]> - for more than .+ pounds || (NP NP* (PP P:'for' DET:'more' DET:'than' (NP NUM[num] N:'pounds'))) || <x,l1,<e,t>, [ l1:[ | SLOT_price(x,y), greater(y,z) ] ], [ (l2,z,num,e) ], [ l2=l1 ],[ SLOT_price/DATATYPEPROPERTY/price ]> - for less than .+ pounds || (NP NP* (PP P:'for' DET:'less' DET:'than' (NP NUM[num] N:'pounds'))) || <x,l1,<e,t>, [ l1:[ | SLOT_price(x,y), less(y,z) ] ], [ (l2,z,num,e) ], [ l2=l1 ],[ SLOT_price/DATATYPEPROPERTY/price ]> - for less than || (NP NP* (PP P:'for' DET:'less' DET:'than' NUM[num])) || <x,l1,<e,t>, [ l1:[ | SLOT_price(x,y), less(y,z) ] ], [ (l2,z,num,e) ], [ l2=l1 ],[ SLOT_price/DATATYPEPROPERTY/price ]> - for more than || (NP NP* (PP P:'for' DET:'more' DET:'than' NUM[num])) || <x,l1,<e,t>, [ l1:[ | SLOT_price(x,y), greater(y,z) ] ], [ (l2,z,num,e) ], [ l2=l1 ],[ SLOT_price/DATATYPEPROPERTY/price ]> - cheaper than .+ pounds || (NP NP* (ADJ ADJ:'cheaper' DET:'than' (NP NUM[num] N:'pounds'))) || <x,l1,<e,t>, [ l1:[ | SLOT_price(x,y), less(y,z) ] ], [ (l2,z,num,e) ], [ l2=l1 ],[ SLOT_price/DATATYPEPROPERTY/price ]> - cheaper than .+ pounds || (ADJ ADJ:'cheaper' DET:'than' (NP NUM[num] N:'pounds')) || <x,l1,<e,t>, [ l1:[ | SLOT_price(x,y), less(y,z) ] ], [ (l2,z,num,e) ], [ l2=l1 ],[ SLOT_price/DATATYPEPROPERTY/price ]> - below .+ pounds || (NP NP* (PP P:'below' (NP NUM[num] N:'pounds'))) || <x,l1,<e,t>, [ l1:[ | SLOT_price(x,y), less(y,z) ] ], [ (l2,z,num,e) ], [ l2=l1 ],[ SLOT_price/DATATYPEPROPERTY/price ]> - below .+ pounds || (PP P:'below' (NP NUM[num] N:'pounds')) || <x,l1,<e,t>, [ l1:[ | SLOT_price(x,y), less(y,z) ] ], [ (l2,z,num,e) ], [ l2=l1 ],[ SLOT_price/DATATYPEPROPERTY/price ]> - from .+ to .+ pounds || (NP NP* (PP P:'from' NUM[num1] P:'to' NUM[num2] N:'pounds')) || <x,l1,<e,t>, [ l1:[ | SLOT_price(x,y), greaterorequal(y,n1), lessorequal(y,n2) ] ], [ (l2,n1,num1,e),(l3,n2,num2,e) ], [ l2=l1,l3=l1 ],[ SLOT_price/DATATYPEPROPERTY/price ]> - between .+ and .+ pounds || (NP NP* (PP P:'between' NUM[num1] P:'and' NUM[num2] N:'pounds')) || <x,l1,<e,t>, [ l1:[ | SLOT_price(x,y), greaterorequal(y,n1), lessorequal(y,n2) ] ], [ (l2,n1,num1,e),(l3,n2,num2,e) ], [ l2=l1,l3=l1 ],[ SLOT_price/DATATYPEPROPERTY/price ]> + for .+ pounds || (NP NP* (PP P:'for' (NP NUM[num] N:'pounds'))) || <x,l1,<e,t>, [ l1:[ | SLOT_includes(v,x), SLOT_price(v,y) ] ], [ (l2,y,num,e) ], [ l2=l1 ],[ SLOT_price/DATATYPEPROPERTY/price, SLOT_includes/OBJECTPROPERTY/includes ]> + for more than .+ pounds || (NP NP* (PP P:'for' DET:'more' DET:'than' (NP NUM[num] N:'pounds'))) || <x,l1,<e,t>, [ l1:[ | SLOT_includes(v,x), SLOT_price(v,y), greater(y,z) ] ], [ (l2,z,num,e) ], [ l2=l1 ],[ SLOT_price/DATATYPEPROPERTY/price, SLOT_includes/OBJECTPROPERTY/includes ]> + for less than .+ pounds || (NP NP* (PP P:'for' DET:'less' DET:'than' (NP NUM[num] N:'pounds'))) || <x,l1,<e,t>, [ l1:[ | SLOT_includes(v,x), SLOT_price(v,y), less(y,z) ] ], [ (l2,z,num,e) ], [ l2=l1 ],[ SLOT_price/DATATYPEPROPERTY/price, SLOT_includes/OBJECTPROPERTY/includes ]> + for less than || (NP NP* (PP P:'for' DET:'less' DET:'than' NUM[num])) || <x,l1,<e,t>, [ l1:[v | SLOT_includes(v,x), SLOT_price(v,y), less(y,z) ] ], [ (l2,z,num,e) ], [ l2=l1 ],[ SLOT_price/DATATYPEPROPERTY/price, SLOT_includes/OBJECTPROPERTY/includes ]> + for more than || (NP NP* (PP P:'for' DET:'more' DET:'than' NUM[num])) || <x,l1,<e,t>, [ l1:[v | SLOT_includes(v,x), SLOT_price(v,y), greater(y,z) ] ], [ (l2,z,num,e) ], [ l2=l1 ],[ SLOT_price/DATATYPEPROPERTY/price, SLOT_includes/OBJECTPROPERTY/includes ]> + cheaper than .+ pounds || (NP NP* (ADJ ADJ:'cheaper' DET:'than' (NP NUM[num] N:'pounds'))) || <x,l1,<e,t>, [ l1:[ | SLOT_includes(v,x), SLOT_price(v,y), less(y,z) ] ], [ (l2,z,num,e) ], [ l2=l1 ],[ SLOT_price/DATATYPEPROPERTY/price, SLOT_includes/OBJECTPROPERTY/includes ]> + cheaper than .+ pounds || (ADJ ADJ:'cheaper' DET:'than' (NP NUM[num] N:'pounds')) || <x,l1,<e,t>, [ l1:[ | SLOT_includes(v,x), SLOT_price(v,y), less(y,z) ] ], [ (l2,z,num,e) ], [ l2=l1 ],[ SLOT_price/DATATYPEPROPERTY/price, SLOT_includes/OBJECTPROPERTY/includes ]> + below .+ pounds || (NP NP* (PP P:'below' (NP NUM[num] N:'pounds'))) || <x,l1,<e,t>, [ l1:[ | SLOT_includes(v,x), SLOT_price(v,y), less(y,z) ] ], [ (l2,z,num,e) ], [ l2=l1 ],[ SLOT_price/DATATYPEPROPERTY/price, SLOT_includes/OBJECTPROPERTY/includes ]> + below .+ pounds || (PP P:'below' (NP NUM[num] N:'pounds')) || <x,l1,<e,t>, [ l1:[ | SLOT_includes(v,x), SLOT_price(v,y), less(y,z) ] ], [ (l2,z,num,e) ], [ l2=l1 ],[ SLOT_price/DATATYPEPROPERTY/price, SLOT_includes/OBJECTPROPERTY/includes ]> + from .+ to .+ pounds || (NP NP* (PP P:'from' NUM[num1] P:'to' NUM[num2] N:'pounds')) || <x,l1,<e,t>, [ l1:[ | SLOT_includes(v,x), SLOT_price(v,y), greaterorequal(y,n1), lessorequal(y,n2) ] ], [ (l2,n1,num1,e),(l3,n2,num2,e) ], [ l2=l1,l3=l1 ],[ SLOT_price/DATATYPEPROPERTY/price, SLOT_includes/OBJECTPROPERTY/includes ]> + between .+ and .+ pounds || (NP NP* (PP P:'between' NUM[num1] P:'and' NUM[num2] N:'pounds')) || <x,l1,<e,t>, [ l1:[ | SLOT_includes(v,x), SLOT_price(v,y), greaterorequal(y,n1), lessorequal(y,n2) ] ], [ (l2,n1,num1,e),(l3,n2,num2,e) ], [ l2=l1,l3=l1 ],[ SLOT_price/DATATYPEPROPERTY/price, SLOT_includes/OBJECTPROPERTY/includes ]> with || (NP NP* (PP P:'with' DP[dp])) || <x,l1,<e,t>, [ l1:[ | empty(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[]> ;; <x,l1,<e,t>, [ l1:[ | SLOT_description(x,z), regextoken(z,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_description/DATATYPEPROPERTY/description, SLOT_arg/LITERAL/z ]> with || (PP P:'with' DP[dp]) || <x,l1,<e,t>, [ l1:[ | empty(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[]> ;; <x,l1,<e,t>, [ l1:[ | SLOT_description(x,z), regextoken(z,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_description/DATATYPEPROPERTY/description, SLOT_arg/LITERAL/z ]> Modified: trunk/components-ext/src/main/resources/tbsl/oxford_dataproperty_mappings.txt =================================================================== --- trunk/components-ext/src/main/resources/tbsl/oxford_dataproperty_mappings.txt 2012-06-18 10:50:46 UTC (rev 3759) +++ trunk/components-ext/src/main/resources/tbsl/oxford_dataproperty_mappings.txt 2012-06-18 12:51:44 UTC (rev 3760) @@ -1,3 +1,5 @@ http://www.w3.org/2006/vcard/ns#street-address|address, location, postal code http://www.w3.org/2006/vcard/ns#locality|address, location -http://purl.org/goodrelations/v1#description|description \ No newline at end of file +http://purl.org/goodrelations/v1#description|description +http://purl.org/goodrelations/v1#hasPrice|has price, price +http://diadem.cs.ox.ac.uk/ontologies/real-estate#receptions|receptions, reception room, reception rooms \ No newline at end of file Modified: trunk/components-ext/src/main/resources/tbsl/oxford_objectproperty_mappings.txt =================================================================== --- trunk/components-ext/src/main/resources/tbsl/oxford_objectproperty_mappings.txt 2012-06-18 10:50:46 UTC (rev 3759) +++ trunk/components-ext/src/main/resources/tbsl/oxford_objectproperty_mappings.txt 2012-06-18 12:51:44 UTC (rev 3760) @@ -1 +1 @@ -http://dbpedia.org/property/near|close, near \ No newline at end of file +http://dbpedia.org/property/near|close, near, at walking distance \ No newline at end of file Modified: trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/OxfordEvaluation.java =================================================================== --- trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/OxfordEvaluation.java 2012-06-18 10:50:46 UTC (rev 3759) +++ trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/OxfordEvaluation.java 2012-06-18 12:51:44 UTC (rev 3760) @@ -22,11 +22,12 @@ import com.hp.hpl.jena.query.QueryParseException; import com.hp.hpl.jena.sparql.engine.http.QueryExceptionHTTP; +import com.jamonapi.Monitor; +import com.jamonapi.MonitorFactory; public class OxfordEvaluation { - private static final String QUERIES_FILE1 = OxfordEvaluation.class.getClassLoader().getResource("tbsl/oxford_eval_queries.txt").getPath(); - private static final String QUERIES_FILE2 = OxfordEvaluation.class.getClassLoader().getResource("tbsl/oxford_eval_additional_queries.txt").getPath(); + private static final String QUERIES_FILE = OxfordEvaluation.class.getClassLoader().getResource("tbsl/oxford_eval_queries.txt").getPath(); private static final String LOG_DIRECTORY = "log/oxford/"; private static final String LOG_FILE = "evaluation.txt"; @@ -52,8 +53,14 @@ int learnedQuestions = 0; Map<String, String> question2QueryMap = new HashMap<String, String>(); - BufferedReader in = new BufferedReader(new FileReader(new File(QUERIES_FILE1))); + Monitor mon = MonitorFactory.getTimeMonitor("tbsl"); + + BufferedReader in = new BufferedReader(new FileReader(new File(QUERIES_FILE))); BufferedWriter out = new BufferedWriter(new FileWriter(new File(LOG_DIRECTORY + LOG_FILE), false)); + BufferedWriter answerOut = new BufferedWriter(new FileWriter(new File(LOG_DIRECTORY + "questionsWithAnswer.txt"), false)); + BufferedWriter noAnswerOut = new BufferedWriter(new FileWriter(new File(LOG_DIRECTORY + "questionsWithNoAnswer.txt"), false)); + BufferedWriter templatesOut = new BufferedWriter(new FileWriter(new File(LOG_DIRECTORY + "questionsWithTemplate.txt"), false)); + BufferedWriter noTemplatesOut = new BufferedWriter(new FileWriter(new File(LOG_DIRECTORY + "questionsWithNoTemplate.txt"), false)); int questionCnt = 0; int errorCnt = 0; @@ -73,26 +80,49 @@ out.write("****************************************\n"); out.write("QUESTION: " + question + "\n"); learner.setQuestion(question); + mon.start(); learner.learnSPARQLQueries(); + mon.stop(); String learnedQuery = learner.getBestSPARQLQuery(); if(learnedQuery != null){ question2QueryMap.put(question, learnedQuery); learnedQuestions++; out.write("ANSWER FOUND: YES\n"); out.write(learnedQuery + "\n"); + + answerOut.write("****************************************\n"); + answerOut.write("QUESTION: " + question + "\n"); + answerOut.write("ANSWER FOUND: YES\n"); + answerOut.write(learnedQuery + "\n"); + answerOut.write("TIME NEEDED: " + mon.getLastValue() + "ms\n"); + answerOut.flush(); + } else { noQueryWithNonEmptyResultSetCnt++; out.write("ANSWER FOUND: NO\n"); out.write("REASON: NO SPARQL QUERY WITH NON-EMPTY RESULTSET FOUND\n"); out.write("SPARQL QUERY WITH HIGHEST SCORE TESTED:\n" + learner.getGeneratedQueries().first()); + noAnswerOut.write("****************************************\n"); + noAnswerOut.write("QUESTION: " + question + "\n"); + noAnswerOut.write("ANSWER FOUND: NO\n"); + noAnswerOut.write("REASON: NO SPARQL QUERY WITH NON-EMPTY RESULTSET FOUND\n"); + noAnswerOut.write("SPARQL QUERY WITH HIGHEST SCORE TESTED:\n" + learner.getGeneratedQueries().first() + "\n"); + noAnswerOut.write("TIME NEEDED: " + mon.getLastValue() + "ms\n"); + noAnswerOut.flush(); + } + templatesOut.write(question + "\n"); + templatesOut.flush(); } catch (Exception e) { + mon.stop(); e.printStackTrace(); out.write("ANSWER FOUND: NO\n"); if(e instanceof NoTemplateFoundException){ noTemplateFoundCnt++; out.write("REASON: NO TEMPLATE FOUND"); + noTemplatesOut.write(question + "\n"); + noTemplatesOut.flush(); } else { errorCnt++; out.write("REASON: ERROR OCCURED (" + e.getClass() + ")\n"); @@ -100,7 +130,9 @@ out.write("\nLast tested SPARQL query: " + learner.getCurrentlyExecutedQuery()); } } + } catch (Error e){ + mon.stop(); e.printStackTrace(); out.write("ANSWER FOUND: NO\n"); errorCnt++; @@ -111,6 +143,10 @@ } out.write("\n\n###################SUMMARY################\n"); out.write("Questions tested:\t" + questionCnt + "\n"); + out.write("Overall time:\t" + mon.getTotal() + "ms\n"); + out.write("Avg. time per question:\t" + mon.getAvg() + "ms\n"); + out.write("Longest time:\t" + mon.getMax() + "ms\n"); + out.write("Shortest time:\t" + mon.getMin() + "ms\n"); out.write("Questions with answer:\t" + learnedQuestions + "\n"); out.write("Questions with no answer (and no error):\t" + noQueryWithNonEmptyResultSetCnt + "\n"); out.write("Questions with no templates:\t" + noTemplateFoundCnt + "\n"); @@ -118,6 +154,8 @@ in.close(); out.close(); + templatesOut.close(); + noTemplatesOut.close(); } Modified: trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/TBSLTest.java =================================================================== --- trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/TBSLTest.java 2012-06-18 10:50:46 UTC (rev 3759) +++ trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/TBSLTest.java 2012-06-18 12:51:44 UTC (rev 3760) @@ -118,7 +118,7 @@ String question = "Give me all houses near a school."; question = "Give me all houses with more than 3 bathrooms and more than 2 bedrooms."; question = "Give me all Victorian houses in Oxfordshire"; - question = "Give me all Edwardian house in Oxfordshire for less than 1000000."; + question = "modern houses with gas central heating"; // question = "Give me all family houses with more than 2 bathrooms and more than 4 bedrooms"; learner.setQuestion(question); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2012-06-18 10:50:56
|
Revision: 3759 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3759&view=rev Author: christinaunger Date: 2012-06-18 10:50:46 +0000 (Mon, 18 Jun 2012) Log Message: ----------- [tbsl] added proper support for "[PP] and [PP]" Modified Paths: -------------- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/converter/DRS2SPARQL_Converter.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/templator/Templator.java trunk/components-ext/src/main/resources/tbsl/lexicon/english.lex trunk/components-ext/src/main/resources/tbsl/lexicon/english_oxford.lex Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/converter/DRS2SPARQL_Converter.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/converter/DRS2SPARQL_Converter.java 2012-06-18 07:44:24 UTC (rev 3758) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/converter/DRS2SPARQL_Converter.java 2012-06-18 10:50:46 UTC (rev 3759) @@ -76,9 +76,7 @@ slots = ls; Query q = convert(drs, new Query(), false); - if (q == null) { - return null; - } + if (q == null) return null; q.setPrefixes(prefixes); template.setQuery(q); @@ -87,12 +85,13 @@ System.out.println("... done"); } + usedInts = new ArrayList<Integer>(); return template; } private Query convert(DRS drs, Query query, boolean negate) { -// System.out.println("--- DRS (before): " + drs); // DEBUG +// System.out.println("\n--- DRS (before): " + drs); // DEBUG redundantEqualRenaming(drs); if (!restructureEmpty(drs)) { return null; @@ -474,10 +473,10 @@ } } if (takeit) { - regex += cond.getPredicate().replace("SLOT_","") + " "; + regex += cond.getPredicate().replace("SLOT","").replaceAll("_"," "); used.add(cond); } - else { + else if (!cond.getPredicate().equals("regextoken")) { for (DiscourseReferent dr : cond.getArguments()) { if (dr.getValue().equals(var)) dr.setValue(newvar); } @@ -488,7 +487,7 @@ c.getArguments().add(new DiscourseReferent("'"+regex.trim()+"'")); c.setPredicate("regex"); } - else {} // TODO should not happen! + else { used.add(c); } // TODO should not happen! for (Slot s : slots) { if (s.getWords().contains(var)) { s.getWords().remove(var); @@ -497,6 +496,41 @@ } } for (Simple_DRS_Condition cond : used) drs.removeCondition(cond); + + // postprocessing + boolean success = false; + Set<Simple_DRS_Condition> oldconds = new HashSet<Simple_DRS_Condition>(); + for (Simple_DRS_Condition c : drs.getAllSimpleConditions()) { + String d = ""; + String d2 = ""; + String newregex = ""; + if (c.getPredicate().equals("SLOT_description")) { + d = c.getArguments().get(0).getValue(); + d2 = c.getArguments().get(1).getValue(); + for (Simple_DRS_Condition cond : drs.getAllSimpleConditions()) { + if (cond.getPredicate().equals("SLOT_description") && cond.getArguments().get(1).getValue().equals(d)) { + oldconds.add(c); + success = true; + break; + } + } + } + if (success) { + for (Simple_DRS_Condition cond : drs.getAllSimpleConditions()) { + if (cond.getPredicate().equals("regex") && + (cond.getArguments().get(0).getValue().equals(d) || cond.getArguments().get(0).getValue().equals(d2))) { + newregex += cond.getArguments().get(1).getValue().replaceAll("'","").replaceAll("_"," ").trim() + " "; + oldconds.add(cond); + } + } + for (Simple_DRS_Condition cond : oldconds) drs.removeCondition(cond); + List<DiscourseReferent> newrefs = new ArrayList<DiscourseReferent>(); + newrefs.add(new DiscourseReferent(d)); + newrefs.add(new DiscourseReferent("'"+newregex.trim()+"'")); + drs.addCondition(new Simple_DRS_Condition("regex",newrefs)); + break; + } + } } Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/templator/Templator.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/templator/Templator.java 2012-06-18 07:44:24 UTC (rev 3758) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/templator/Templator.java 2012-06-18 10:50:46 UTC (rev 3759) @@ -57,7 +57,7 @@ boolean UNTAGGED_INPUT = true; boolean USE_NER = false; boolean USE_WORDNET = true; - boolean VERBOSE = true; + boolean VERBOSE = false; private String taggedInput; Modified: trunk/components-ext/src/main/resources/tbsl/lexicon/english.lex =================================================================== --- trunk/components-ext/src/main/resources/tbsl/lexicon/english.lex 2012-06-18 07:44:24 UTC (rev 3758) +++ trunk/components-ext/src/main/resources/tbsl/lexicon/english.lex 2012-06-18 10:50:46 UTC (rev 3759) @@ -142,10 +142,14 @@ and || (S S* CC:'and' S[s]) || <x,l1,t,[l1:[|]],[(l2,y,s,t)],[l1=l2],[]> and || (DP DP* CC:'and' DP[dp]) || <x,l1,<<e,t>,t>,[l1:[|]],[(l2,y,dp,<<e,t>,t>)],[l1=l2],[]> and || (NP NP* CC:'and' NP[np]) || <x,l1,<e,t>,[l1:[|x=y]],[(l2,y,np,<e,t>)],[l1=l2],[]> + and || (PP PP* CC:'and' PP[pp]) || <x,l1,<e,t>,[l1:[|x=y]],[(l2,y,pp,<e,t>)],[l1=l2],[]> + and || (ADJ ADJ* CC:'and' ADJ[adj]) || <x,l1,<e,t>,[l1:[|]],[(l2,y,adj,<e,t>)],[l1=l2],[]> but || (S S* CC:'but' S[s]) || <x,l1,t,[l1:[|]],[(l2,y,s,t)],[l1=l2],[]> but || (DP DP* CC:'but' DP[dp]) || <x,l1,<<e,t>,t>,[l1:[|]],[(l2,y,dp,<<e,t>,t>)],[l1=l2],[]> but || (NP NP* CC:'but' NP[np]) || <x,l1,<e,t>,[l1:[|x=y]],[(l2,y,np,<e,t>)],[l1=l2],[]> + but || (PP PP* CC:'but' PP[pp]) || <x,l1,<e,t>,[l1:[|x=y]],[(l2,y,pp,<e,t>)],[l1=l2],[]> + but || (ADJ ADJ* CC:'but' ADJ[adj]) || <x,l1,<e,t>,[l1:[|]],[(l2,y,adj,<e,t>)],[l1=l2],[]> as well as || (NP NP* CC:'as' CC:'well' CC:'as' NP[np]) || <x,l1,<e,t>,[l1:[|]],[(l2,y,np,<e,t>)],[l1=l2],[]> Modified: trunk/components-ext/src/main/resources/tbsl/lexicon/english_oxford.lex =================================================================== --- trunk/components-ext/src/main/resources/tbsl/lexicon/english_oxford.lex 2012-06-18 07:44:24 UTC (rev 3758) +++ trunk/components-ext/src/main/resources/tbsl/lexicon/english_oxford.lex 2012-06-18 10:50:46 UTC (rev 3759) @@ -2,26 +2,37 @@ // PREPOSITIONS close to || (NP NP* (PP P:'close' P:'to' DP[dp])) || <x,l1,<e,t>, [ l1:[ | SLOT_closeto(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_closeto/OBJECTPROPERTY/near ]> + close to || (PP P:'close' P:'to' DP[dp]) || <x,l1,<e,t>, [ l1:[ | SLOT_closeto(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_closeto/OBJECTPROPERTY/near ]> near || (NP NP* (PP P:'near' DP[dp])) || <x,l1,<e,t>, [ l1:[ | SLOT_near(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_near/OBJECTPROPERTY/near ]> + near || (PP P:'near' DP[dp]) || <x,l1,<e,t>, [ l1:[ | SLOT_near(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_near/OBJECTPROPERTY/near ]> nearby || (NP NP* (PP P:'nearby' DP[dp])) || <x,l1,<e,t>, [ l1:[ | SLOT_nearby(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_nearby/OBJECTPROPERTY/near ]> + nearby || (PP P:'nearby' DP[dp]) || <x,l1,<e,t>, [ l1:[ | SLOT_nearby(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_nearby/OBJECTPROPERTY/near ]> within walking distance from || (NP NP* (PP P:'within' (NP N:'walking' N:'distance' P:'from' DP[dp]))) || <x,l1,<e,t>, [ l1:[ | SLOT_near(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_near/OBJECTPROPERTY/at_walking_distance ]> + within walking distance from || (PP P:'within' (NP N:'walking' N:'distance' P:'from' DP[dp])) || <x,l1,<e,t>, [ l1:[ | SLOT_near(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_near/OBJECTPROPERTY/at_walking_distance ]> within minutes of || (NP NP* (PP P:'within' (NP N:'minutes' P:'of' DP[dp]))) || <x,l1,<e,t>, [ l1:[ | SLOT_near(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_near/OBJECTPROPERTY/at_walking_distance ]> + within minutes of || (PP P:'within' (NP N:'minutes' P:'of' DP[dp])) || <x,l1,<e,t>, [ l1:[ | SLOT_near(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_near/OBJECTPROPERTY/at_walking_distance ]> in walking distance from || (NP NP* (PP P:'in' (NP N:'walking' N:'distance' P:'from' DP[dp]))) || <x,l1,<e,t>, [ l1:[ | SLOT_near(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_near/OBJECTPROPERTY/at_walking_distance ]> + in walking distance from || (PP P:'in' (NP N:'walking' N:'distance' P:'from' DP[dp])) || <x,l1,<e,t>, [ l1:[ | SLOT_near(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_near/OBJECTPROPERTY/at_walking_distance ]> at walking distance from || (NP NP* (PP P:'at' (NP N:'walking' N:'distance' P:'from' DP[dp]))) || <x,l1,<e,t>, [ l1:[ | SLOT_near(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_near/OBJECTPROPERTY/at_walking_distance ]> - in || (NP NP* (PP P:'in' DP[dp])) || <x,l1,<e,t>, [ l1:[ | SLOT_location(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_location/PROPERTY/location^city^postal_code^address^street ]> - since || (NP NP* (PP P:'since' DP[dp])) || <x,l1,<e,t>, [ l1:[ | SLOT_since(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_since/PROPERTY/since ]> + at walking distance from || (PP P:'at' (NP N:'walking' N:'distance' P:'from' DP[dp])) || <x,l1,<e,t>, [ l1:[ | SLOT_near(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_near/OBJECTPROPERTY/at_walking_distance ]> + in || (NP NP* (PP P:'in' DP[dp])) || <x,l1,<e,t>, [ l1:[ | SLOT_location(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_location/PROPERTY/location^city^postal_code^address^street ]> + since || (NP NP* (PP P:'since' DP[dp])) || <x,l1,<e,t>, [ l1:[ | SLOT_since(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_since/PROPERTY/since ]> + for .+ pounds || (NP NP* (PP P:'for' (NP NUM[num] N:'pounds'))) || <x,l1,<e,t>, [ l1:[ | SLOT_price(x,y) ] ], [ (l2,y,num,e) ], [ l2=l1 ],[ SLOT_price/DATATYPEPROPERTY/price ]> for more than .+ pounds || (NP NP* (PP P:'for' DET:'more' DET:'than' (NP NUM[num] N:'pounds'))) || <x,l1,<e,t>, [ l1:[ | SLOT_price(x,y), greater(y,z) ] ], [ (l2,z,num,e) ], [ l2=l1 ],[ SLOT_price/DATATYPEPROPERTY/price ]> for less than .+ pounds || (NP NP* (PP P:'for' DET:'less' DET:'than' (NP NUM[num] N:'pounds'))) || <x,l1,<e,t>, [ l1:[ | SLOT_price(x,y), less(y,z) ] ], [ (l2,z,num,e) ], [ l2=l1 ],[ SLOT_price/DATATYPEPROPERTY/price ]> for less than || (NP NP* (PP P:'for' DET:'less' DET:'than' NUM[num])) || <x,l1,<e,t>, [ l1:[ | SLOT_price(x,y), less(y,z) ] ], [ (l2,z,num,e) ], [ l2=l1 ],[ SLOT_price/DATATYPEPROPERTY/price ]> for more than || (NP NP* (PP P:'for' DET:'more' DET:'than' NUM[num])) || <x,l1,<e,t>, [ l1:[ | SLOT_price(x,y), greater(y,z) ] ], [ (l2,z,num,e) ], [ l2=l1 ],[ SLOT_price/DATATYPEPROPERTY/price ]> cheaper than .+ pounds || (NP NP* (ADJ ADJ:'cheaper' DET:'than' (NP NUM[num] N:'pounds'))) || <x,l1,<e,t>, [ l1:[ | SLOT_price(x,y), less(y,z) ] ], [ (l2,z,num,e) ], [ l2=l1 ],[ SLOT_price/DATATYPEPROPERTY/price ]> + cheaper than .+ pounds || (ADJ ADJ:'cheaper' DET:'than' (NP NUM[num] N:'pounds')) || <x,l1,<e,t>, [ l1:[ | SLOT_price(x,y), less(y,z) ] ], [ (l2,z,num,e) ], [ l2=l1 ],[ SLOT_price/DATATYPEPROPERTY/price ]> below .+ pounds || (NP NP* (PP P:'below' (NP NUM[num] N:'pounds'))) || <x,l1,<e,t>, [ l1:[ | SLOT_price(x,y), less(y,z) ] ], [ (l2,z,num,e) ], [ l2=l1 ],[ SLOT_price/DATATYPEPROPERTY/price ]> + below .+ pounds || (PP P:'below' (NP NUM[num] N:'pounds')) || <x,l1,<e,t>, [ l1:[ | SLOT_price(x,y), less(y,z) ] ], [ (l2,z,num,e) ], [ l2=l1 ],[ SLOT_price/DATATYPEPROPERTY/price ]> from .+ to .+ pounds || (NP NP* (PP P:'from' NUM[num1] P:'to' NUM[num2] N:'pounds')) || <x,l1,<e,t>, [ l1:[ | SLOT_price(x,y), greaterorequal(y,n1), lessorequal(y,n2) ] ], [ (l2,n1,num1,e),(l3,n2,num2,e) ], [ l2=l1,l3=l1 ],[ SLOT_price/DATATYPEPROPERTY/price ]> between .+ and .+ pounds || (NP NP* (PP P:'between' NUM[num1] P:'and' NUM[num2] N:'pounds')) || <x,l1,<e,t>, [ l1:[ | SLOT_price(x,y), greaterorequal(y,n1), lessorequal(y,n2) ] ], [ (l2,n1,num1,e),(l3,n2,num2,e) ], [ l2=l1,l3=l1 ],[ SLOT_price/DATATYPEPROPERTY/price ]> with || (NP NP* (PP P:'with' DP[dp])) || <x,l1,<e,t>, [ l1:[ | empty(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[]> ;; <x,l1,<e,t>, [ l1:[ | SLOT_description(x,z), regextoken(z,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_description/DATATYPEPROPERTY/description, SLOT_arg/LITERAL/z ]> + with || (PP P:'with' DP[dp]) || <x,l1,<e,t>, [ l1:[ | empty(x,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[]> ;; <x,l1,<e,t>, [ l1:[ | SLOT_description(x,z), regextoken(z,y) ] ], [ (l2,y,dp,<<e,t>,t>) ], [ l2=l1 ],[ SLOT_description/DATATYPEPROPERTY/description, SLOT_arg/LITERAL/z ]> square meters || (DP N:'square' N:'meters') || <x,l1,<<e,t>,t>>, [l1:[ | SLOT_size(x,y) ]], [],[],[SLOT_size/DATATYPEPROPERTY/size ]> // MONTHS This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |