diff --git a/config.properties b/config.properties
index 5c53f67..f8896cb 100644
--- a/config.properties
+++ b/config.properties
@@ -33,4 +33,4 @@ KEYWORDS_TAGS:
# Scoring parameters
W2V_THRES: 0.3
WORD2VEC_GOOGLE: false
-DEBUG: 1
+DEBUG: 2
diff --git a/pom.xml b/pom.xml
index 53d0c1e..70d6aab 100644
--- a/pom.xml
+++ b/pom.xml
@@ -163,7 +163,7 @@
-Params.initWeightsRandomly
true
-Learner.maxTrainIters
- 1
+ 1000
-Builder.executor
roboy.SparqlExecutor
-Builder.simple_executor
@@ -216,18 +216,18 @@
- -FeatureExtractor.featureDomains
- rule
-
- dependencyParse
- -Dataset.inPaths
- train:data/rpqa-train.examples
- -Derivation.derivComparator
- ScoredDerivationComparator
- -Params.initWeightsRandomly
- true
- -Learner.maxTrainIters
- 1
+
+
+
+
+
+
+
+
+
+
+
+
-Builder.executor
roboy.SparqlExecutor
-Builder.simple_executor
@@ -237,7 +237,7 @@
-Grammar.inPaths
resources/roboy-demo.grammar
-SimpleLexicon.inPaths
- resources/lexicons/roboy-dbpedia.lexicon
+ resources/lexicons/roboy-demo.lexicon
-languageAnalyzer
corenlp.CoreNLPAnalyzer
-Main.server
diff --git a/resources/roboy-demo.grammar b/resources/roboy-demo.grammar
index c2139c2..0889a17 100644
--- a/resources/roboy-demo.grammar
+++ b/resources/roboy-demo.grammar
@@ -8,7 +8,8 @@
(rule $Not (nor) (ConstantFn (string not)))
(rule $Class ($PHRASE) (SimpleLexiconFn (type "ClassNoun")))
-(rule $RelClass ($PHRASE) (SimpleLexiconFn (type "RelationalNoun")))
+(rule $ObjProp ($PHRASE) (SimpleLexiconFn (type "ObjProp")))
+(rule $DataProp ($PHRASE) (SimpleLexiconFn (type "DataProp")))
(rule $RelatClass ($PHRASE) (SimpleLexiconFn (type "RelationClass")))
(rule $DatPropClass ($PHRASE) (SimpleLexiconFn (type "DataPropertyNoun")))
(rule $ObjPropClass ($PHRASE) (SimpleLexiconFn (type "ObjectProperty")))
@@ -59,9 +60,9 @@
(rule $Number ($PHRASE) (FilterPosTagFn span CD))
# Link words
-#(rule $VerbPrep ($Verb $Preposition) (ConcatFn " "))
-#(rule $VerbTo ($Verb $To) (ConcatFn " "))
-#(rule $VerbTo ($To $Verb) (SelectFn 1))
+(rule $VerbPhrase ($Verb $Preposition) (ConcatFn " "))
+(rule $VerbPhrase ($Verb $To) (ConcatFn " "))
+(rule $VerbPhrase ($To $Verb) (SelectFn 1))
# Roboy Subject Phrase
(rule $RSubject ($ObjectClass) (IdentityFn))
@@ -71,11 +72,10 @@
(rule $RSubject ($RSubject (, optional) $RSubject) (ConcatFn ","))
(rule $RSubject ($RSubject $ProNounEnd) (SelectFn 0))
-
# Roboy Predicate Phrase
-(rule $RPredicate (($BE optional) $Relat) (IdentityFn))
-(rule $RPredicate (($HAVE optional) $Relat) (IdentityFn))
-(rule $RPredicate ($RelatClass) (IdentityFn))
+(rule $RPredicate (($BE optional) $ObjProp) (IdentityFn))
+(rule $RPredicate (($HAVE optional) $ObjProp) (IdentityFn))
+(rule $RPredicate ($ObjProp) (IdentityFn))
(rule $RPredicate ($Not $RPredicate) (ConcatFn " "))
(rule $RPredicate ($RPredicate and $RPredicate) (ConcatFn ","))
(rule $RPredicate ($RPredicate , $RPredicate) (ConcatFn ","))
@@ -85,12 +85,43 @@
(rule $RPredicate ($HAVE $RPredicate) (SelectFn 1))
(rule $RPredicate ($AdjPhrase $RPredicate) (SelectFn 1))
(rule $RPredicate ($Adverb $RPredicate) (SelectFn 1))
+(rule $RPredicate ($VerbPhrase) (OpenTypeFn relation))
+(rule $RPredicate ($VerbPhrase) (SimpleLexiconFn (type "NewRelation")))
+
+
+(rule $RDataPredicate (($BE optional) $DataProp) (IdentityFn))
+(rule $RDataPredicate (($HAVE optional) $DataProp) (IdentityFn))
+(rule $RDataPredicate ($DataProp) (IdentityFn))
+(rule $RDataPredicate ($Not $RDataPredicate) (ConcatFn " "))
+(rule $RDataPredicate ($RDataPredicate and $RDataPredicate) (ConcatFn ","))
+(rule $RDataPredicate ($RDataPredicate , $RDataPredicate) (ConcatFn ","))
+(rule $RDataPredicate ($RDataPredicate or $RDataPredicate) (ConcatFn ";"))
+(rule $RDataPredicate ($TypeProperty $ObjectClass) (TripleFn "pt"))
+(rule $RDataPredicate ($BE $RDataPredicate) (SelectFn 1))
+(rule $RDataPredicate ($HAVE $RDataPredicate) (SelectFn 1))
+(rule $RDataPredicate ($AdjPhrase $RDataPredicate) (SelectFn 1))
+(rule $RDataPredicate ($Adverb $RDataPredicate) (SelectFn 1))
+(rule $RDataPredicate ($VerbPhrase) (OpenTypeFn relation))
+(rule $RDataPredicate ($VerbPhrase) (SimpleLexiconFn (type "NewRelation")))
(rule $N ($BE) (ConstantFn rb:NAME_OF))
(rule $MEMBER ($BE) (ConstantFn rb:MEMBER_OF))
(rule $OCCUP ($BE $Det) (ConstantFn rb:OCCUPIED_AS))
# Object Phrase
+(rule $Object ($Noun) (OpenTypeFn type))
+(rule $Object ($NamedEntity) (OpenTypeFn entity))
+(rule $Object ($Noun) (SimpleLexiconFn (type "NewType")))
+(rule $Object ($NamedEntity) (SimpleLexiconFn (type "NewEntity")))
+(rule $Object ($Det $Object) (SelectFn 1))
+(rule $Object ($Conj $Object) (SelectFn 1))
+(rule $Object ($Object or $Object) (ConcatFn ";"))
+(rule $Object ($Object ($Conj optional) $Object) (ConcatFn ","))
+(rule $Object ($Object , $Object) (ConcatFn ","))
+(rule $Object ($Adjective $Object) (TripleFn "ot"))
+(rule $Object ($Object $Adjective) (TripleFn "to"))
+
+# Value Phrase
(rule $Value ($Noun) (IdentityFn))
(rule $Value ($LEMMA_PHRASE) (FilterPosTagFn span VBG))
(rule $Value ($Det $Value) (SelectFn 1))
@@ -120,13 +151,26 @@
(rule $Expr ($RSubject $OCCUP $Value) (TripleFn "spo"))
(rule $Expr ($Person $N $PersonName) (TripleFn "spo"))
(rule $Expr ($ObjectClass $N $PersonName) (TripleFn "spo"))
-(rule $Expr ($RSubject $Value $Preposition ($TOKEN optional) $RPredicate) (TripleFn "sop"))
-(rule $Expr ($RSubject $RPredicate ($Preposition optional) $Value) (TripleFn "spo"))
-(rule $Expr ($RSubject $RPredicate ($TOKEN optional) ($BE optional) $Value) (TripleFn "spo"))
-(rule $Expr ($Value ($BE optional) $RSubject $RPredicate) (TripleFn "osp"))
-(rule $Expr ($RSubject $RPredicate ($BE optional) $Value) (TripleFn "spo"))
+(rule $Expr ($RSubject $Value $Preposition ($TOKEN optional) $RDataPredicate) (TripleFn "sop"))
+(rule $Expr ($RSubject $RDataPredicate ($Preposition optional) $Value) (TripleFn "spo"))
+(rule $Expr ($RSubject $RDataPredicate ($TOKEN optional) ($BE optional) $Value) (TripleFn "spo"))
+(rule $Expr ($Value ($BE optional) $RSubject $RDataPredicate) (TripleFn "osp"))
+(rule $Expr ($RSubject $RDataPredicate ($BE optional) $Value) (TripleFn "spo"))
+(rule $Expr ($AdjPhrase ($BE optional) $RSubject $RDataPredicate) (TripleFn "osp"))
+(rule $Expr ($RDataPredicate $RSubject $Value) (TripleFn "pso"))
+
+(rule $Expr ($RSubject $MEMBER $Object member) (TripleFn "spo"))
+(rule $Expr ($RSubject $OCCUP $Object) (TripleFn "spo"))
+(rule $Expr ($Person $N $PersonName) (TripleFn "spo"))
+(rule $Expr ($ObjectClass $N $PersonName) (TripleFn "spo"))
+(rule $Expr ($RSubject $Object $Preposition ($TOKEN optional) $RPredicate) (TripleFn "sop"))
+(rule $Expr ($RSubject $RPredicate ($Preposition optional) $Object) (TripleFn "spo"))
+(rule $Expr ($RSubject $RPredicate ($TOKEN optional) ($BE optional) $Object) (TripleFn "spo"))
+(rule $Expr ($Object ($BE optional) $RSubject $RPredicate) (TripleFn "osp"))
+(rule $Expr ($RSubject $RPredicate ($BE optional) $Object) (TripleFn "spo"))
(rule $Expr ($AdjPhrase ($BE optional) $RSubject $RPredicate) (TripleFn "osp"))
-(rule $Expr ($RPredicate $RSubject $Value) (TripleFn "pso"))
+(rule $Expr ($RPredicate $RSubject $Object) (TripleFn "pso"))
+
(rule $ROOT ($Expr) (IdentityFn))
(rule $ROOT ($Expr ($Conj optional) $Expr) (ListFn))
(rule $ROOT (($Noun optional) $Expr) (IdentityFn))
@@ -162,8 +206,9 @@
(rule $RSet ($Unary $Unary) (MergeFn and))
(rule $RSet ($Binary $RSet) (JoinFn forward))
(rule $RSet ($RSet $Binary) (JoinFn backward))
-(rule $ROOT (($Wh optional) $RSet) (IdentityFn))
-(rule $ROOT ((what optional) (is optional) $RSet) (IdentityFn))
+(rule $ROOT ($Wh $RSet) (SelectFn 1))
+(rule $ROOT ($Wh $BE $RSet) (SelectFn 2))
+(rule $ROOT ($Ignore $RSet) (SelectFn 1))
#TEST SET
diff --git a/src/main/java/edu/stanford/nlp/sempre/OpenTypeFn.java b/src/main/java/edu/stanford/nlp/sempre/OpenTypeFn.java
index a163730..5dfd1ae 100644
--- a/src/main/java/edu/stanford/nlp/sempre/OpenTypeFn.java
+++ b/src/main/java/edu/stanford/nlp/sempre/OpenTypeFn.java
@@ -41,16 +41,16 @@ public class OpenTypeFn extends SemanticFn {
@Override
public Derivation createDerivation() {
StringBuilder out = new StringBuilder();
- if (type) out.append("OpenType\'");
- if (rel) out.append("OpenRel\'");
- if (entity) out.append("OpenEntity\'");
+ if (type) out.append("OpenType'");
+ if (rel) out.append("OpenRel'");
+ if (entity) out.append("OpenEntity'");
for (int i = 0; i < c.getChildren().size(); i++) {
if (i > 0)
out.append(" ");
out.append(c.childStringValue(i));
}
- out.append("\''");
- if (SimpleLexicon.getSingleton().lookup(out.toString().substring(out.toString().indexOf("\'")+1,out.toString().indexOf("\''"))).isEmpty())
+ out.append("''");
+ if (SimpleLexicon.getSingleton().lookup(out.toString().substring(out.toString().indexOf("'")+1,out.toString().indexOf("''"))).isEmpty())
return new Derivation.Builder()
.withCallable(c)
.withStringFormulaFrom(out.toString())
diff --git a/src/main/java/edu/stanford/nlp/sempre/ParserState.java b/src/main/java/edu/stanford/nlp/sempre/ParserState.java
index 90c51e8..596ef7e 100644
--- a/src/main/java/edu/stanford/nlp/sempre/ParserState.java
+++ b/src/main/java/edu/stanford/nlp/sempre/ParserState.java
@@ -239,7 +239,6 @@ public abstract class ParserState {
List remove = new ArrayList();
List formulas = new ArrayList();
for (Derivation deriv : predDerivations) {
- // TODO: Add postprocess(deriv, ex.context);
if (!String.join(" ",formulas).contains(deriv.formula.toString()))
formulas.add(deriv.formula.toString());
else {
diff --git a/src/main/java/edu/stanford/nlp/sempre/TripleFn.java b/src/main/java/edu/stanford/nlp/sempre/TripleFn.java
index 01076f5..b4f1250 100644
--- a/src/main/java/edu/stanford/nlp/sempre/TripleFn.java
+++ b/src/main/java/edu/stanford/nlp/sempre/TripleFn.java
@@ -28,7 +28,8 @@ public class TripleFn extends SemanticFn {
}
public String initial_formula(String string1, String string2) {
- // TODO: Check types to form only with one database only
+ string1 = org.apache.commons.lang.StringEscapeUtils.unescapeJava(string1);
+ string2 = org.apache.commons.lang.StringEscapeUtils.unescapeJava(string2);
Map triple = new HashMap<>();
if (this.mode.equals("spo")) {
triple.put("subject", string1);
@@ -80,6 +81,8 @@ public class TripleFn extends SemanticFn {
public String merge_formula(String string1, String string2) {
// Convert JSON string back to Map.
+ string1 = org.apache.commons.lang.StringEscapeUtils.unescapeJava(string1);
+ string2 = org.apache.commons.lang.StringEscapeUtils.unescapeJava(string2);
Gson gson = new Gson();
Type type = new TypeToken