align operator as group (unfinished)
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusTree.java b/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusTree.java
index aef3f6e..124b41b 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusTree.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusTree.java
@@ -222,7 +222,7 @@
stackedTokens= 0;
stackedFields = 0;
- if (debug ) {
+ if (debug) {
System.err.println(" "+objectStack);
System.err.println(" "+tokenStack);
System.out.println(openNodeCats);
@@ -242,7 +242,7 @@
cqHasOccSibling = false;
cqHasOccChild = false;
// disregard empty segments in simple queries (parsed by ANTLR as empty cq_segments)
- ignoreCq_segment = (node.getChildCount() == 1 && (node.getChild(0).toStringTree(poliqarpParser).equals(" ") || getNodeCat(node.getChild(0)).equals("spanclass") || getNodeCat(node.getChild(0)).equals("position")));
+ ignoreCq_segment = (node.getChildCount() == 1 && (node.getChild(0).toStringTree(poliqarpParser).equals(" ") || getNodeCat(node.getChild(0)).equals("spanclass") || getNodeCat(node.getChild(0)).equals("position") || getNodeCat(node.getChild(0)).equals("position")));
if (!ignoreCq_segment) {
LinkedHashMap<String,Object> sequence = new LinkedHashMap<String,Object>();
// Step 0: cq_segments has 'occ' child -> introduce group as super group to the sequence/token/group
@@ -517,22 +517,14 @@
}
}
- if (nodeCat.equals("cq_seg_align")) {
+ if (nodeCat.equals("align")) {
LinkedHashMap<String,Object> alignGroup = new LinkedHashMap<String,Object>();
objectStack.push(alignGroup);
- stackedObjects++;
+// stackedObjects++;
// Step I: get info
- // find position of ^ operator
- Integer i;
- for (i=0; i<node.getChildCount(); i++) {
- if (node.getChild(i).toStringTree(poliqarpParser).startsWith("^")) {
- break;
- }
- }
// fill group
alignGroup.put("@type", "korap:group");
- alignGroup.put("relation", "align");
- alignGroup.put("align", i);
+ alignGroup.put("relation", "left-align");
alignGroup.put("operands", new ArrayList<Object>());
// Step II: decide where to put the group
// add group to sequence only if it is not an only child (in that case, sq_segments has already added the info and is just waiting for the relevant info)
@@ -779,7 +771,7 @@
* @param childCat The category of the potential child.
* @return true iff one or more children belong to the specified category
*/
- private boolean hasChild(ParseTree node, String childCat) {
+ public boolean hasChild(ParseTree node, String childCat) {
for (int i=0; i<node.getChildCount(); i++) {
if (getNodeCat(node.getChild(i)).equals(childCat)) {
return true;
@@ -857,12 +849,11 @@
// "<s><np>([base=bar][base=foo])*",
// "shrink(1:contains(<s>,{1:<np>}))",
// "contains(<s>,startswith(<np>,[p=Det]))",
-// "shrink(1: contains(<s>,{1:<np>}))",
-// "contains(<s>, startswith(<np>,[p=Det]))",
+// "contains(<s>, startswith(<np>,[p=Det]))",base=c]",
//
-// "[orth=der]^[orth=Mann]",
+ "[orth=der]^[orth=Mann]",
// "([base=bar][base=foo])*",
- "([base=a]^[base=b])|[base=c]"
+ "([base=a]^[base=b])|[base=c]",
};
PoliqarpPlusTree.debug=true;
for (String q : queries) {
diff --git a/src/test/java/PoliqarpPlusTreeTest.java b/src/test/java/PoliqarpPlusTreeTest.java
index 64a56df..06ec6d0 100644
--- a/src/test/java/PoliqarpPlusTreeTest.java
+++ b/src/test/java/PoliqarpPlusTreeTest.java
@@ -488,6 +488,7 @@
assertEquals(shr5.replaceAll(" ", ""), map.replaceAll(" ", ""));
}
+
@Test
public void testLayers() throws QueryException {
// [base=Mann]
@@ -500,9 +501,11 @@
public void testAlign() {
// [orth=der]^[orth=Mann]
String align1 =
- "{@type=korap:group, relation=align, align=1, operands=[" +
+ "{@type=korap:sequence, operands=[" +
"{@type=korap:token, @value={@type=korap:term, @value=orth:der, relation==}}," +
- "{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}" +
+ "{@type=korap:group, relation=left-align, operands=[" +
+ "{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}" +
+ "]}" +
"]}";
ppt = new PoliqarpPlusTree("[orth=der]^[orth=Mann]");
map = ppt.getRequestMap().get("query").toString();
@@ -511,9 +514,11 @@
// "([base=a]^[base=b])|[base=c]",
String align2 =
"{@type=korap:group, relation=or, operands=[" +
- "{@type=korap:group, relation=align, align=1, operands=[" +
+ "{@type=korap:sequence, operands=[" +
"{@type=korap:token, @value={@type=korap:term, @value=base:a, relation==}}," +
- "{@type=korap:token, @value={@type=korap:term, @value=base:b, relation==}}" +
+ "{@type=korap:group, relation=left-align, operands=[" +
+ "{@type=korap:token, @value={@type=korap:term, @value=base:b, relation==}}" +
+ "]}" +
"]}," +
"{@type=korap:token, @value={@type=korap:term, @value=base:c, relation==}}" +
"]}";