- cosmas classrefcheck
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/AbstractSyntaxTree.java b/src/main/java/de/ids_mannheim/korap/query/serialize/AbstractSyntaxTree.java
index d0e9ec0..4ad6a01 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/AbstractSyntaxTree.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/AbstractSyntaxTree.java
@@ -56,12 +56,14 @@
ArrayList<String> errorMsgs = new ArrayList<String>();
ArrayList<String> warnings = new ArrayList<String>();
ArrayList<String> announcements = new ArrayList<String>();
+ LinkedHashMap<String, Object> collection = new LinkedHashMap<String,Object>();
AbstractSyntaxTree() {
requestMap.put("@context", "http://ids-mannheim.de/ns/KorAP/json-ld/v0.2/context.jsonld");
requestMap.put("errors", errorMsgs);
requestMap.put("warnings", warnings);
requestMap.put("announcements", announcements);
+ requestMap.put("collection", collection);
}
public Map<String, Object> getRequestMap() {
@@ -149,42 +151,44 @@
group.put("@type", "korap:group");
group.put("operation", "operation:position");
group.put("frames", Arrays.asList(allowedFrames));
- group.put("sharedClasses", Arrays.asList(sharedClasses));
+// group.put("sharedClasses", Arrays.asList(sharedClasses));
group.put("operands", new ArrayList<Object>());
// DEPRECATED 'frame'
+ if (sharedClasses.length==0) sharedClasses = new String[]{"classRefCheck:includes"};
String frame = "";
- if (allowedFrames.length==0 && sharedClasses[0]=="sharedClasses:includes") {
+
+ if (allowedFrames.length==0 && sharedClasses[0]=="classRefCheck:includes") {
frame = "frame:contains";
- } else if (allowedFrames.length==0 && sharedClasses[0]=="sharedClasses:intersects") {
+ } else if (allowedFrames.length==0 && sharedClasses[0]=="classRefCheck:intersects") {
frame = "frame:overlaps";
- } else if (allowedFrames[0]=="frame:startswith" && sharedClasses[0]=="sharedClasses:includes") {
+ } else if (allowedFrames[0]=="frames:startswith" && sharedClasses[0]=="classRefCheck:includes") {
frame = "frame:startswith";
- } else if (allowedFrames[0]=="frame:endswith" && sharedClasses[0]=="sharedClasses:includes") {
+ } else if (allowedFrames[0]=="frames:endswith" && sharedClasses[0]=="classRefCheck:includes") {
frame = "frame:endswith";
- } else if (allowedFrames[0]=="frame:matches" && sharedClasses[0]=="sharedClasses:includes" && sharedClasses.length==1) {
+ } else if (allowedFrames[0]=="frames:matches" && sharedClasses[0]=="classRefCheck:includes" && sharedClasses.length==1) {
frame = "frame:endswith";
- } else if (allowedFrames[0]=="frame:matches" && sharedClasses[0]=="sharedClasses:includes" && sharedClasses[1]=="sharedClasses:unequals") {
+ } else if (allowedFrames[0]=="frames:matches" && sharedClasses[0]=="classRefCheck:includes" && sharedClasses[1]=="classRefCheck:unequals") {
frame = "frame:matches";
- } else if (allowedFrames[0]=="frame:matches" && sharedClasses[0]=="sharedClasses:equals") {
+ } else if (allowedFrames[0]=="frames:matches" && sharedClasses[0]=="classRefCheck:equals") {
frame = "frame:matches";
- } else if (allowedFrames[0]=="frame:contains" && sharedClasses[0]=="sharedClasses:includes") {
+ } else if (allowedFrames[0]=="frames:contains" && sharedClasses[0]=="classRefCheck:includes") {
frame = "frame:contains";
- } else if (allowedFrames[0]=="frame:startswith" && sharedClasses[0]=="sharedClasses:intersects") {
+ } else if (allowedFrames[0]=="frames:startswith" && sharedClasses[0]=="classRefCheck:intersects") {
frame = "frame:overlapsLeft";
- } else if (allowedFrames[0]=="frame:endswith" && sharedClasses[0]=="sharedClasses:intersects") {
+ } else if (allowedFrames[0]=="frames:endswith" && sharedClasses[0]=="classRefCheck:intersects") {
frame = "frame:overlapsRight";
- } else if (allowedFrames[0]=="frame:matches" && sharedClasses[0]=="sharedClasses:intersects") {
+ } else if (allowedFrames[0]=="frames:matches" && sharedClasses[0]=="classRefCheck:intersects") {
frame = "frame:matches";
- } else if (allowedFrames[0]=="frame:matches" && sharedClasses[0]=="sharedClasses:unequals") {
+ } else if (allowedFrames[0]=="frames:matches" && sharedClasses[0]=="classRefCheck:unequals") {
frame = "frame:matches";
- } else if (allowedFrames[0]=="frame:matches" && sharedClasses[0]=="sharedClasses:equals") {
+ } else if (allowedFrames[0]=="frames:matches" && sharedClasses[0]=="classRefCheck:equals") {
frame = "frame:matches";
- } else if (allowedFrames[0]=="frame:contains" && sharedClasses[0]=="sharedClasses:intersects") {
+ } else if (allowedFrames[0]=="frames:contains" && sharedClasses[0]=="classRefCheck:intersects") {
frame = "frame:contains";
}
group.put("frame", frame);
announcements.add("Deprecated 2014-09-22: 'frame' only to be supported until 3 months from deprecation date. " +
- "Position frames are now expressed through 'frames' and 'sharedClasses'");
+ "Position frames are now expressed through 'frames' and 'sharedClasses'.");
return group;
}
@@ -198,11 +202,41 @@
group.put("operation", "operation:class");
if (setBySystem) {
group.put("class", 1024+classCount);
+ group.put("classOut", 1024+classCount);
announcements.add("A class has been introduced into the backend representation of " +
- "your query for later reference to a part of the query. The class id is "+classCount);
+ "your query for later reference to a part of the query. The class id is "+(1024+classCount));
} else {
group.put("class", classCount);
+ group.put("classOut", classCount);
}
+ announcements.add("Deprecated 2014-10-07: 'class' only to be supported until 3 months from deprecation date. " +
+ "Classes are now defined using the 'classOut' attribute.");
+ group.put("operands", new ArrayList<Object>());
+ return group;
+ }
+
+ protected LinkedHashMap<String, Object> makeClassRefCheck(ArrayList<String> check, Integer[] classIn, int classOut) {
+ LinkedHashMap<String, Object> group = new LinkedHashMap<String, Object>();
+ group.put("@type", "korap:group");
+ group.put("operation", "operation:class");
+ if (check.size()==1) {
+ group.put("classRefCheck", check.get(0));
+ } else {
+ group.put("classRefCheck", check);
+ }
+ group.put("classIn", Arrays.asList(classIn));
+ group.put("classOut", classOut);
+ group.put("operands", new ArrayList<Object>());
+ return group;
+ }
+
+ protected LinkedHashMap<String, Object> makeClassRefOp(String operation, Integer[] classIn, int classOut) {
+ LinkedHashMap<String, Object> group = new LinkedHashMap<String, Object>();
+ group.put("@type", "korap:group");
+ group.put("operation", "operation:class");
+ group.put("classRefOp", operation);
+ group.put("classIn", Arrays.asList(classIn));
+ group.put("classOut", classOut);
group.put("operands", new ArrayList<Object>());
return group;
}
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/CosmasTree.java b/src/main/java/de/ids_mannheim/korap/query/serialize/CosmasTree.java
index ba42dbe..c89f418 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/CosmasTree.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/CosmasTree.java
@@ -24,6 +24,7 @@
* Map representation of CosmasII syntax tree as returned by ANTLR
*
* @author bingel
+ * @version 0.2
*/
public class CosmasTree extends Antlr3AbstractSyntaxTree {
@@ -47,6 +48,12 @@
*/
boolean inMeta = false;
/**
+ * If true, a sequence (OPPROX node) is governed by an OPALL node (ALL()-operator), which requires to match
+ * all tokens of the sequence.
+ */
+ boolean inOPALL = false;
+ boolean inOPNHIT = false;
+ /**
*
*/
int classCounter = 1;
@@ -76,7 +83,7 @@
*/
private LinkedList<Tree> sequencedNodes = new LinkedList<Tree>();
- private boolean hasSequentiableSiblings;
+ private boolean nodeHasSequentiableSiblings;
/**
* Keeps track of operands lists that are to be serialised in an inverted
@@ -91,7 +98,6 @@
public CosmasTree(String query) throws QueryException {
this.query = query;
process(query);
- System.out.println("\n" + requestMap.get("query"));
log.info(">>> " + requestMap.get("query") + " <<<");
}
@@ -144,14 +150,14 @@
if (parent.getChildCount() > 1) {
// if node is first child of parent...
if (node == parent.getChild(0)) {
- hasSequentiableSiblings = false;
+ nodeHasSequentiableSiblings = false;
for (int i = 1; i < parent.getChildCount(); i++) {
if (sequentiableCats.contains(getNodeCat(parent.getChild(i)))) {
- hasSequentiableSiblings = true;
+ nodeHasSequentiableSiblings = true;
continue;
}
}
- if (hasSequentiableSiblings) {
+ if (nodeHasSequentiableSiblings) {
// Step I: create sequence
LinkedHashMap<String, Object> sequence = new LinkedHashMap<String, Object>();
sequence.put("@type", "korap:group");
@@ -413,6 +419,7 @@
boolean putIntoOverlapDisjunction = false;
+ int min = 0, max = 0;
// possibly several distance constraints
for (int i = 0; i < dist_list.getChildCount(); i++) {
String direction = dist_list.getChild(i).getChild(0).getChild(0).toStringTree().toLowerCase();
@@ -422,8 +429,8 @@
if (minStr.equals("VAL0")) {
minStr = "0";
}
- int min = Integer.parseInt(minStr);
- int max = Integer.parseInt(maxStr);
+ min = Integer.parseInt(minStr);
+ max = Integer.parseInt(maxStr);
// If zero word-distance, wrap this sequence in a disjunction along with an overlap position
// between the two operands
/*
@@ -442,7 +449,9 @@
if (exclusion) {
distance.put("exclude", true);
}
- constraints.add(distance);
+// if (! openNodeCats.get(1).equals("OPNHIT")) {
+ constraints.add(distance);
+// }
if (i==0) {
if (direction.equals("plus")) {
inOrder = true;
@@ -457,10 +466,15 @@
group.put("inOrder", inOrder);
LinkedHashMap<String, Object> embeddedSequence = group;
- if (! (openNodeCats.get(1).equals("OPBEG") || openNodeCats.get(1).equals("OPEND") || openNodeCats.get(1).equals("OPALL") || openNodeCats.get(1).equals("OPNHIT"))) {
+ if (! (openNodeCats.get(1).equals("OPBEG") || openNodeCats.get(1).equals("OPEND") || inOPALL || openNodeCats.get(1).equals("OPNHIT"))) {
wrapOperandInClass(node,1,classCounter);
wrapOperandInClass(node,2,classCounter);
group = wrapInReference(group, 1024+classCounter++);
+ } else if (openNodeCats.get(1).equals("OPNHIT")) {
+ LinkedHashMap<String,Object> repetition = makeRepetition(min, max);
+ ((ArrayList<Object>) repetition.get("operands")).add(makeToken());
+ // TODO go on with this: put the repetition into a class and put it in between the operands
+ // -> what if there's several distance constraints. with different keys, like /w4,s0?
}
LinkedHashMap<String,Object> sequence = null;
@@ -499,22 +513,42 @@
// inlcusion or overlap
if (nodeCat.equals("OPIN") || nodeCat.equals("OPOV")) {
// Step I: create group
- wrapOperandInClass(node,1,classCounter);
+ wrapOperandInClass(node,2,classCounter++);
+ wrapOperandInClass(node,1,classCounter++);
// LinkedHashMap<String, Object> posgroup = makePosition(null);
LinkedHashMap<String, Object> posgroup = makeGroup("position");
+ LinkedHashMap<String, Object> positionOptions;
// posgroup
if (nodeCat.equals("OPIN")) {
- posgroup = parseOPINOptions(node, posgroup);
+ positionOptions = parseOPINOptions(node);
} else {
- posgroup = parseOPOVOptions(node, posgroup);
+ positionOptions = parseOPOVOptions(node);
+ }
+ posgroup.put("frames", positionOptions.get("frames"));
+ posgroup.put("frame", positionOptions.get("frame"));
+ if (positionOptions.containsKey("exclude")) {
+ posgroup.put("exclude", positionOptions.get("exclude"));
+ }
+ if (positionOptions.containsKey("grouping")) {
+ posgroup.put("grouping", positionOptions.get("grouping"));
}
objectStack.push(posgroup);
// mark this an inverted operands object
invertedOperandsLists.push((ArrayList<Object>) posgroup.get("operands"));
stackedObjects++;
- // Step II: wrap in reference (limit match to first argument) and decide where to put
- LinkedHashMap<String, Object> submatchgroup = wrapInReference(posgroup, 1024+classCounter);
- putIntoSuperObject(submatchgroup, 1);
+ // Step II: wrap in reference and decide where to put
+ ArrayList<String> check = (ArrayList<String>) positionOptions.get("classRefCheck");
+ Integer[] classIn = new Integer[]{1024+classCounter-2,1024+classCounter-1};
+ LinkedHashMap<String, Object> classRefCheck = makeClassRefCheck(check, classIn, 1024+classCounter);
+ ((ArrayList<Object>) classRefCheck.get("operands")).add(posgroup);
+ LinkedHashMap<String, Object> focusGroup = null;
+ if ((boolean) positionOptions.get("matchall") == true) {
+ focusGroup = makeResetReference();
+ ((ArrayList<Object>) focusGroup.get("operands")).add(classRefCheck);
+ } else { // match only first argument
+ focusGroup = wrapInReference(classRefCheck, 1024+classCounter-1);
+ }
+ putIntoSuperObject(focusGroup, 1);
}
// Wrap the argument of an #IN operator in a previously defined container
@@ -536,17 +570,22 @@
// }
}
+ if (nodeCat.equals("OPALL")) {
+ inOPALL = true;
+ }
+
if (nodeCat.equals("OPNHIT")) {
- ArrayList<Integer> classRef = new ArrayList<Integer>();
- classRef.add(1024+classCounter);
+ Integer[] classRef = new Integer[]{1024+classCounter+1, 1024+classCounter+2};
// classRef.add(classCounter + 1); // yes, do this twice (two classes)!
- LinkedHashMap<String, Object> group = makeReference(classRef);
- group.put("classRefOp", "classRefOp:inversion");
+ LinkedHashMap<String, Object> group = makeReference(1024+classCounter);
+ LinkedHashMap<String, Object> classRefCheck = makeClassRefOp("classRefOp:inversion", classRef, classCounter+1024);
ArrayList<Object> operands = new ArrayList<Object>();
+ operands.add(classRefCheck);
group.put("operands", operands);
- wrapOperandInClass(node.getChild(0),1,1024+classCounter); // direct child is OPPROX
- wrapOperandInClass(node.getChild(0),2,1024+classCounter++);
- objectStack.push(group);
+ classCounter++;
+ wrapOperandInClass(node.getChild(0),1,classCounter++); // direct child is OPPROX
+ wrapOperandInClass(node.getChild(0),2,classCounter++);
+ objectStack.push(classRefCheck);
stackedObjects++;
putIntoSuperObject(group, 1);
}
@@ -592,7 +631,7 @@
// create the group expressing the position constraint
String[] frames = new String[]{c.position};
- String[] sharedClasses = new String[]{"sharedClasses:includes"}; // OPBED only defines #IN-corresponding positions
+ String[] sharedClasses = new String[]{}; // OPBED only defines frame constraint, neglects intersection type
LinkedHashMap<String,Object> posgroup = makePosition(frames, sharedClasses);
// LinkedHashMap<String, Object> posgroup = makePosition(c.position);
ArrayList<Object> operands = (ArrayList<Object>) posgroup.get("operands");
@@ -617,7 +656,7 @@
} else {
// node has several conditions (like 'sa, -pa')
// -> create identity position group and embed all position groups there
- LinkedHashMap<String, Object> conjunct = makePosition(new String[]{"frame:matches"}, new String[]{"sharedClasses:equals"});
+ LinkedHashMap<String, Object> conjunct = makePosition(new String[]{"frames:matches"}, new String[]{"classRefCheck:equals"});
// ArrayList<Object> distances = new ArrayList<Object>();
// distances.add(makeDistance("w", 0,0));
// conjunct.put("distances", distances);
@@ -630,7 +669,7 @@
// make position group
CosmasCondition c = new CosmasCondition(conditions.getChild(i));
String[] frames = new String[]{c.position};
- String[] sharedClasses = new String[]{"sharedClasses:includes"}; // OPBED only defines #IN-corresponding positions
+ String[] sharedClasses = new String[]{}; // OPBED only defines frame constraint, neglects intersection type
LinkedHashMap<String,Object> posGroup = makePosition(frames, sharedClasses);
operands.add(posGroup);
if (c.negated) posGroup.put("exclude", "true");
@@ -697,6 +736,11 @@
if (nodeCat.equals("ARG2") && openNodeCats.get(1).equals("OPNOT")) {
negate = false;
}
+
+ if (nodeCat.equals("OPALL")) {
+ inOPALL = false;
+ }
+
openNodeCats.pop();
}
@@ -743,59 +787,60 @@
}
@SuppressWarnings("unchecked")
- private LinkedHashMap<String, Object> parseOPINOptions(Tree node, LinkedHashMap<String, Object> posgroup) {
+ private LinkedHashMap<String, Object> parseOPINOptions(Tree node) {
Tree posnode = getFirstChildWithCat(node, "POS");
Tree rangenode = getFirstChildWithCat(node, "RANGE");
Tree exclnode = getFirstChildWithCat(node, "EXCL");
Tree groupnode = getFirstChildWithCat(node, "GROUP");
boolean negatePosition = false;
-
+ LinkedHashMap<String, Object> posOptions = new LinkedHashMap<String, Object>();
ArrayList<String> positions = new ArrayList<String>();
- ArrayList<String> sharedClasses = new ArrayList<String>();
+ ArrayList<String> classRefCheck = new ArrayList<String>();
+ posOptions.put("matchall", false);
String frame = "";
String posOption = null;
if (posnode != null) {
posOption = posnode.getChild(0).toStringTree();
switch (posOption) {
case "L":
- positions.add("frame:startswith");
- sharedClasses.add("sharedClasses:includes");
+ positions.add("frames:startswith");
+ classRefCheck.add("classRefCheck:includes");
frame = "startswith";
break;
case "R":
- positions.add("frame:endswith");
- sharedClasses.add("sharedClasses:includes");
+ positions.add("frames:endswith");
+ classRefCheck.add("classRefCheck:includes");
frame = "endswith";
break;
case "F":
- positions.add("frame:matches");
- sharedClasses.add("sharedClasses:includes");
+ positions.add("frames:matches");
+ classRefCheck.add("classRefCheck:includes");
frame = "matches";
break;
case "FE":
- positions.add("frame:matches");
- sharedClasses.add("sharedClasses:equals");
+ positions.add("frames:matches");
+ classRefCheck.add("classRefCheck:equals");
frame = "matches";
break;
case "FI":
- positions.add("frame:matches");
- sharedClasses.add("sharedClasses:unequals");
- sharedClasses.add("sharedClasses:includes");
+ positions.add("frames:matches");
+ classRefCheck.add("classRefCheck:unequals");
+ classRefCheck.add("classRefCheck:includes");
frame = "matches-noident";
break;
case "N":
- positions.add("frame:contains");
- sharedClasses.add("sharedClasses:includes");
+ positions.add("frames:contains");
+ classRefCheck.add("classRefCheck:includes");
frame = "contains";
break;
}
} else {
- sharedClasses.add("sharedClasses:includes");
+ classRefCheck.add("classRefCheck:includes");
frame = "contains";
}
- posgroup.put("frames", positions);
- posgroup.put("sharedClasses", sharedClasses);
- posgroup.put("frame", "frame:"+frame);
+ posOptions.put("frames", positions);
+ posOptions.put("classRefCheck", classRefCheck);
+ posOptions.put("frame", "frame:"+frame);
announcements.add("Deprecated 2014-09-22: 'frame' only to be supported until 3 months from deprecation date. " +
"Position frames are now expressed through 'frames' and 'sharedClasses'");
@@ -808,92 +853,108 @@
if (rangenode != null) {
String range = rangenode.getChild(0).toStringTree().toLowerCase();
if (range.equals("all")) {
- LinkedHashMap<String,Object> ref = makeResetReference(); // reset all defined classes
- wrapOperand(node,2,ref);
+ posOptions.put("matchall", true);
+// LinkedHashMap<String,Object> ref = makeResetReference(); // reset all defined classes
+// wrapOperand(node,2,ref);
}
}
if (negatePosition) {
- posgroup.put("exclude", "true");
+ posOptions.put("exclude", "true");
}
if (groupnode != null) {
String grouping = groupnode.getChild(0).toStringTree().equals("max") ? "true" : "false";
- posgroup.put("grouping", grouping);
+ posOptions.put("grouping", grouping);
}
- return posgroup;
+ return posOptions;
}
- private LinkedHashMap<String, Object> parseOPOVOptions(Tree node, LinkedHashMap<String, Object> posgroup) {
+ private LinkedHashMap<String, Object> parseOPOVOptions(Tree node) {
boolean negatePosition = false;
Tree posnode = getFirstChildWithCat(node, "POS");
+ Tree rangenode = getFirstChildWithCat(node, "RANGE");
Tree exclnode = getFirstChildWithCat(node, "EXCL");
Tree groupnode = getFirstChildWithCat(node, "GROUP");
-
+ LinkedHashMap<String, Object> posOptions = new LinkedHashMap<String, Object>();
ArrayList<String> positions = new ArrayList<String>();
- ArrayList<String> sharedClasses = new ArrayList<String>();
+ ArrayList<String> classRefCheck = new ArrayList<String>();
+ posOptions.put("matchall", false);
String frame = "";
String posOption = null;
if (posnode != null) {
posOption = posnode.getChild(0).toStringTree();
switch (posOption) {
case "L":
- positions.add("frame:startswith");
- positions.add("frame:overlapsLeft");
- sharedClasses.add("sharedClasses:intersects");
+ positions.add("frames:startswith");
+ positions.add("frames:overlapsLeft");
+ classRefCheck.add("classRefCheck:intersects");
frame = "overlapsLeft";
break;
case "R":
- positions.add("frame:endswith");
- positions.add("frame:overlapsRight");
- sharedClasses.add("sharedClasses:intersects");
+ positions.add("frames:endswith");
+ positions.add("frames:overlapsRight");
+ classRefCheck.add("classRefCheck:intersects");
frame = "overlapsRight";
break;
case "F":
- positions.add("frame:matches");
- sharedClasses.add("sharedClasses:intersects");
+ positions.add("frames:matches");
+ classRefCheck.add("classRefCheck:intersects");
frame = "matches";
break;
case "FE":
- positions.add("frame:matches");
- sharedClasses.add("sharedClasses:equals");
+ positions.add("frames:matches");
+ classRefCheck.add("classRefCheck:equals");
frame = "matches";
break;
case "FI":
- positions.add("frame:matches");
- sharedClasses.add("sharedClasses:unequals");
+ positions.add("frames:matches");
+ classRefCheck.add("classRefCheck:unequals");
frame = "matches-noident";
break;
case "X":
- positions.add("frame:contains");
- sharedClasses.add("sharedClasses:intersects");
+ positions.add("frames:contains");
+ classRefCheck.add("classRefCheck:intersects");
frame = "overlaps";
break;
}
} else {
- sharedClasses.add("sharedClasses:intersects");
+ classRefCheck.add("classRefCheck:intersects");
frame = "overlaps";
}
- posgroup.put("frames", positions);
- posgroup.put("sharedClasses", sharedClasses);
- posgroup.put("frame", "frame:"+frame);
+ posOptions.put("frames", positions);
+ posOptions.put("classRefCheck", classRefCheck);
+ posOptions.put("frame", "frame:"+frame);
announcements.add("Deprecated 2014-09-22: 'frame' only to be supported until 3 months from deprecation date. " +
"Position frames are now expressed through 'frames' and 'sharedClasses'");
if (exclnode != null) {
if (exclnode.getChild(0).toStringTree().equals("YES")) {
- posgroup.put("match", "match:" + "ne");
+ negatePosition = !negatePosition;
}
}
- if (groupnode != null) {
- String grouping = groupnode.getChild(0).toStringTree().equals("@max") ? "true" : "false";
- posgroup.put("grouping", grouping);
+ if (rangenode != null) {
+ String range = rangenode.getChild(0).toStringTree().toLowerCase();
+ if (range.equals("all")) {
+ posOptions.put("matchall", true);
+// LinkedHashMap<String,Object> ref = makeResetReference(); // reset all defined classes
+// wrapOperand(node,2,ref);
+ }
}
- return posgroup;
+
+ if (negatePosition) {
+ posOptions.put("exclude", "true");
+ }
+
+ if (groupnode != null) {
+ String grouping = groupnode.getChild(0).toStringTree().equals("max") ? "true" : "false";
+ posOptions.put("grouping", grouping);
+ }
+ return posOptions;
}
@SuppressWarnings({ "unchecked" })
@@ -986,7 +1047,6 @@
ArrayList<Object> topObjectOperands = (ArrayList<Object>) objectStack.get(objStackPosition).get("operands");
if (!invertedOperandsLists.contains(topObjectOperands)) {
topObjectOperands.add(object);
- System.out.println(objectStack.get(objStackPosition));
} else {
topObjectOperands.add(0, object);
}
@@ -1070,10 +1130,13 @@
// "wegen #OV(F) <s>"
// "Sonne /s0 Mond",
"Sonne /+w1:4 Mond /-w1:7 Sterne",
- "Der:t",
- "&mond-"
+ "Der:ta",
+ "&mond-",
+ "gehen /+w10 voran %w10 Beispiel",
+ "(gehen /+w10 voran) %w10 Beispiel",
+ "#BED(der Mann , sa,-pa)"
};
- CosmasTree.verbose=true;
+// CosmasTree.verbose=true;
for (String q : queries) {
try {
System.out.println(q);
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/TreeTemplate.java b/src/main/java/de/ids_mannheim/korap/query/serialize/TreeTemplate.java
index 80d4a12..7030f5c 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/TreeTemplate.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/TreeTemplate.java
@@ -2,13 +2,9 @@
import java.lang.reflect.Method;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
import org.antlr.v4.runtime.ANTLRInputStream;
import org.antlr.v4.runtime.BailErrorStrategy;
@@ -21,20 +17,15 @@
import de.ids_mannheim.korap.query.annis.AqlLexer;
import de.ids_mannheim.korap.query.annis.AqlParser;
-import de.ids_mannheim.korap.query.serialize.AbstractSyntaxTree;
import de.ids_mannheim.korap.util.QueryException;
/**
* Map representation of syntax tree as returned by ANTLR
- * @author joachim
+ * @author bingel
*
*/
public class TreeTemplate extends Antlr4AbstractSyntaxTree {
/**
- * Top-level map representing the whole request.
- */
- LinkedHashMap<String,Object> requestMap = new LinkedHashMap<String,Object>();
- /**
* Keeps track of open node categories
*/
LinkedList<String> openNodeCats = new LinkedList<String>();
@@ -74,51 +65,16 @@
* @param parser The ANTLR parser instance that generated the parse tree
*/
public TreeTemplate(String query) {
-// prepareContext();
- requestMap.put("@context", "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld");
try {
process(query);
} catch (QueryException e) {
e.printStackTrace();
}
- System.out.println(">>> "+requestMap.get("query")+" <<<");
- }
-
- private void prepareContext() {
- LinkedHashMap<String,Object> context = new LinkedHashMap<String,Object>();
- LinkedHashMap<String,Object> operands = new LinkedHashMap<String,Object>();
- LinkedHashMap<String,Object> relation = new LinkedHashMap<String,Object>();
- LinkedHashMap<String,Object> classMap = new LinkedHashMap<String,Object>();
-
- operands.put("@id", "korap:operands");
- operands.put("@container", "@list");
-
- relation.put("@id", "korap:relation");
- relation.put("@type", "korap:relation#types");
-
- classMap.put("@id", "korap:class");
- classMap.put("@type", "xsd:integer");
-
- context.put("korap", "http://korap.ids-mannheim.de/ns/query");
- context.put("@language", "de");
- context.put("operands", operands);
- context.put("relation", relation);
- context.put("class", classMap);
- context.put("query", "korap:query");
- context.put("filter", "korap:filter");
- context.put("meta", "korap:meta");
-
- requestMap.put("@context", context);
- }
-
- @Override
- public Map<String, Object> getRequestMap() {
- return requestMap;
}
@Override
public void process(String query) throws QueryException {
- ParseTree tree = parseAnnisQuery(query);
+ ParseTree tree = parseQuery(query);
System.out.println("Processing Annis QL");
processNode(tree);
}
@@ -198,16 +154,16 @@
}
}
- private static ParserRuleContext parseAnnisQuery (String p) throws QueryException {
- Lexer poliqarpLexer = new AqlLexer((CharStream)null);
+ private static ParserRuleContext parseQuery (String q) throws QueryException {
+ Lexer qlLexer = new AqlLexer((CharStream)null);
ParserRuleContext tree = null;
// Like p. 111
try {
// Tokenize input data
- ANTLRInputStream input = new ANTLRInputStream(p);
- poliqarpLexer.setInputStream(input);
- CommonTokenStream tokens = new CommonTokenStream(poliqarpLexer);
+ ANTLRInputStream input = new ANTLRInputStream(q);
+ qlLexer.setInputStream(input);
+ CommonTokenStream tokens = new CommonTokenStream(qlLexer);
qlParser = new AqlParser(tokens);
// Don't throw out erroneous stuff
@@ -231,27 +187,4 @@
// Return the generated tree
return tree;
}
-
- public static void main(String[] args) {
- /*
- * For testing
- */
- String[] queries = new String[] {
- };
- TreeTemplate.verbose=true;
- for (String q : queries) {
- try {
- System.out.println(q);
- System.out.println(TreeTemplate.parseAnnisQuery(q).toStringTree(TreeTemplate.qlParser));
- @SuppressWarnings("unused")
- TreeTemplate at = new TreeTemplate(q);
-// System.out.println(TreeTemplate.parseAnnisQuery(q).toStringTree(TreeTemplate.aqlParser));
- System.out.println();
-
- } catch (NullPointerException | QueryException npe) {
- npe.printStackTrace();
- }
- }
- }
-
}
\ No newline at end of file
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/util/CosmasCondition.java b/src/main/java/de/ids_mannheim/korap/query/serialize/util/CosmasCondition.java
index 86428f8..454e9f6 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/util/CosmasCondition.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/util/CosmasCondition.java
@@ -20,6 +20,6 @@
elem = nodeString.substring(0, 1);
nodeString = nodeString.substring(1);
- position = nodeString.equals("a") ? "frame:startswith" : "frame:endswith";
+ position = nodeString.equals("a") ? "frames:startswith" : "frames:endswith";
}
}
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/util/ResourceMapper.java b/src/main/java/de/ids_mannheim/korap/query/serialize/util/ResourceMapper.java
index 11a805b..661976d 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/util/ResourceMapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/util/ResourceMapper.java
@@ -18,7 +18,7 @@
map.put("const", "c");
map.put("dep", "d");
map.put("morph", "msd");
- map.put("ANA", "pos");
+ map.put("ANA", "p");
}
public static String descriptor2policy(String descriptor) {
diff --git a/src/test/java/CosmasTreeTest.java b/src/test/java/CosmasTreeTest.java
index 980de39..e074ee8 100644
--- a/src/test/java/CosmasTreeTest.java
+++ b/src/test/java/CosmasTreeTest.java
@@ -14,7 +14,7 @@
@Test
public void testContext() throws QueryException {
- String contextString = "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld";
+ String contextString = "http://ids-mannheim.de/ns/KorAP/json-ld/v0.2/context.jsonld";
ct = new CosmasTree("Test");
assertEquals(contextString.replaceAll(" ", ""), ct.getRequestMap().get("@context").toString().replaceAll(" ", ""));
}
@@ -223,10 +223,10 @@
"{@type=korap:reference, operation=operation:focus, classRef=[1025], operands=[" +
"{@type=korap:group, operation=operation:sequence, " +
"operands=[" +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
"{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=match:eq}}" +
"]}," +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
"{@type=korap:token, wrap={@type=korap:term, key=Mond, layer=orth, match=match:eq}}" +
"]}" +
"], inOrder=true, " +
@@ -244,10 +244,10 @@
"{@type=korap:reference, operation=operation:focus, classRef=[1025], operands=[" +
"{@type=korap:group, operation=operation:sequence, " +
"operands=[" +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
"{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=match:eq}}" +
"]}," +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
"{@type=korap:token, wrap={@type=korap:term, key=Mond, layer=orth, match=match:eq}}" +
"]}" +
"], inOrder=true, " +
@@ -267,10 +267,10 @@
"{@type=korap:reference, operation=operation:focus, classRef=[1025], operands=[" +
"{@type=korap:group, operation=operation:sequence, " +
"operands=[" +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
"{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=match:eq}}" +
"]}," +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
"{@type=korap:token, wrap={@type=korap:term, key=Mond, layer=orth, match=match:eq}}" +
"]}" +
"], inOrder=true, " +
@@ -290,10 +290,10 @@
"{@type=korap:reference, operation=operation:focus, classRef=[1025], operands=[" +
"{@type=korap:group, operation=operation:sequence, " +
"operands=[" +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
"{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=match:eq}}" +
"]}," +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
"{@type=korap:token, wrap={@type=korap:term, key=Mond, layer=orth, match=match:eq}}" +
"]}" +
"], inOrder=true, " +
@@ -303,21 +303,21 @@
"}" +
"]}";
// "{@type=korap:group, operation=operation:or, operands=[" +
-// "{@type=korap:group, operation=operation:position, frames=[frame:], sharedClasses=[sharedClasses:intersects], operands=[" +
-// "{@type=korap:group, operation=operation:class, class=1024, operands=[" +
+// "{@type=korap:group, operation=operation:position, frames=[frames:], sharedClasses=[sharedClasses:intersects], operands=[" +
+// "{@type=korap:group, operation=operation:class, class= , classOut=1024, operands=[" +
// "{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=match:eq}}" +
// "]}," +
-// "{@type=korap:group, operation=operation:class, class=1024, operands=[" +
+// "{@type=korap:group, operation=operation:class, class= , classOut=1024, operands=[" +
// "{@type=korap:token, wrap={@type=korap:term, key=Mond, layer=orth, match=match:eq}}" +
// "]}" +
// "], frame=frame:overlaps}," +
// "{@type=korap:reference, operation=operation:focus, classRef=[1024], operands=[" +
// "{@type=korap:group, operation=operation:sequence, " +
// "operands=[" +
-// "{@type=korap:group, operation=operation:class, class=1024, operands=[" +
+// "{@type=korap:group, operation=operation:class, class= , classOut=1024, operands=[" +
// "{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=match:eq}}" +
// "]}," +
-// "{@type=korap:group, operation=operation:class, class=1024, operands=[" +
+// "{@type=korap:group, operation=operation:class, class= , classOut=1024, operands=[" +
// "{@type=korap:token, wrap={@type=korap:term, key=Mond, layer=orth, match=match:eq}}" +
// "]}" +
// "], inOrder=true, " +
@@ -338,10 +338,10 @@
"{@type=korap:reference, operation=operation:focus, classRef=[1025], operands=[" +
"{@type=korap:group, operation=operation:sequence, " +
"operands=[" +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
"{@type=korap:token, wrap={@type=korap:term, key=Mond, layer=orth, match=match:eq}}" +
"]}," +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
"{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=match:eq}}" +
"]}" +
"], inOrder=true, " +
@@ -351,21 +351,21 @@
"}" +
"]}";
// "{@type=korap:group, operation=operation:or, operands=[" +
-// "{@type=korap:group, operation=operation:position, frames=[frame:], sharedClasses=[sharedClasses:intersects], operands=[" +
-// "{@type=korap:group, operation=operation:class, class=1024, operands=[" +
+// "{@type=korap:group, operation=operation:position, frames=[frames:], sharedClasses=[sharedClasses:intersects], operands=[" +
+// "{@type=korap:group, operation=operation:class, class= , classOut=1024, operands=[" +
// "{@type=korap:token, wrap={@type=korap:term, key=Mond, layer=orth, match=match:eq}}" +
// "]}," +
-// "{@type=korap:group, operation=operation:class, class=1024, operands=[" +
+// "{@type=korap:group, operation=operation:class, class= , classOut=1024, operands=[" +
// "{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=match:eq}}" +
// "]}" +
// "], frame=frame:overlaps}," +
// "{@type=korap:reference, operation=operation:focus, classRef=[1024], operands=[" +
// "{@type=korap:group, operation=operation:sequence, " +
// "operands=[" +
-// "{@type=korap:group, operation=operation:class, class=1024, operands=[" +
+// "{@type=korap:group, operation=operation:class, class= , classOut=1024, operands=[" +
// "{@type=korap:token, wrap={@type=korap:term, key=Mond, layer=orth, match=match:eq}}" +
// "]}," +
-// "{@type=korap:group, operation=operation:class, class=1024, operands=[" +
+// "{@type=korap:group, operation=operation:class, class= , classOut=1024, operands=[" +
// "{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=match:eq}}" +
// "]}" +
// "], inOrder=true, " +
@@ -384,10 +384,10 @@
"{@type=korap:reference, operation=operation:focus, classRef=[1025], operands=[" +
"{@type=korap:group, operation=operation:sequence, " +
"operands=[" +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
"{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=match:eq}}" +
"]}," +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
"{@type=korap:token, wrap={@type=korap:term, key=Mond, layer=orth, match=match:eq}}" +
"]}" +
"], inOrder=false, " +
@@ -397,21 +397,21 @@
"}" +
"]}";
// "{@type=korap:group, operation=operation:or, operands=[" +
-// "{@type=korap:group, operation=operation:position, frames=[frame:], sharedClasses=[sharedClasses:intersects], operands=[" +
-// "{@type=korap:group, operation=operation:class, class=1024, operands=[" +
+// "{@type=korap:group, operation=operation:position, frames=[frames:], sharedClasses=[sharedClasses:intersects], operands=[" +
+// "{@type=korap:group, operation=operation:class, class= , classOut=1024, operands=[" +
// "{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=match:eq}}" +
// "]}," +
-// "{@type=korap:group, operation=operation:class, class=1024, operands=[" +
+// "{@type=korap:group, operation=operation:class, class= , classOut=1024, operands=[" +
// "{@type=korap:token, wrap={@type=korap:term, key=Mond, layer=orth, match=match:eq}}" +
// "]}" +
// "], frame=frame:overlaps}," +
// "{@type=korap:reference, operation=operation:focus, classRef=[1024], operands=[" +
// "{@type=korap:group, operation=operation:sequence, " +
// "operands=[" +
-// "{@type=korap:group, operation=operation:class, class=1024, operands=[" +
+// "{@type=korap:group, operation=operation:class, class= , classOut=1024, operands=[" +
// "{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=match:eq}}" +
// "]}," +
-// "{@type=korap:group, operation=operation:class, class=1024, operands=[" +
+// "{@type=korap:group, operation=operation:class, class= , classOut=1024, operands=[" +
// "{@type=korap:token, wrap={@type=korap:term, key=Mond, layer=orth, match=match:eq}}" +
// "]}" +
// "], inOrder=false, " +
@@ -433,17 +433,17 @@
"{@type=korap:reference, operation=operation:focus, classRef=[1025], operands=[" +
"{@type=korap:group, operation=operation:sequence, " +
"operands=[" +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
"{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=match:eq}}" +
"]}," +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
"{@type=korap:reference, operation=operation:focus, classRef=[1026], operands=[" +
"{@type=korap:group, operation=operation:sequence, " +
"operands=[" +
- "{@type=korap:group, operation=operation:class, class=1026, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1026, classOut=1026, operands=[" +
"{@type=korap:token, wrap={@type=korap:term, key=Sterne, layer=orth, match=match:eq}}" +
"]}," +
- "{@type=korap:group, operation=operation:class, class=1026, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1026, classOut=1026, operands=[" +
"{@type=korap:token, wrap={@type=korap:term, key=Mond, layer=orth, match=match:eq}}" +
"]}" +
"], inOrder=true, " +
@@ -471,10 +471,10 @@
// "{@type=korap:token, wrap={@type=korap:term, key=Sterne, layer=orth, match=match:eq}}" ;
String mondsterneClasses =
- "{@type=korap:group, operation=operation:class, class=1024, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1024 , classOut=1024, operands=[" +
"{@type=korap:token, wrap={@type=korap:term, key=Mond, layer=orth, match=match:eq}}" +
"]}," +
- "{@type=korap:group, operation=operation:class, class=1024, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1024 , classOut=1024, operands=[" +
"{@type=korap:token, wrap={@type=korap:term, key=Sterne, layer=orth, match=match:eq}}" +
"]}";
// String mondsterneSeq =
@@ -492,11 +492,11 @@
"]}" +
"]}" ;
// String mondsterneOv =
-// "{@type=korap:group, operation=operation:position, frames=[frame:], sharedClasses=[sharedClasses:intersects], operands=[" +
+// "{@type=korap:group, operation=operation:position, frames=[frames:], sharedClasses=[sharedClasses:intersects], operands=[" +
// mondsterne +
// "]}";
String mondsterneClassesOv =
- "{@type=korap:group, operation=operation:position, frames=[frame:], sharedClasses=[sharedClasses:intersects], operands=[" +
+ "{@type=korap:group, operation=operation:position, frames=[frames:], sharedClasses=[sharedClasses:intersects], operands=[" +
mondsterneClasses +
"], frame=frame:overlaps}";
// String mondsterneAll =
@@ -513,14 +513,14 @@
"{@type=korap:reference, operation=operation:focus, classRef=[1025], operands=[" +
"{@type=korap:group, operation=operation:sequence, " +
"operands=[" +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
"{@type=korap:reference, operation=operation:focus, classRef=[1026], operands=[" +
"{@type=korap:group, operation=operation:sequence, " +
"operands=[" +
- "{@type=korap:group, operation=operation:class, class=1026, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1026, classOut=1026, operands=[" +
"{@type=korap:token, wrap={@type=korap:term, key=Mond, layer=orth, match=match:eq}}" +
"]}," +
- "{@type=korap:group, operation=operation:class, class=1026, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1026, classOut=1026, operands=[" +
"{@type=korap:token, wrap={@type=korap:term, key=Sterne, layer=orth, match=match:eq}}" +
"]}" +
"], inOrder=true, " +
@@ -530,7 +530,7 @@
"}" +
"]}" +
"]}," +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
"{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=match:eq}}" +
"]}" +
"], inOrder=true, " +
@@ -541,21 +541,21 @@
"]}" +
"" ;
// "{@type=korap:group, operation=operation:or, operands=[" +
-// "{@type=korap:group, operation=operation:position, frames=[frame:], sharedClasses=[sharedClasses:intersects], operands=[" +
-// "{@type=korap:group, operation=operation:class, class=1024, operands=[" +
+// "{@type=korap:group, operation=operation:position, frames=[frames:], sharedClasses=[sharedClasses:intersects], operands=[" +
+// "{@type=korap:group, operation=operation:class, class= , classOut=1024, operands=[" +
// mondsterneAllClasses +
// "]}," +
-// "{@type=korap:group, operation=operation:class, class=1024, operands=[" +
+// "{@type=korap:group, operation=operation:class, class= , classOut=1024, operands=[" +
// "{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=match:eq}}" +
// "]}" +
// "], frame=frame:overlaps}," +
// "{@type=korap:reference, operation=operation:focus, classRef=[1024], operands=[" +
// "{@type=korap:group, operation=operation:sequence, " +
// "operands=[" +
-// "{@type=korap:group, operation=operation:class, class=1024, operands=[" +
+// "{@type=korap:group, operation=operation:class, class= , classOut=1024, operands=[" +
// mondsterneAllClasses +
// "]}," +
-// "{@type=korap:group, operation=operation:class, class=1024, operands=[" +
+// "{@type=korap:group, operation=operation:class, class= , classOut=1024, operands=[" +
// "{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=match:eq}}" +
// "]}" +
// "], inOrder=true, " +
@@ -574,13 +574,17 @@
public void testOPIN() throws QueryException {
query="wegen #IN <s>";
String opin1 =
- "{@type=korap:reference, operation=operation:focus, classRef=[1025], operands=[" +
- "{@type=korap:group, operation=operation:position, operands=[" +
- "{@type=korap:span, key=s}," +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
- "{@type=korap:token, wrap={@type=korap:term, key=wegen, layer=orth, match=match:eq}}" +
- "]}" +
- "], frames=[], sharedClasses=[sharedClasses:includes], frame=frame:contains}" +
+ "{@type=korap:reference, operation=operation:focus, classRef=[1026], operands=[" +
+ "{@type=korap:group, operation=operation:class, classRefCheck=classRefCheck:includes, classIn=[1025,1026], classOut=1027, operands=[" +
+ "{@type=korap:group, operation=operation:position, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
+ "{@type=korap:span, key=s}" +
+ "]}," +
+ "{@type=korap:group, operation=operation:class, class=1026, classOut=1026, operands=[" +
+ "{@type=korap:token, wrap={@type=korap:term, key=wegen, layer=orth, match=match:eq}}" +
+ "]}" +
+ "], frames=[], frame=frame:contains}" +
+ "]}" +
"]}";
ct = new CosmasTree(query);
map = ct.getRequestMap().get("query").toString();
@@ -588,14 +592,18 @@
query="wegen #IN(L) <s>";
String opin2 =
- "{@type=korap:reference, operation=operation:focus, classRef=[1025], operands=[" +
- "{@type=korap:group, operation=operation:position, operands=[" +
- "{@type=korap:span, key=s}," +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
- "{@type=korap:token, wrap={@type=korap:term, key=wegen, layer=orth, match=match:eq}}" +
- "]}" +
- "], frames=[frame:startswith], sharedClasses=[sharedClasses:includes], frame=frame:startswith}" +
- "]}";
+ "{@type=korap:reference, operation=operation:focus, classRef=[1026], operands=[" +
+ "{@type=korap:group, operation=operation:class, classRefCheck=classRefCheck:includes, classIn=[1025,1026], classOut=1027, operands=[" +
+ "{@type=korap:group, operation=operation:position, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
+ "{@type=korap:span, key=s}" +
+ "]}," +
+ "{@type=korap:group, operation=operation:class, class=1026, classOut=1026, operands=[" +
+ "{@type=korap:token, wrap={@type=korap:term, key=wegen, layer=orth, match=match:eq}}" +
+ "]}" +
+ "], frames=[frames:startswith], frame=frame:startswith}" +
+ "]}" +
+ "]}";
ct = new CosmasTree(query);
map = ct.getRequestMap().get("query").toString();
assertEquals(opin2.replaceAll(" ", ""), map.replaceAll(" ", ""));
@@ -603,75 +611,92 @@
query="wegen #IN(F) <s>";
String opin3=
- "{@type=korap:reference, operation=operation:focus, classRef=[1025], operands=[" +
- "{@type=korap:group, operation=operation:position, operands=[" +
- "{@type=korap:span, key=s}," +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
- "{@type=korap:token, wrap={@type=korap:term, key=wegen, layer=orth, match=match:eq}}" +
- "]}" +
- "], frames=[frame:matches], sharedClasses=[sharedClasses:includes], frame=frame:matches}" +
+ "{@type=korap:reference, operation=operation:focus, classRef=[1026], operands=[" +
+ "{@type=korap:group, operation=operation:class, classRefCheck=classRefCheck:includes, classIn=[1025,1026], classOut=1027, operands=[" +
+ "{@type=korap:group, operation=operation:position, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
+ "{@type=korap:span, key=s}" +
+ "]}," +
+ "{@type=korap:group, operation=operation:class, class=1026, classOut=1026, operands=[" +
+ "{@type=korap:token, wrap={@type=korap:term, key=wegen, layer=orth, match=match:eq}}" +
+ "]}" +
+ "], frames=[frames:matches], frame=frame:matches}" +
"]}" +
- "";
+ "]}";
ct = new CosmasTree(query);
map = ct.getRequestMap().get("query").toString();
assertEquals(opin3.replaceAll(" ", ""), map.replaceAll(" ", ""));
query="wegen #IN(FI) <s>";
String opin4=
- "{@type=korap:reference, operation=operation:focus, classRef=[1025], operands=[" +
- "{@type=korap:group, operation=operation:position, operands=[" +
- "{@type=korap:span, key=s}," +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
- "{@type=korap:token, wrap={@type=korap:term, key=wegen, layer=orth, match=match:eq}}" +
- "]}" +
- "], frames=[frame:matches], sharedClasses=[sharedClasses:unequals,sharedClasses:includes], frame=frame:matches-noident}" +
+ "{@type=korap:reference, operation=operation:focus, classRef=[1026], operands=[" +
+ "{@type=korap:group, operation=operation:class, classRefCheck=[classRefCheck:unequals,classRefCheck:includes], classIn=[1025,1026], classOut=1027, operands=[" +
+ "{@type=korap:group, operation=operation:position, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
+ "{@type=korap:span, key=s}" +
+ "]}," +
+ "{@type=korap:group, operation=operation:class, class=1026, classOut=1026, operands=[" +
+ "{@type=korap:token, wrap={@type=korap:term, key=wegen, layer=orth, match=match:eq}}" +
+ "]}" +
+ "], frames=[frames:matches], frame=frame:matches-noident}" +
"]}" +
- "";
+ "]}";
ct = new CosmasTree(query);
map = ct.getRequestMap().get("query").toString();
assertEquals(opin4.replaceAll(" ", ""), map.replaceAll(" ", ""));
query="wegen #IN(FE) <s>";
String opin5=
- "{@type=korap:reference, operation=operation:focus, classRef=[1025], operands=[" +
- "{@type=korap:group, operation=operation:position, operands=[" +
- "{@type=korap:span, key=s}," +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
- "{@type=korap:token, wrap={@type=korap:term, key=wegen, layer=orth, match=match:eq}}" +
- "]}" +
- "], frames=[frame:matches], sharedClasses=[sharedClasses:equals], frame=frame:matches}" +
+ "{@type=korap:reference, operation=operation:focus, classRef=[1026], operands=[" +
+ "{@type=korap:group, operation=operation:class, classRefCheck=classRefCheck:equals, classIn=[1025,1026], classOut=1027, operands=[" +
+ "{@type=korap:group, operation=operation:position, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
+ "{@type=korap:span, key=s}" +
+ "]}," +
+ "{@type=korap:group, operation=operation:class, class=1026, classOut=1026, operands=[" +
+ "{@type=korap:token, wrap={@type=korap:term, key=wegen, layer=orth, match=match:eq}}" +
+ "]}" +
+ "], frames=[frames:matches], frame=frame:matches}" +
"]}" +
- "";
+ "]}";
ct = new CosmasTree(query);
map = ct.getRequestMap().get("query").toString();
assertEquals(opin5.replaceAll(" ", ""), map.replaceAll(" ", ""));
query="wegen #IN(%, L) <s>";
String opin6 =
- "{@type=korap:reference, operation=operation:focus, classRef=[1025], operands=[" +
- "{@type=korap:group, operation=operation:position, operands=[" +
- "{@type=korap:span, key=s}," +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
- "{@type=korap:token, wrap={@type=korap:term, key=wegen, layer=orth, match=match:eq}}" +
- "]}" +
- "], frames=[frame:startswith], sharedClasses=[sharedClasses:includes], frame=frame:startswith, exclude=true}" +
- "]}";
+ "{@type=korap:reference, operation=operation:focus, classRef=[1026], operands=[" +
+ "{@type=korap:group, operation=operation:class, classRefCheck=classRefCheck:includes, classIn=[1025,1026], classOut=1027, operands=[" +
+ "{@type=korap:group, operation=operation:position, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
+ "{@type=korap:span, key=s}" +
+ "]}," +
+ "{@type=korap:group, operation=operation:class, class=1026, classOut=1026, operands=[" +
+ "{@type=korap:token, wrap={@type=korap:term, key=wegen, layer=orth, match=match:eq}}" +
+ "]}" +
+ "], frames=[frames:startswith], frame=frame:startswith, exclude=true}" +
+ "]}" +
+ "]}";
ct = new CosmasTree(query);
map = ct.getRequestMap().get("query").toString();
assertEquals(opin6.replaceAll(" ", ""), map.replaceAll(" ", ""));
query="wegen #IN('FE,ALL,%,MIN') <s>";
String opin7 =
- "{@type=korap:reference, operation=operation:focus, classRef=[1025], operands=[" +
+ "{@type=korap:reference, operation=operation:focus, reset=true, operands=[" +
+ "{@type=korap:group, operation=operation:class, classRefCheck=classRefCheck:equals, classIn=[1025,1026], classOut=1027, operands=[" +
"{@type=korap:group, operation=operation:position, operands=[" +
- "{@type=korap:reference, operation=operation:focus, reset=true, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
"{@type=korap:span, key=s}" +
"]}," +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1026, classOut=1026, operands=[" +
"{@type=korap:token, wrap={@type=korap:term, key=wegen, layer=orth, match=match:eq}}" +
"]}" +
- "], frames=[frame:matches], sharedClasses=[sharedClasses:equals], frame=frame:matches, exclude=true, grouping=false}" +
- "]}";
+
+ "], frames=[frames:matches], frame=frame:matches, exclude=true, grouping=false}" +
+ "]}" +
+ "]}" +
+ "";
ct = new CosmasTree(query);
map = ct.getRequestMap().get("query").toString();
assertEquals(opin7.replaceAll(" ", ""), map.replaceAll(" ", ""));
@@ -681,13 +706,17 @@
public void testOPOV() throws QueryException {
query="wegen #OV <s>";
String opov1 =
- "{@type=korap:reference, operation=operation:focus, classRef=[1025], operands=[" +
- "{@type=korap:group, operation=operation:position, operands=[" +
- "{@type=korap:span, key=s}," +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
- "{@type=korap:token, wrap={@type=korap:term, key=wegen, layer=orth, match=match:eq}}" +
- "]}" +
- "], frames=[], sharedClasses=[sharedClasses:intersects], frame=frame:overlaps}" +
+ "{@type=korap:reference, operation=operation:focus, classRef=[1026], operands=[" +
+ "{@type=korap:group, operation=operation:class, classRefCheck=classRefCheck:intersects, classIn=[1025,1026], classOut=1027, operands=[" +
+ "{@type=korap:group, operation=operation:position, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
+ "{@type=korap:span, key=s}" +
+ "]}," +
+ "{@type=korap:group, operation=operation:class, class=1026, classOut=1026, operands=[" +
+ "{@type=korap:token, wrap={@type=korap:term, key=wegen, layer=orth, match=match:eq}}" +
+ "]}" +
+ "], frames=[], frame=frame:overlaps}" +
+ "]}" +
"]}";
ct = new CosmasTree(query);
map = ct.getRequestMap().get("query").toString();
@@ -695,13 +724,17 @@
query="wegen #OV(L) <s>";
String opov2 =
- "{@type=korap:reference, operation=operation:focus, classRef=[1025], operands=[" +
- "{@type=korap:group, operation=operation:position, operands=[" +
- "{@type=korap:span, key=s}," +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
- "{@type=korap:token, wrap={@type=korap:term, key=wegen, layer=orth, match=match:eq}}" +
- "]}" +
- "], frames=[frame:startswith,frame:overlapsLeft], sharedClasses=[sharedClasses:intersects], frame=frame:overlapsLeft}" +
+ "{@type=korap:reference, operation=operation:focus, classRef=[1026], operands=[" +
+ "{@type=korap:group, operation=operation:class, classRefCheck=classRefCheck:intersects, classIn=[1025,1026], classOut=1027, operands=[" +
+ "{@type=korap:group, operation=operation:position, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
+ "{@type=korap:span, key=s}" +
+ "]}," +
+ "{@type=korap:group, operation=operation:class, class=1026, classOut=1026, operands=[" +
+ "{@type=korap:token, wrap={@type=korap:term, key=wegen, layer=orth, match=match:eq}}" +
+ "]}" +
+ "], frames=[frames:startswith,frames:overlapsLeft], frame=frame:overlapsLeft}" +
+ "]}" +
"]}";
ct = new CosmasTree(query);
map = ct.getRequestMap().get("query").toString();
@@ -709,13 +742,18 @@
query="wegen #OV(F) <s>";
String opov3=
- "{@type=korap:reference, operation=operation:focus, classRef=[1025], operands=[" +
- "{@type=korap:group, operation=operation:position, operands=[" +
- "{@type=korap:span, key=s}," +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
- "{@type=korap:token, wrap={@type=korap:term, key=wegen, layer=orth, match=match:eq}}" +
- "]}" +
- "], frames=[frame:matches], sharedClasses=[sharedClasses:intersects], frame=frame:matches}" +
+
+ "{@type=korap:reference, operation=operation:focus, classRef=[1026], operands=[" +
+ "{@type=korap:group, operation=operation:class, classRefCheck=classRefCheck:intersects, classIn=[1025,1026], classOut=1027, operands=[" +
+ "{@type=korap:group, operation=operation:position, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
+ "{@type=korap:span, key=s}" +
+ "]}," +
+ "{@type=korap:group, operation=operation:class, class=1026, classOut=1026, operands=[" +
+ "{@type=korap:token, wrap={@type=korap:term, key=wegen, layer=orth, match=match:eq}}" +
+ "]}" +
+ "], frames=[frames:matches], frame=frame:matches}" +
+ "]}" +
"]}";
ct = new CosmasTree(query);
map = ct.getRequestMap().get("query").toString();
@@ -723,13 +761,17 @@
query="wegen #OV(FI) <s>";
String opov4=
- "{@type=korap:reference, operation=operation:focus, classRef=[1025], operands=[" +
- "{@type=korap:group, operation=operation:position, operands=[" +
- "{@type=korap:span, key=s}," +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
- "{@type=korap:token, wrap={@type=korap:term, key=wegen, layer=orth, match=match:eq}}" +
- "]}" +
- "], frames=[frame:matches], sharedClasses=[sharedClasses:unequals], frame=frame:matches-noident}" +
+ "{@type=korap:reference, operation=operation:focus, classRef=[1026], operands=[" +
+ "{@type=korap:group, operation=operation:class, classRefCheck=classRefCheck:unequals, classIn=[1025,1026], classOut=1027, operands=[" +
+ "{@type=korap:group, operation=operation:position, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
+ "{@type=korap:span, key=s}" +
+ "]}," +
+ "{@type=korap:group, operation=operation:class, class=1026, classOut=1026, operands=[" +
+ "{@type=korap:token, wrap={@type=korap:term, key=wegen, layer=orth, match=match:eq}}" +
+ "]}" +
+ "], frames=[frames:matches], frame=frame:matches-noident}" +
+ "]}" +
"]}";
ct = new CosmasTree(query);
map = ct.getRequestMap().get("query").toString();
@@ -737,15 +779,18 @@
query="wegen #OV(FE) <s>";
String opov5=
- "{@type=korap:reference, operation=operation:focus, classRef=[1025], operands=[" +
- "{@type=korap:group, operation=operation:position, operands=[" +
- "{@type=korap:span, key=s}," +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
- "{@type=korap:token, wrap={@type=korap:term, key=wegen, layer=orth, match=match:eq}}" +
- "]}" +
- "], frames=[frame:matches], sharedClasses=[sharedClasses:equals], frame=frame:matches}" +
- "]}" +
- "";
+ "{@type=korap:reference, operation=operation:focus, classRef=[1026], operands=[" +
+ "{@type=korap:group, operation=operation:class, classRefCheck=classRefCheck:equals, classIn=[1025,1026], classOut=1027, operands=[" +
+ "{@type=korap:group, operation=operation:position, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
+ "{@type=korap:span, key=s}" +
+ "]}," +
+ "{@type=korap:group, operation=operation:class, class=1026, classOut=1026, operands=[" +
+ "{@type=korap:token, wrap={@type=korap:term, key=wegen, layer=orth, match=match:eq}}" +
+ "]}" +
+ "], frames=[frames:matches], frame=frame:matches}" +
+ "]}" +
+ "]}";
ct = new CosmasTree(query);
map = ct.getRequestMap().get("query").toString();
assertEquals(opov5.replaceAll(" ", ""), map.replaceAll(" ", ""));
@@ -790,10 +835,10 @@
// String dermannSeq = "{@type=korap:group, operation=operation:sequence," +
// "operands = [" +
-// "{@type=korap:group, operation=operation:class, class=1024, operands=[" +
+// "{@type=korap:group, operation=operation:class, class= , classOut=1024, operands=[" +
// "{@type=korap:token, wrap={@type=korap:term, key=der, layer=orth, match=match:eq}}" +
// "]}," +
-// "{@type=korap:group, operation=operation:class, class=1024, operands=[" +
+// "{@type=korap:group, operation=operation:class, class= , classOut=1024, operands=[" +
// "{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=orth, match=match:eq}}" +
// "]}" +
//
@@ -802,7 +847,7 @@
// "]}";
//
// String begDermannSeq =
-//// "{@type=korap:group, operation=operation:class, class=1024, operands=[" +
+//// "{@type=korap:group, operation=operation:class, class= , classOut=1024, operands=[" +
// "{@type=korap:reference, operation=operation:focus, spanRef=[0,1], operands=[" +
// dermannSeq +
// "]}" +
@@ -814,20 +859,20 @@
query="#BEG(der /w3:5 Mann) /+w10 kommt"; // nesting #BEG() in a distance group
String beg2 =
// "{@type=korap:group, operation=operation:or, operands=[" +
-// "{@type=korap:group, operation=operation:position, frames=[frame:], sharedClasses=[sharedClasses:intersects], operands=[" +
-// "{@type=korap:group, operation=operation:class, class=1024, operands=[" +
+// "{@type=korap:group, operation=operation:position, frames=[frames:], sharedClasses=[sharedClasses:intersects], operands=[" +
+// "{@type=korap:group, operation=operation:class, class= , classOut=1024, operands=[" +
// beg1 +
// "]}" + "," +
-// "{@type=korap:group, operation=operation:class, class=1024, operands=[" +
+// "{@type=korap:group, operation=operation:class, class= , classOut=1024, operands=[" +
// kommt +
// "]}" +
// "], frame=frame:overlaps}," +
// "{@type=korap:reference, operation=operation:focus, classRef=[1024], operands=[" +
// "{@type=korap:group, operation=operation:sequence, operands=[" +
-// "{@type=korap:group, operation=operation:class, class=1024, operands=[" +
+// "{@type=korap:group, operation=operation:class, class= , classOut=1024, operands=[" +
// beg1 +
// "]}," +
-// "{@type=korap:group, operation=operation:class, class=1024, operands=[" +
+// "{@type=korap:group, operation=operation:class, class= , classOut=1024, operands=[" +
// kommt +
// "]}" +
// "], inOrder=true, distances=[" +
@@ -838,10 +883,10 @@
//
"{@type=korap:reference, operation=operation:focus, classRef=[1025], operands=[" +
"{@type=korap:group, operation=operation:sequence, operands=[" +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
beg1 +
"]}," +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
kommt +
"]}" +
"], inOrder=true, distances=[" +
@@ -855,21 +900,21 @@
query="kommt /+w10 #BEG(der /w3:5 Mann)";
String beg3 =
// "{@type=korap:group, operation=operation:or, operands=[" +
-// "{@type=korap:group, operation=operation:position, frames=[frame:], sharedClasses=[sharedClasses:intersects], operands=[" +
-// "{@type=korap:group, operation=operation:class, class=1024, operands=[" +
+// "{@type=korap:group, operation=operation:position, frames=[frames:], sharedClasses=[sharedClasses:intersects], operands=[" +
+// "{@type=korap:group, operation=operation:class, class= , classOut=1024, operands=[" +
// kommt +
//// "," +
// "]}," +
-// "{@type=korap:group, operation=operation:class, class=1024, operands=[" +
+// "{@type=korap:group, operation=operation:class, class= , classOut=1024, operands=[" +
// beg1+
// "]}" +
// "], frame=frame:overlaps}," +
// "{@type=korap:reference, operation=operation:focus, classRef=[1024], operands=[" +
// "{@type=korap:group, operation=operation:sequence, operands=[" +
-// "{@type=korap:group, operation=operation:class, class=1024, operands=[" +
+// "{@type=korap:group, operation=operation:class, class= , classOut=1024, operands=[" +
// kommt +
// "]}," +
-// "{@type=korap:group, operation=operation:class, class=1024, operands=[" +
+// "{@type=korap:group, operation=operation:class, class= , classOut=1024, operands=[" +
// beg1+
// "]}" +
// "], inOrder=true, distances=[" +
@@ -880,10 +925,10 @@
"{@type=korap:reference, operation=operation:focus, classRef=[1025], operands=[" +
"{@type=korap:group, operation=operation:sequence, operands=[" +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
kommt +
"]}," +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
beg1+
"]}" +
"], inOrder=true, distances=[" +
@@ -920,7 +965,7 @@
"{@type=korap:group, operation=operation:position, frame=frame:frame:contains, operands=[" +
"{@type=korap:reference, operation=operation:focus, classRef=[1025], operands=[" +
"{@type=korap:group, operation=operation:position, frame=frame:frame:contains, operands=[" +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+ "{@type=korap:group, operation=operation:class, class= , classOut=1025, operands=[" +
"{@type=korap:span, key=s}" +
"]}," +
"{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=match:eq}}" +
@@ -937,7 +982,7 @@
"{@type=korap:group, operation=operation:position, frame=frame:frame:contains, operands=[" +
"{@type=korap:reference, operation=operation:focus, classRef=[1025], operands=[" +
"{@type=korap:group, operation=operation:position, frame=frame:frame:contains, operands=[" +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+ "{@type=korap:group, operation=operation:class, class= , classOut=1025, operands=[" +
"{@type=korap:span, key=s}" +
"]}," +
"{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=match:eq}}" +
@@ -991,7 +1036,7 @@
"{@type=korap:group, operation=operation:position, frame=frame:frame:contains, operands=[" +
"{@type=korap:reference, operation=operation:focus, classRef=[1025], operands=[" +
"{@type=korap:group, operation=operation:position, frame=frame:frame:contains, operands=[" +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+ "{@type=korap:group, operation=operation:class, class= , classOut=1025, operands=[" +
"{@type=korap:span, key=s}" +
"]}," +
"{@type=korap:token, wrap={@type=korap:term, key=Sonne, layer=orth, match=match:eq}}" +
@@ -1033,7 +1078,7 @@
String elem2 =
"{@type=korap:span, key=w, attr=" +
"{@type=korap:termGroup, relation=relation:and, operands=[" +
- "{@type=korap:term, layer=pos, key=N, match=match:eq}" +
+ "{@type=korap:term, layer=p, key=N, match=match:eq}" +
"]}" +
"}";
ct = new CosmasTree(query);
@@ -1044,8 +1089,8 @@
String elem3 =
"{@type=korap:span, key=w, attr=" +
"{@type=korap:termGroup, relation=relation:and, operands=[" +
- "{@type=korap:term, layer=pos, key=N, match=match:ne}," +
- "{@type=korap:term, layer=pos, key=V, match=match:ne}" +
+ "{@type=korap:term, layer=p, key=N, match=match:ne}," +
+ "{@type=korap:term, layer=p, key=V, match=match:ne}" +
"]}" +
"}";
ct = new CosmasTree(query);
@@ -1057,9 +1102,9 @@
"{@type=korap:span, key=w, attr=" +
"{@type=korap:termGroup, relation=relation:and, operands=[" +
"{@type=korap:termGroup, relation=relation:and, operands=[" +
- "{@type=korap:term, layer=pos, key=N, match=match:ne}," +
- "{@type=korap:term, layer=pos, key=A, match=match:ne}," +
- "{@type=korap:term, layer=pos, key=V, match=match:ne}" +
+ "{@type=korap:term, layer=p, key=N, match=match:ne}," +
+ "{@type=korap:term, layer=p, key=A, match=match:ne}," +
+ "{@type=korap:term, layer=p, key=V, match=match:ne}" +
"]}," +
"{@type=korap:term, layer=Genre, key=Sport, match=match:eq}" +
"]}" +
@@ -1073,8 +1118,8 @@
"{@type=korap:span, key=w, attr=" +
"{@type=korap:termGroup, relation=relation:and, operands=[" +
"{@type=korap:termGroup, relation=relation:and, operands=[" +
- "{@type=korap:term, layer=pos, key=N, match=match:ne}," +
- "{@type=korap:term, layer=pos, key=V, match=match:ne}" +
+ "{@type=korap:term, layer=p, key=N, match=match:ne}," +
+ "{@type=korap:term, layer=p, key=V, match=match:ne}" +
"]}," +
"{@type=korap:termGroup, relation=relation:and, operands=[" +
"{@type=korap:term, layer=Genre, key=Sport, match=match:ne}," +
@@ -1103,6 +1148,28 @@
ct = new CosmasTree(query);
map = ct.getRequestMap().get("query").toString();
assertEquals(all1.replaceAll(" ", ""), map.replaceAll(" ", ""));
+
+ query="#ALL(gehen /w1:10 (voran /w1:4 schnell))";
+ String all2 =
+ "{@type=korap:group, operation=operation:sequence, " +
+ "operands=[" +
+ "{@type=korap:token, wrap={@type=korap:term, key=gehen, layer=orth, match=match:eq}}," +
+ "{@type=korap:group, operation=operation:sequence, operands=[" +
+ "{@type=korap:token, wrap={@type=korap:term, key=voran, layer=orth, match=match:eq}}," +
+ "{@type=korap:token, wrap={@type=korap:term, key=schnell, layer=orth, match=match:eq}}" +
+ "], inOrder=false, " +
+ "distances=[" +
+ "{@type=korap:distance, key=w, boundary={@type=korap:boundary, min=1, max=4}, min=1, max=4}" +
+ "]" +
+ "}" +
+ "], inOrder=false, " +
+ "distances=[" +
+ "{@type=korap:distance, key=w, boundary={@type=korap:boundary, min=1, max=10}, min=1, max=10}" +
+ "]" +
+ "}";
+ ct = new CosmasTree(query);
+ map = ct.getRequestMap().get("query").toString();
+ assertEquals(all2.replaceAll(" ", ""), map.replaceAll(" ", ""));
}
@Test
@@ -1112,10 +1179,10 @@
// "{@type=korap:reference, operation=operation:focus, classRef=[1025], classRefOp=classRefOp:inversion, operands=[" +
// "{@type=korap:group, operation=operation:sequence, " +
// "operands=[" +
-// "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+// "{@type=korap:group, operation=operation:class, class= , classOut=1025, operands=[" +
// "{@type=korap:token, wrap={@type=korap:term, key=gehen, layer=orth, match=match:eq}}" +
// "]}," +
-// "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+// "{@type=korap:group, operation=operation:class, class= , classOut=1025, operands=[" +
// "{@type=korap:token, wrap={@type=korap:term, key=voran, layer=orth, match=match:eq}}" +
// "]}" +
// "], inOrder=false, " +
@@ -1124,27 +1191,87 @@
// "]" +
// "}" +
// "]}";
-
+//
String nhit1 =
- "{@type=korap:reference, operation=operation:focus, classRef=1025, operands=[" +
- "{@type=korap:group, operation=operation:sequence, " +
- "operands=[" +
- "{@type=korap:token, wrap={@type=korap:term, key=gehen, layer=orth, match=match:eq}}" +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
- "{@type=korap:group, operation=operation:repetition, operands=[" +
- "{@type=korap:token}" +
- "], boundary={@type=korap:boundary, min=1, max=10}, min=1, max=10}}" +
- "]}," +
- "{@type=korap:token, wrap={@type=korap:term, key=voran, layer=orth, match=match:eq}}" +
- "], inOrder=false, " +
- "distances=[" +
- "{@type=korap:distance, key=w, boundary={@type=korap:boundary, min=1, max=10}, min=1, max=10}" +
- "]" +
- "}" +
+ "{@type=korap:reference, operation=operation:focus, classRef=[1025], operands=[" +
+ "{@type=korap:group, operation=operation:class, classRefOp=classRefOp:inversion, classIn=[1026,1027], classOut=1025, operands=[" +
+ "{@type=korap:group, operation=operation:sequence, " +
+ "operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1026 , classOut=1026, operands=[" +
+ "{@type=korap:token, wrap={@type=korap:term, key=gehen, layer=orth, match=match:eq}}" +
+ "]}," +
+ "{@type=korap:group, operation=operation:class, class=1027 , classOut=1027, operands=[" +
+ "{@type=korap:token, wrap={@type=korap:term, key=voran, layer=orth, match=match:eq}}" +
+ "]}" +
+ "], inOrder=false, " +
+ "distances=[" +
+ "{@type=korap:distance, key=w, boundary={@type=korap:boundary, min=1, max=10}, min=1, max=10}" +
+ "]" +
+ "}" +
+ "]}" +
"]}";
ct = new CosmasTree(query);
map = ct.getRequestMap().get("query").toString();
assertEquals(nhit1.replaceAll(" ", ""), map.replaceAll(" ", ""));
+//
+// query="#NHIT(gehen %w1:10 voran)";
+// String nhit2 =
+// "{@type=korap:reference, operation=operation:focus, classRef=1025, operands=[" +
+// "{@type=korap:group, operation=operation:sequence, " +
+// "operands=[" +
+// "{@type=korap:token, wrap={@type=korap:term, key=gehen, layer=orth, match=match:eq}}" +
+// "{@type=korap:group, operation=operation:class, class= , classOut=1025, operands=[" +
+// "{@type=korap:group, operation=operation:repetition, operands=[" +
+// "{@type=korap:token}" +
+// "], boundary={@type=korap:boundary, min=1, max=10}, min=1, max=10}}" +
+// "]}," +
+// "{@type=korap:token, wrap={@type=korap:term, key=voran, layer=orth, match=match:eq}}" +
+// "], inOrder=false, " +
+// "distances=[" +
+// "{@type=korap:distance, key=w, boundary={@type=korap:boundary, min=1, max=10}, min=1, max=10}" +
+// "]" +
+// "}" +
+// "]}";
+// ct = new CosmasTree(query);
+// map = ct.getRequestMap().get("query").toString();
+// assertEquals(nhit2.replaceAll(" ", ""), map.replaceAll(" ", ""));
+
+ query="#NHIT(gehen /+w1:10 voran /w1:10 Beispiel)";
+ String nhit3 =
+ "{@type=korap:reference, operation=operation:focus, classRef=[1025], operands=[" +
+ "{@type=korap:group, operation=operation:class, classRefOp=classRefOp:inversion, classIn=[1026,1027], classOut=1025, operands=[" +
+ "{@type=korap:group, operation=operation:sequence, " +
+ "operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1026, classOut=1026, operands=[" +
+ "{@type=korap:token, wrap={@type=korap:term, key=gehen, layer=orth, match=match:eq}}" +
+ "]}," +
+ "{@type=korap:group, operation=operation:class, class=1027, classOut=1027, operands=[" +
+ "{@type=korap:reference, operation=operation:focus, classRef=[1028], operands=[" +
+ "{@type=korap:group, operation=operation:sequence, " +
+ "operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1028, classOut=1028, operands=[" +
+ "{@type=korap:token, wrap={@type=korap:term, key=voran, layer=orth, match=match:eq}}" +
+ "]}," +
+ "{@type=korap:group, operation=operation:class, class=1028, classOut=1028, operands=[" +
+ "{@type=korap:token, wrap={@type=korap:term, key=Beispiel, layer=orth, match=match:eq}}" +
+ "]}" +
+ "], inOrder=false, " +
+ "distances=[" +
+ "{@type=korap:distance, key=w, boundary={@type=korap:boundary, min=1, max=10}, min=1, max=10}" +
+ "]" +
+ "}" +
+ "]}" +
+ "]}" +
+ "], inOrder=true, " +
+ "distances=[" +
+ "{@type=korap:distance, key=w, boundary={@type=korap:boundary, min=1, max=10}, min=1, max=10}" +
+ "]" +
+ "}" +
+ "]}" +
+ "]}";
+ ct = new CosmasTree(query);
+ map = ct.getRequestMap().get("query").toString();
+ assertEquals(nhit3.replaceAll(" ", ""), map.replaceAll(" ", ""));
}
@Test
@@ -1152,9 +1279,9 @@
query = "#BED(der , sa)";
String bed1 =
"{@type=korap:reference, operation=operation:focus, classRef=[1025], operands= [" +
- "{@type=korap:group, operation=operation:position, frames=[frame:startswith], sharedClasses=[sharedClasses:includes], operands=[" +
+ "{@type=korap:group, operation=operation:position, frames=[frames:startswith], operands=[" +
"{@type=korap:span, key=s}," +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
"{@type=korap:token, wrap={@type=korap:term, key=der, layer=orth, match=match:eq}}" +
"]}" +
"], frame=frame:startswith}" +
@@ -1166,9 +1293,9 @@
query = "#BED(der Mann , +pe)";
String bed2 =
"{@type=korap:reference, operation=operation:focus, classRef=[1025], operands= [" +
- "{@type=korap:group, operation=operation:position, frames=[frame:endswith], sharedClasses=[sharedClasses:includes], operands=[" +
+ "{@type=korap:group, operation=operation:position, frames=[frames:endswith], operands=[" +
"{@type=korap:span, key=p}," +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
"{@type=korap:group, operation=operation:sequence, operands=[" +
"{@type=korap:token, wrap={@type=korap:term, key=der, layer=orth, match=match:eq}}," +
"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=orth, match=match:eq}}" +
@@ -1183,19 +1310,19 @@
query = "#BED(der Mann , sa,-pa)";
String bed3 =
"{@type=korap:reference, operation=operation:focus, classRef=[1025], operands=[" +
- "{@type=korap:group, operation=operation:position, frames=[frame:matches], sharedClasses=[sharedClasses:equals], operands=[" +
- "{@type=korap:group, operation=operation:position, frames=[frame:startswith], sharedClasses=[sharedClasses:includes], operands=[" +
+ "{@type=korap:group, operation=operation:position, frames=[frames:matches], operands=[" +
+ "{@type=korap:group, operation=operation:position, frames=[frames:startswith], operands=[" +
"{@type=korap:span, key=s}," +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
"{@type=korap:group, operation=operation:sequence, operands=[" +
"{@type=korap:token, wrap={@type=korap:term, key=der, layer=orth, match=match:eq}}," +
"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=orth, match=match:eq}}" +
"]}" +
"]}" +
"], frame=frame:startswith}," +
- "{@type=korap:group, operation=operation:position, frames=[frame:startswith], sharedClasses=[sharedClasses:includes], operands=[" +
+ "{@type=korap:group, operation=operation:position, frames=[frames:startswith], operands=[" +
"{@type=korap:span, key=p}," +
- "{@type=korap:group, operation=operation:class, class=1026, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1026, classOut=1026, operands=[" +
"{@type=korap:group, operation=operation:sequence, operands=[" +
"{@type=korap:token, wrap={@type=korap:term, key=der, layer=orth, match=match:eq}}," +
"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=orth, match=match:eq}}" +
@@ -1215,9 +1342,9 @@
query = "Der:sa";
String col1 =
"{@type=korap:reference, operation=operation:focus, classRef=[1025], operands=[" +
- "{@type=korap:group, operation=operation:position, frames=[frame:startswith], sharedClasses=[sharedClasses:includes], operands=[" +
+ "{@type=korap:group, operation=operation:position, frames=[frames:startswith], operands=[" +
"{@type=korap:span, key=s}," +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
"{@type=korap:token, wrap={@type=korap:term, key=Der, layer=orth, match=match:eq}}" +
"]}" +
"], frame=frame:startswith}" +
@@ -1229,22 +1356,22 @@
query = "Mann:sa,-pa,+te)";
String col2 =
"{@type=korap:reference, operation=operation:focus, classRef=[1025], operands=[" +
- "{@type=korap:group, operation=operation:position, frames=[frame:matches], sharedClasses=[sharedClasses:equals], operands=[" +
- "{@type=korap:group, operation=operation:position, frames=[frame:startswith], sharedClasses=[sharedClasses:includes], operands=[" +
+ "{@type=korap:group, operation=operation:position, frames=[frames:matches], operands=[" +
+ "{@type=korap:group, operation=operation:position, frames=[frames:startswith], operands=[" +
"{@type=korap:span, key=s}," +
- "{@type=korap:group, operation=operation:class, class=1025, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1025, classOut=1025, operands=[" +
"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=orth, match=match:eq}}" +
"]}" +
"], frame=frame:startswith}," +
- "{@type=korap:group, operation=operation:position, frames=[frame:startswith], sharedClasses=[sharedClasses:includes], operands=[" +
+ "{@type=korap:group, operation=operation:position, frames=[frames:startswith], operands=[" +
"{@type=korap:span, key=p}," +
- "{@type=korap:group, operation=operation:class, class=1026, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1026, classOut=1026, operands=[" +
"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=orth, match=match:eq}}" +
"]}" +
"], frame=frame:startswith, exclude=true}," +
- "{@type=korap:group, operation=operation:position, frames=[frame:endswith], sharedClasses=[sharedClasses:includes], operands=[" +
+ "{@type=korap:group, operation=operation:position, frames=[frames:endswith], operands=[" +
"{@type=korap:span, key=t}," +
- "{@type=korap:group, operation=operation:class, class=1027, operands=[" +
+ "{@type=korap:group, operation=operation:class, class=1027, classOut=1027, operands=[" +
"{@type=korap:token, wrap={@type=korap:term, key=Mann, layer=orth, match=match:eq}}" +
"]}" +
"], frame=frame:endswith}" +