From: <chr...@us...> - 2011-06-14 16:39:19
|
Revision: 2873 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=2873&view=rev Author: christinaunger Date: 2011-06-14 16:39:12 +0000 (Tue, 14 Jun 2011) Log Message: ----------- [tbsl] added SYMPROPERTY. fixed wrong filters. added more sophisticated adjective templates. 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/ltag/parser/Preprocessor.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_Constructor.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/DRS_Quantifier.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/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/sparql/SlotType.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/templator/SlotBuilder.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/test/java/org/dllearner/algorithm/tbsl/POStest.java trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/PatternMatchingTest.java trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/TestFrontend.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 2011-06-14 13:31:18 UTC (rev 2872) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/converter/DRS2SPARQL_Converter.java 2011-06-14 16:39:12 UTC (rev 2873) @@ -165,7 +165,7 @@ System.out.print("|quantor:" + quant); } switch (quant) { - case HOW_MANY: + case HOWMANY: query.addSelTerm(new SPARQL_Term(sref, SPARQL_Aggregate.COUNT)); break; case EVERY: @@ -185,13 +185,13 @@ break; case SOME: // break; - case THE_LEAST: + case THELEAST: fresh = "c"+createFresh(); query.addSelTerm(new SPARQL_Term(sref, SPARQL_Aggregate.COUNT,true, new SPARQL_Term(fresh))); query.addOrderBy(new SPARQL_Term(fresh, SPARQL_OrderBy.ASC)); query.setLimit(1); break; - case THE_MOST: + case THEMOST: fresh = "c"+createFresh(); query.addSelTerm(new SPARQL_Term(sref, SPARQL_Aggregate.COUNT,true, new SPARQL_Term(fresh))); query.addOrderBy(new SPARQL_Term(fresh, SPARQL_OrderBy.DESC)); @@ -353,7 +353,19 @@ } } } - + + // finally remove all conditions that ended up of form equal(y,y) + Set<Simple_DRS_Condition> equalEqualsConditions = new HashSet<Simple_DRS_Condition>(); + for (Simple_DRS_Condition c : drs.getAllSimpleConditions()) { + if(c.getPredicate().equals("equal") && c.getArguments().get(0).getValue().equals(c.getArguments().get(1).getValue())) { + System.out.println("Found " + c); // DEBUG + equalEqualsConditions.add(c); + } + } + for (Simple_DRS_Condition c : equalEqualsConditions) { + drs.removeCondition(c); + } + System.out.println("DRS: " + drs); } private boolean isUri(String arg) { Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/ltag/parser/Preprocessor.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/ltag/parser/Preprocessor.java 2011-06-14 13:31:18 UTC (rev 2872) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/ltag/parser/Preprocessor.java 2011-06-14 16:39:12 UTC (rev 2873) @@ -8,7 +8,6 @@ import org.dllearner.algorithm.tbsl.nlp.LingPipeNER; import org.dllearner.algorithm.tbsl.nlp.NER; -import org.dllearner.algorithm.tbsl.sem.util.Pair; public class Preprocessor { @@ -53,7 +52,7 @@ Pattern compAdjPattern = Pattern.compile("(\\w+/RBR.(\\w+)/JJ)"); Pattern superAdjPattern = Pattern.compile("(\\w+/RBS.(\\w+)/JJ)"); - Pattern howAdjPattern = Pattern.compile("(\\w+/WRB.(\\w+)/JJ)"); + Pattern howAdjPattern = Pattern.compile("(\\w+/WRB.(\\w+)(?<!many)/JJ)"); Pattern nprepPattern = Pattern.compile("\\s((\\w+)/NNS?.of/IN)"); Pattern didPattern = Pattern.compile("(?i)(\\s((did)|(do)|(does))/VB.?)\\s"); Pattern prepfrontPattern = Pattern.compile("(\\A\\w+/((TO)|(IN)).)\\w+/WDT"); // TODO (Nicht ganz sauber. Bei P-Stranding immer zwei Querys, hier nur eine.) @@ -70,6 +69,8 @@ Pattern vprepPattern = Pattern.compile("\\s((\\w+)/V[A-Z]+\\s\\w+/(IN|TO))"); Pattern whenPattern = Pattern.compile("(?i)(when/WRB\\s(.+\\s)(\\w+)/((V[A-Z]+)|(PASS[A-Z]+)))"); Pattern wherePattern = Pattern.compile("(?i)(where/WRB\\s(.+\\s)(\\w+)/((V[A-Z]+)|(PASS[A-Z]+)))"); + Pattern adjnounPattern = Pattern.compile("((\\w+)(?<!many)/JJ.(\\w+)/NN(S)?)"); + Pattern adjnprepPattern = Pattern.compile("((\\w+)(?<!many)/JJ.(\\w+)/NPREP)"); m = compAdjPattern.matcher(condensedstring); while (m.find()) { @@ -147,6 +148,14 @@ while (m.find()) { condensedstring = condensedstring.replaceFirst(m.group(1),m.group(2) + m.group(3)+"/WHERE"); } + m = adjnounPattern.matcher(condensedstring); + while (m.find()) { + condensedstring = condensedstring.replaceFirst(m.group(1),m.group(2)+"_"+m.group(4)+"/JJNN"); + } + m = adjnprepPattern.matcher(condensedstring); + while (m.find()) { + condensedstring = condensedstring.replaceFirst(m.group(1),m.group(2)+"_"+m.group(4)+"/JJNPREP"); + } return condensedstring; } 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 2011-06-14 13:31:18 UTC (rev 2872) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/DRS.java 2011-06-14 16:39:12 UTC (rev 2873) @@ -219,15 +219,28 @@ public void removeCondition(DRS_Condition condition) { m_DRS_Conditions.remove(condition); + Set<DRS_Condition> donotkeep = new HashSet<DRS_Condition>(); for (DRS_Condition c : m_DRS_Conditions) { + if (c.equals(condition)) { + donotkeep.add(c); + } if (c.isNegatedCondition()) { ((Negated_DRS) c).getDRS().removeCondition(condition); } - else if (condition.isComplexCondition()) { + else if (c.isComplexCondition()) { ((Complex_DRS_Condition) c).getRestrictor().removeCondition(condition); ((Complex_DRS_Condition) c).getScope().removeCondition(condition); } } + + // only because remove sometimes fails (for whatever mysterious reason) + Set<DRS_Condition> newconditions = new HashSet<DRS_Condition>(); + for (DRS_Condition c : m_DRS_Conditions) { + if (!c.equals(condition)) { + newconditions.add(c); + } + } + m_DRS_Conditions = newconditions; } Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/DRS_Constructor.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/DRS_Constructor.java 2011-06-14 13:31:18 UTC (rev 2872) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/DRS_Constructor.java 2011-06-14 16:39:12 UTC (rev 2873) @@ -16,6 +16,7 @@ try { drs = parser.DRS(); } catch (ParseException e) { + System.err.println("DRS Parse Exception: " + string); e.printStackTrace(); } Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/DRS_Quantifier.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/DRS_Quantifier.java 2011-06-14 13:31:18 UTC (rev 2872) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/DRS_Quantifier.java 2011-06-14 16:39:12 UTC (rev 2873) @@ -1,5 +1,5 @@ package org.dllearner.algorithm.tbsl.sem.drs; public enum DRS_Quantifier { - SOME, EVERY, MOST, MANY, HOW_MANY, THE_MOST, FEW, NO, THE_LEAST + SOME, EVERY, MOST, MANY, HOWMANY, THEMOST, FEW, NO, THELEAST } 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 2011-06-14 13:31:18 UTC (rev 2872) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/reader/DRSParser.java 2011-06-14 16:39:12 UTC (rev 2873) @@ -188,11 +188,11 @@ if (quantifier.toString().equals("EVERY")) {drs.setQuantifier(DRS_Quantifier.EVERY);} if (quantifier.toString().equals("SOME")) {drs.setQuantifier(DRS_Quantifier.SOME);} if (quantifier.toString().equals("MOST")) {drs.setQuantifier(DRS_Quantifier.MOST);} - if (quantifier.toString().equals("THEMOST")) {drs.setQuantifier(DRS_Quantifier.THE_MOST);} - if (quantifier.toString().equals("THELEAST")) {drs.setQuantifier(DRS_Quantifier.THE_LEAST);} + if (quantifier.toString().equals("THEMOST")) {drs.setQuantifier(DRS_Quantifier.THEMOST);} + if (quantifier.toString().equals("THELEAST")) {drs.setQuantifier(DRS_Quantifier.THELEAST);} if (quantifier.toString().equals("AFEW")) {drs.setQuantifier(DRS_Quantifier.FEW);} if (quantifier.toString().equals("MANY")) {drs.setQuantifier(DRS_Quantifier.MANY);} - if (quantifier.toString().equals("HOWMANY")) {drs.setQuantifier(DRS_Quantifier.HOW_MANY);} + if (quantifier.toString().equals("HOWMANY")) {drs.setQuantifier(DRS_Quantifier.HOWMANY);} if (quantifier.toString().equals("NO")) {drs.setQuantifier(DRS_Quantifier.NO);} {if (true) return drs;} 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 2011-06-14 13:31:18 UTC (rev 2872) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/drs/reader/DRSParser.jj 2011-06-14 16:39:12 UTC (rev 2873) @@ -185,11 +185,11 @@ if (quantifier.toString().equals("EVERY")) {drs.setQuantifier(DRS_Quantifier.EVERY);} if (quantifier.toString().equals("SOME")) {drs.setQuantifier(DRS_Quantifier.SOME);} if (quantifier.toString().equals("MOST")) {drs.setQuantifier(DRS_Quantifier.MOST);} - if (quantifier.toString().equals("THEMOST")) {drs.setQuantifier(DRS_Quantifier.THE_MOST);} - if (quantifier.toString().equals("THELEAST")) {drs.setQuantifier(DRS_Quantifier.THE_LEAST);} + if (quantifier.toString().equals("THEMOST")) {drs.setQuantifier(DRS_Quantifier.THEMOST);} + if (quantifier.toString().equals("THELEAST")) {drs.setQuantifier(DRS_Quantifier.THELEAST);} if (quantifier.toString().equals("AFEW")) {drs.setQuantifier(DRS_Quantifier.FEW);} if (quantifier.toString().equals("MANY")) {drs.setQuantifier(DRS_Quantifier.MANY);} - if (quantifier.toString().equals("HOWMANY")) {drs.setQuantifier(DRS_Quantifier.HOW_MANY);} + if (quantifier.toString().equals("HOWMANY")) {drs.setQuantifier(DRS_Quantifier.HOWMANY);} if (quantifier.toString().equals("NO")) {drs.setQuantifier(DRS_Quantifier.NO);} return drs; 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 2011-06-14 13:31:18 UTC (rev 2872) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/dudes/reader/DUDE_Parser.java 2011-06-14 16:39:12 UTC (rev 2873) @@ -406,11 +406,11 @@ if (quantifier.toString().equals("EVERY")) {drs.setQuantifier(DRS_Quantifier.EVERY);} if (quantifier.toString().equals("SOME")) {drs.setQuantifier(DRS_Quantifier.SOME);} if (quantifier.toString().equals("MOST")) {drs.setQuantifier(DRS_Quantifier.MOST);} - if (quantifier.toString().equals("THEMOST")) {drs.setQuantifier(DRS_Quantifier.THE_MOST);} - if (quantifier.toString().equals("THELEAST")) {drs.setQuantifier(DRS_Quantifier.THE_LEAST);} + if (quantifier.toString().equals("THEMOST")) {drs.setQuantifier(DRS_Quantifier.THEMOST);} + if (quantifier.toString().equals("THELEAST")) {drs.setQuantifier(DRS_Quantifier.THELEAST);} if (quantifier.toString().equals("AFEW")) {drs.setQuantifier(DRS_Quantifier.FEW);} if (quantifier.toString().equals("MANY")) {drs.setQuantifier(DRS_Quantifier.MANY);} - if (quantifier.toString().equals("HOWMANY")) {drs.setQuantifier(DRS_Quantifier.HOW_MANY);} + if (quantifier.toString().equals("HOWMANY")) {drs.setQuantifier(DRS_Quantifier.HOWMANY);} if (quantifier.toString().equals("NO")) {drs.setQuantifier(DRS_Quantifier.NO);} {if (true) return drs;} @@ -492,6 +492,7 @@ if (type.toString().equals("CLASS")) { slottype = SlotType.CLASS; } else if (type.toString().equals("RESOURCE")) { slottype = SlotType.RESOURCE; } else if (type.toString().equals("PROPERTY")) { slottype = SlotType.PROPERTY; } + else if (type.toString().equals("SYMPROPERTY")) { slottype = SlotType.SYMPROPERTY; } else { slottype = SlotType.UNSPEC; } {if (true) return new Slot(ref.toString(),slottype,words);} @@ -874,17 +875,17 @@ return false; } + private boolean jj_3_38() { + if (jj_scan_token(DR)) return true; + return false; + } + private boolean jj_3R_15() { if (jj_scan_token(WORD)) return true; if (jj_scan_token(14)) return true; return false; } - private boolean jj_3_38() { - if (jj_scan_token(DR)) return true; - return false; - } - private boolean jj_3_23() { if (jj_scan_token(MOST)) return true; return false; @@ -1094,18 +1095,18 @@ return false; } + private boolean jj_3_36() { + if (jj_scan_token(15)) return true; + if (jj_3R_12()) return true; + return false; + } + private boolean jj_3_18() { if (jj_scan_token(2)) return true; if (jj_3R_7()) return true; return false; } - private boolean jj_3_36() { - if (jj_scan_token(15)) return true; - if (jj_3R_12()) return true; - return false; - } - private boolean jj_3_26() { if (jj_scan_token(HOWMANY)) return true; return false; Modified: 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_Parser.jj 2011-06-14 13:31:18 UTC (rev 2872) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sem/dudes/reader/DUDE_Parser.jj 2011-06-14 16:39:12 UTC (rev 2873) @@ -376,11 +376,11 @@ if (quantifier.toString().equals("EVERY")) {drs.setQuantifier(DRS_Quantifier.EVERY);} if (quantifier.toString().equals("SOME")) {drs.setQuantifier(DRS_Quantifier.SOME);} if (quantifier.toString().equals("MOST")) {drs.setQuantifier(DRS_Quantifier.MOST);} - if (quantifier.toString().equals("THEMOST")) {drs.setQuantifier(DRS_Quantifier.THE_MOST);} - if (quantifier.toString().equals("THELEAST")) {drs.setQuantifier(DRS_Quantifier.THE_LEAST);} + if (quantifier.toString().equals("THEMOST")) {drs.setQuantifier(DRS_Quantifier.THEMOST);} + if (quantifier.toString().equals("THELEAST")) {drs.setQuantifier(DRS_Quantifier.THELEAST);} if (quantifier.toString().equals("AFEW")) {drs.setQuantifier(DRS_Quantifier.FEW);} if (quantifier.toString().equals("MANY")) {drs.setQuantifier(DRS_Quantifier.MANY);} - if (quantifier.toString().equals("HOWMANY")) {drs.setQuantifier(DRS_Quantifier.HOW_MANY);} + if (quantifier.toString().equals("HOWMANY")) {drs.setQuantifier(DRS_Quantifier.HOWMANY);} if (quantifier.toString().equals("NO")) {drs.setQuantifier(DRS_Quantifier.NO);} return drs; @@ -452,6 +452,7 @@ if (type.toString().equals("CLASS")) { slottype = SlotType.CLASS; } else if (type.toString().equals("RESOURCE")) { slottype = SlotType.RESOURCE; } else if (type.toString().equals("PROPERTY")) { slottype = SlotType.PROPERTY; } + else if (type.toString().equals("SYMPROPERTY")) { slottype = SlotType.SYMPROPERTY; } else { slottype = SlotType.UNSPEC; } return new Slot(ref.toString(),slottype,words); Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sparql/SlotType.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sparql/SlotType.java 2011-06-14 13:31:18 UTC (rev 2872) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sparql/SlotType.java 2011-06-14 16:39:12 UTC (rev 2873) @@ -1,5 +1,5 @@ package org.dllearner.algorithm.tbsl.sparql; public enum SlotType { - CLASS, PROPERTY, RESOURCE, UNSPEC + CLASS, PROPERTY, SYMPROPERTY, RESOURCE, UNSPEC } Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/templator/SlotBuilder.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/templator/SlotBuilder.java 2011-06-14 13:31:18 UTC (rev 2872) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/templator/SlotBuilder.java 2011-06-14 16:39:12 UTC (rev 2873) @@ -11,7 +11,7 @@ public class SlotBuilder { private WordNet wordnet; - private String[] noun = {"NN","NNS","NNP","NNPS","NPREP"}; + private String[] noun = {"NN","NNS","NNP","NNPS","NPREP","JJNN","JJNPREP"}; private String[] adjective = {"JJ","JJR","JJS","JJH"}; private String[] verb = {"VB","VBD","VBG","VBN","VBP","VBZ","PASSIVE","PASSPART","VPASS","VPASSIN","GERUNDIN","VPREP","WHEN","WHERE"}; private String[] preps = {"IN","TO"}; @@ -53,11 +53,11 @@ List<String> words = new ArrayList<String>(); words.add(token); - if (!pos.equals("NNP") && !pos.equals("NNPS")) { + if (!pos.equals("NNP") && !pos.equals("NNPS") && !pos.equals("JJNN")) { words.addAll(wordnet.getBestSynonyms(token)); } - String tokenfluent = token.replaceAll(" ",""); + String tokenfluent = token.replaceAll(" ","").replaceAll("_",""); String slotX = "x/" + type + "/"; String slotP = "SLOT_" + tokenfluent + "/" + type + "/"; String slotC = "SLOT_" + tokenfluent + "/CLASS/"; @@ -115,8 +115,8 @@ "<x,l1,<<e,t>,t>,[ l1:[ x | SLOT_" + tokenfluent + "(x), SLOT_of(x,y) ] ],[(l2,y,pobj,<<e,t>,t>)],[l2=l1],[" + slotC + "," + "SLOT_of/PROPERTY/" + "]>"}; String[] dpEntry2 = {token, "(DP DET[det] (NP " + treetoken + " DP[pobj]))", - "<x,l1,<<e,t>,t>,[ l1:[ x | SLOT_" + tokenfluent + "(y,x) ] ],[(l2,y,pobj,<<e,t>,t>),(l3,x,det,e)],[l2=l1,l3=l1],[" + slotP + "]> ;; " + - "<x,l1,<<e,t>,t>,[ l1:[ x | SLOT_" + tokenfluent + "(x), SLOT_of(x,y) ] ],[(l2,y,pobj,<<e,t>,t>),(l3,x,det,e)],[l2=l1,l3=l1],[" + slotC + "," + "SLOT_of/PROPERTY/" + "]>"}; + "<x,l1,<<e,t>,t>,[ l1:[ | SLOT_" + tokenfluent + "(y,x) ] ],[(l2,y,pobj,<<e,t>,t>),(l3,x,det,e)],[l2=l1,l3=l1],[" + slotP + "]> ;; " + + "<x,l1,<<e,t>,t>,[ l1:[ | SLOT_" + tokenfluent + "(x), SLOT_of(x,y) ] ],[(l2,y,pobj,<<e,t>,t>),(l3,x,det,e)],[l2=l1,l3=l1],[" + slotC + "," + "SLOT_of/PROPERTY/" + "]>"}; String[] npEntry = {token, "(NP " + treetoken + " DP[pobj])", "<x,l1,<e,t>,[ l1:[ | SLOT_" + tokenfluent + "(y,x) ] ],[(l2,y,pobj,<<e,t>,t>)],[l2=l1],[" + slotP + "]> ;; " + @@ -125,83 +125,124 @@ result.add(dpEntry2); result.add(npEntry); } + else if (pos.equals("JJNPREP")) { + String jjtoken = token.substring(0,token.indexOf("_")); + String nntoken = token.substring(token.indexOf("_")+1); + String slotfluent = "SLOT_" + tokenfluent + "/" + type + "/" + token; + String slotnn = "SLOT_" + nntoken + "/PROPERTY/" + nntoken; + String slotnnc = "SLOT_" + nntoken + "/CLASS/" + nntoken; + String slotjj = "SLOT_" + jjtoken + "/CLASS/" + jjtoken; + String[] dpEntry1 = {token, + "(DP (NP " + treetoken + " DP[pobj]))", + "<x,l1,<<e,t>,t>,[ l1:[ x | SLOT_" + tokenfluent + "(y,x) ] ],[(l2,y,pobj,<<e,t>,t>)],[l2=l1],[" + slotfluent + "]> ;; " + + "<x,l1,<<e,t>,t>,[ l1:[ x | SLOT_" + jjtoken + "(x), SLOT_" + nntoken + "(y,x) ] ],[(l2,y,pobj,<<e,t>,t>)],[l2=l1],[" + slotnn + "," + slotjj + "]> ;;" + + "<x,l1,<<e,t>,t>,[ l1:[ x | SLOT_" + jjtoken + "(x), SLOT_" + nntoken + "(x), SLOT_of(x,y) ] ],[(l2,y,pobj,<<e,t>,t>)],[l2=l1],[" + slotnnc + "," + slotjj + "," + "SLOT_of/PROPERTY/" + "]>"}; + String[] dpEntry2 = {token, + "(DP DET[det] (NP " + treetoken + " DP[pobj]))", + "<x,l1,<<e,t>,t>,[ l1:[ | SLOT_" + tokenfluent + "(y,x) ] ],[(l2,y,pobj,<<e,t>,t>),(l3,x,det,e)],[l2=l1,l3=l1],[" + slotfluent + "]> ;; " + + "<x,l1,<<e,t>,t>,[ l1:[ | SLOT_" + jjtoken + "(x), SLOT_" + nntoken + "(y,x) ] ],[(l2,y,pobj,<<e,t>,t>),(l3,x,det,e)],[l2=l1,l3=l1],[" + slotnn + "," + slotjj + "]> ;;" + + "<x,l1,<<e,t>,t>,[ l1:[ | SLOT_" + jjtoken + "(x), SLOT_" + nntoken + "(x), SLOT_of(x,y) ] ],[(l2,y,pobj,<<e,t>,t>),(l3,x,det,e)],[l2=l1,l3=l1],[" + slotnnc + "," + slotjj + "," + "SLOT_of/PROPERTY/" + "]>"}; + String[] npEntry = {token, + "(NP " + treetoken + " DP[pobj])", + "<x,l1,<e,t>,[ l1:[ | SLOT_" + tokenfluent + "(y,x) ] ],[(l2,y,pobj,<<e,t>,t>)],[l2=l1],[" + slotfluent + "]> ;; " + + "<x,l1,<e,t>,[ l1:[ | SLOT_" + jjtoken + "(x), SLOT_" + nntoken + "(y,x) ] ],[(l2,y,pobj,<<e,t>,t>)],[l2=l1],[" + slotnn + "," + slotjj + "]> ;;" + + "<x,l1,<e,t>,[ l1:[ | SLOT_" + jjtoken + "(x), SLOT_" + nntoken + "(x), SLOT_of(x,y) ] ],[(l2,y,pobj,<<e,t>,t>)],[l2=l1],[" + slotnnc + "," + slotjj + "," + "SLOT_of/PROPERTY/" + "]>"}; + result.add(dpEntry1); + result.add(dpEntry2); + result.add(npEntry); + } + else if(pos.equals("JJNN") && token.contains("_")) { + String jjtoken = token.substring(0,token.indexOf("_")); + String nntoken = token.substring(token.indexOf("_")+1); + String slotfluent = "SLOT_" + tokenfluent + "/CLASS/" + token; + String slotnn = "SLOT_" + nntoken + "/CLASS/" + nntoken; + String slotjj = "SLOT_" + jjtoken + "/CLASS/" + jjtoken; + String[] npEntry = {token, + "(NP " + treetoken + " )", + "<x,l1,<e,t>,[ l1:[ | SLOT_" + tokenfluent + "(x) ] ],[],[],[" + slotfluent + "]> ;; " + + "<x,l1,<e,t>,[ l1:[ | SLOT_" + nntoken + "(x), SLOT_" + jjtoken + "(x) ] ],[],[],[" + slotnn + "," + slotjj + "]>"}; + result.add(npEntry); + } } /* VERBS */ else if (equalsOneOf(pos,verb)) { - String slot = "SLOT_" + token + "/PROPERTY/" + token; + String slot = "SLOT_" + token + "/PROPERTY/" + token; + String symslot = "SLOT_" + token + "/SYMPROPERTY/" + token; List<String> preds = wordnet.getAttributes(token); for (Iterator<String> i = preds.iterator(); i.hasNext();) { slot += i.next(); + symslot += i.next(); if (i.hasNext()) { slot += "^"; + symslot += "^"; } } if (pos.equals("PASSIVE")) { String[] passEntry1 = {token, "(S DP[subj] (VP V:'" + token + "' DP[obj]))", - "<x,l1,t,[ l1:[|], l4:[ | SLOT_" + token + "(y,x) ] ],[(l2,x,subj,<<e,t>,t>),(l3,y,obj,<<e,t>,t>)],[ l2<l1,l3<l1,l4<scope(l2),l4<scope(l3) ],[" + slot + "]>"}; + "<x,l1,t,[ l1:[|], l4:[ | SLOT_" + token + "(y,x) ] ],[(l2,x,subj,<<e,t>,t>),(l3,y,obj,<<e,t>,t>)],[ l2<l1,l3<l1,l4<scope(l2),l4<scope(l3) ],[" + symslot + "]>"}; String[] passEntry2 = {token, "(S DP[wh] (VP DP[dp] V:'" + token + "'))", - "<x,l1,t,[ l1:[|], l4:[ | SLOT_" + token + "(x,y) ] ],[(l2,x,wh,<<e,t>,t>),(l3,y,dp,<<e,t>,t>)],[ l2<l1,l3<l1,l4<scope(l2),l4<scope(l3) ],[" + slot + "]>"}; + "<x,l1,t,[ l1:[|], l4:[ | SLOT_" + token + "(x,y) ] ],[(l2,x,wh,<<e,t>,t>),(l3,y,dp,<<e,t>,t>)],[ l2<l1,l3<l1,l4<scope(l2),l4<scope(l3) ],[" + symslot + "]>"}; result.add(passEntry1); result.add(passEntry2); } else if (pos.equals("PASSPART")) { String[] passpartEntry = {token, "(NP NP* (VP V:'" + token + "' DP[dp]))", - "<x,l1,t,[ l1:[ | SLOT_" + token + "(y,x) ] ],[(l2,y,dp,<<e,t>,t>)],[ l2=l1 ],[" + slot + "]>"}; + "<x,l1,t,[ l1:[ | SLOT_" + token + "(y,x) ] ],[(l2,y,dp,<<e,t>,t>)],[ l2=l1 ],[" + symslot + "]>"}; result.add(passpartEntry); } else if (pos.equals("VPASS")) { String[] passEntry = {token, "(S DP[subj] (VP V:'" + token + "'))", - "<x,l1,t,[ l1:[|], l4:[ | SLOT_" + token + "(y,x) ] ],[(l2,x,subj,<<e,t>,t>),(l3,y,obj,<<e,t>,t>)],[ l2<l1,l3<l1,l4<scope(l2),l4<scope(l3) ],[" + slot + "]>"}; + "<x,l1,t,[ l1:[|], l4:[ | SLOT_" + token + "(y,x) ] ],[(l2,x,subj,<<e,t>,t>),(l3,y,obj,<<e,t>,t>)],[ l2<l1,l3<l1,l4<scope(l2),l4<scope(l3) ],[" + symslot + "]>"}; result.add(passEntry); } else if (pos.equals("VPASSIN")) { String[] passEntry = {token, "(S DP[subj] (VP V:'" + token + "' DP[obj]))", - "<x,l1,t,[ l1:[|], l4:[ | SLOT_" + token + "(x,y) ] ],[(l2,x,subj,<<e,t>,t>),(l3,y,obj,<<e,t>,t>)],[ l2<l1,l3<l1,l4<scope(l2),l4<scope(l3) ],[" + slot + "]>"}; + "<x,l1,t,[ l1:[|], l4:[ | SLOT_" + token + "(x,y) ] ],[(l2,x,subj,<<e,t>,t>),(l3,y,obj,<<e,t>,t>)],[ l2<l1,l3<l1,l4<scope(l2),l4<scope(l3) ],[" + symslot + "]>"}; result.add(passEntry); } else if (pos.equals("GERUNDIN")) { String[] gerundinEntry1 = {token, "(NP NP* V:'" + token + "' DP[obj]))", - "<x,l1,t,[ l1:[ | SLOT_" + token + "(x,y) ] ],[(l2,y,obj,<<e,t>,t>)],[ l2=l1 ],[" + slot + "]>"}; + "<x,l1,t,[ l1:[ | SLOT_" + token + "(x,y) ] ],[(l2,y,obj,<<e,t>,t>)],[ l2=l1 ],[" + symslot + "]>"}; String[] gerundinEntry2 = {token, "(ADJ V:'" + token + "' DP[obj]))", - "<x,l1,<e,t>,[ l1:[ | SLOT_" + token + "(x,y) ] ],[(l2,y,obj,<<e,t>,t>)],[ l2=l1 ],[" + slot + "]>"}; + "<x,l1,<e,t>,[ l1:[ | SLOT_" + token + "(x,y) ] ],[(l2,y,obj,<<e,t>,t>)],[ l2=l1 ],[" + symslot + "]>"}; result.add(gerundinEntry1); result.add(gerundinEntry2); } else if (pos.equals("VPREP")) { String[] passEntry = {token, "(S DP[subj] (VP V:'" + token + "' DP[obj]))", - "<x,l1,t,[ l1:[|], l4:[ | SLOT_" + token + "(x,y) ] ],[(l2,x,subj,<<e,t>,t>),(l3,y,obj,<<e,t>,t>)],[ l2<l1,l3<l1,l4<scope(l2),l4<scope(l3) ],[" + slot + "]>"}; + "<x,l1,t,[ l1:[|], l4:[ | SLOT_" + token + "(x,y) ] ],[(l2,x,subj,<<e,t>,t>),(l3,y,obj,<<e,t>,t>)],[ l2<l1,l3<l1,l4<scope(l2),l4<scope(l3) ],[" + symslot + "]>"}; String[] whEntry = {token, "(S DP[obj] (VP DP[subj] V:'" + token + "'))", - "<x,l1,t,[ l1:[|], l4:[ | SLOT_" + token + "(x,y) ] ],[(l2,x,subj,<<e,t>,t>),(l3,y,obj,<<e,t>,t>)],[ l2<l1,l3<l1,l4<scope(l2),l4<scope(l3) ],[" + slot + "]>"}; + "<x,l1,t,[ l1:[|], l4:[ | SLOT_" + token + "(x,y) ] ],[(l2,x,subj,<<e,t>,t>),(l3,y,obj,<<e,t>,t>)],[ l2<l1,l3<l1,l4<scope(l2),l4<scope(l3) ],[" + symslot + "]>"}; result.add(passEntry); result.add(whEntry); } else if (pos.equals("VBD") || pos.equals("VBZ") || pos.equals("VBP")) { String[] vEntry = {token, "(S DP[subj] (VP V:'" + token + "' DP[obj]))", - "<x,l1,t,[ l1:[|], l4:[ | SLOT_" + token + "(x,y) ] ],[(l2,x,subj,<<e,t>,t>),(l3,y,obj,<<e,t>,t>)],[ l2<l1,l3<l1,l4<scope(l2),l4<scope(l3) ],[" + slot + "]>"}; + "<x,l1,t,[ l1:[|], l4:[ | SLOT_" + token + "(x,y) ] ],[(l2,x,subj,<<e,t>,t>),(l3,y,obj,<<e,t>,t>)],[ l2<l1,l3<l1,l4<scope(l2),l4<scope(l3) ],[" + symslot + "]>"}; result.add(vEntry); } else if (pos.equals("VB")) { String[] whEntry = {token, "(S DP[obj] (VP DP[subj] V:'" + token + "'))", - "<x,l1,t,[ l1:[|], l4:[ | SLOT_" + token + "(x,y) ] ],[(l2,x,subj,<<e,t>,t>),(l3,y,obj,<<e,t>,t>)],[ l2<l1,l3<l1,l4<scope(l2),l4<scope(l3) ],[" + slot + "]>"}; + "<x,l1,t,[ l1:[|], l4:[ | SLOT_" + token + "(x,y) ] ],[(l2,x,subj,<<e,t>,t>),(l3,y,obj,<<e,t>,t>)],[ l2<l1,l3<l1,l4<scope(l2),l4<scope(l3) ],[" + symslot + "]>"}; result.add(whEntry); } else if (pos.equals("VBG") || pos.equals("VBN")) { String[] gerEntry = {token, "(NP NP* (VP V:'" + token + "' DP[dp]))", - "<x,l1,t,[ l1:[ | SLOT_" + token + "(x,y) ] ],[(l2,y,dp,<<e,t>,t>)],[ l2=l1 ],[" + slot + "]>"}; + "<x,l1,t,[ l1:[ | SLOT_" + token + "(x,y) ] ],[(l2,y,dp,<<e,t>,t>)],[ l2=l1 ],[" + symslot + "]>"}; result.add(gerEntry); } else if (pos.equals("WHEN")) { @@ -297,7 +338,7 @@ } /* PREPOSITIONS */ else if (equalsOneOf(pos,preps)) { - String slot = "SLOT_" + token + "/PROPERTY/"; + String slot = "SLOT_" + token + "/SYMPROPERTY/"; String[] npAdjunct = {token, "(NP NP* (PP P:'" + token.toLowerCase() + "' DP[pobj]))", "<x,l1,<e,t>,[ l1:[ | SLOT_" + token + "(x,y) ] ],[(l2,y,pobj,<<e,t>,t>)],[l2=l1],["+slot+"]>"}; 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 2011-06-14 13:31:18 UTC (rev 2872) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/templator/Templator.java 2011-06-14 16:39:12 UTC (rev 2873) @@ -99,12 +99,13 @@ d2s.redundantEqualRenaming(drs); if (!containsModuloRenaming(drses,drs)) { -// // DEBUG -// System.out.println(drs); -// for (Slot sl : slots) { -// System.out.println(sl.toString()); -// } -// // + // DEBUG + System.out.println(dude); + System.out.println(drs); + for (Slot sl : slots) { + System.out.println(sl.toString()); + } + // drses.add(drs); try { Modified: trunk/components-ext/src/main/resources/tbsl/lexicon/english.lex =================================================================== --- trunk/components-ext/src/main/resources/tbsl/lexicon/english.lex 2011-06-14 13:31:18 UTC (rev 2872) +++ trunk/components-ext/src/main/resources/tbsl/lexicon/english.lex 2011-06-14 16:39:12 UTC (rev 2873) @@ -16,7 +16,10 @@ which are || (NP NP* (S C:'which' (VP V:'are' DP[object]))) || <x, l1, t, [ l1:[ | x=y ] ], [ (l2,y,object,<<e,t>,t>) ], [ l2=l1 ],[]> that are || (NP NP* (S C:'that' (VP V:'are' DP[object]))) || <x, l1, t, [ l1:[ | x=y ] ], [ (l2,y,object,<<e,t>,t>) ], [ l2=l1 ],[]> - is there || (S V:'is' C:'there' DP[dp]) || <x, l1, t, [ l1:[ | ] ], [ (l2,x,dp,<<e,t>,t>) ], [ l2=l1 ],[]> + is there || (S V:'is' C:'there' DP[dp]) || <x, l1, t, [ l1:[ | ] ], [ (l2,x,dp,<<e,t>,t>) ], [ l2=l1 ],[]> + are there || (S V:'are' C:'there' DP[dp]) || <x, l1, t, [ l1:[ | ] ], [ (l2,x,dp,<<e,t>,t>) ], [ l2=l1 ],[]> + is there || (S DP[dp] V:'is' C:'there') || <x, l1, t, [ l1:[ | ] ], [ (l2,x,dp,<<e,t>,t>) ], [ l2=l1 ],[]> + are there || (S DP[dp] V:'are' C:'there') || <x, l1, t, [ l1:[ | ] ], [ (l2,x,dp,<<e,t>,t>) ], [ l2=l1 ],[]> // TO BE: YES/NO QUESTIONS @@ -141,7 +144,7 @@ // EXISTENTIAL // ----------- - there || (DP (NP EX:'there')) || <x,l1,<<e,t>,t>,[l1:[x|]],[],[],[]> + there || (DP (NP EX:'there')) || <x,l1,<<e,t>,t>,[l1:[|]],[],[],[]> // ORDINAL NUMBERS (1-10) Modified: trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/POStest.java =================================================================== --- trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/POStest.java 2011-06-14 13:31:18 UTC (rev 2872) +++ trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/POStest.java 2011-06-14 16:39:12 UTC (rev 2873) @@ -3,7 +3,6 @@ import java.io.IOException; import java.util.List; -import org.annolab.tt4j.TreeTaggerException; import org.dllearner.algorithm.tbsl.nlp.ApachePartOfSpeechTagger; import org.dllearner.algorithm.tbsl.nlp.LingPipePartOfSpeechTagger; import org.dllearner.algorithm.tbsl.nlp.PartOfSpeechTagger; @@ -12,7 +11,7 @@ public class POStest { - public static void main(String[] args) throws IOException, ClassNotFoundException, TreeTaggerException { + public static void main(String[] args) throws IOException, ClassNotFoundException { String sentence = "When did Nirvana record Nevermind?"; // String sentence = "Which rivers does the Brooklyn Bridge cross?"; Modified: trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/PatternMatchingTest.java =================================================================== --- trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/PatternMatchingTest.java 2011-06-14 13:31:18 UTC (rev 2872) +++ trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/PatternMatchingTest.java 2011-06-14 16:39:12 UTC (rev 2873) @@ -12,9 +12,9 @@ // TODO Auto-generated method stub String nep = "World"; - String s = "Who/WP developed/VBD the/DT video/NN game/NN World/NN of/IN Warcraft/NNP"; + String s = "how/WRB many/JJ and/CONJ how/WRB big/JJ"; - Pattern p = Pattern.compile("(\\s)?(" + nep + "/([A-Z]+))(\\s)?"); + Pattern p = Pattern.compile("(\\w+/WRB.(\\w+)(?<!many)/JJ)"); Matcher m = p.matcher(s); while (m.find()) { System.out.println("Found! " + m.group(2)); Modified: trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/TestFrontend.java =================================================================== --- trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/TestFrontend.java 2011-06-14 13:31:18 UTC (rev 2872) +++ trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/TestFrontend.java 2011-06-14 16:39:12 UTC (rev 2873) @@ -16,7 +16,7 @@ public static void main(String[] args) { Templator templator = new Templator(); - templator.setUNTAGGED_INPUT(false); + templator.setUNTAGGED_INPUT(true); System.out.println("======= SPARQL Templator v0.1 ============="); System.out.println("\nType ':q' to quit."); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |