| import static org.junit.Assert.*; |
| |
| import org.junit.Test; |
| |
| import de.ids_mannheim.korap.query.serialize.PoliqarpPlusTree; |
| |
| public class PoliqarpPlusTreeTest { |
| |
| PoliqarpPlusTree ppt; |
| String map; |
| |
| private boolean equalsContent(String str, Object map) { |
| str = str.replaceAll(" ", ""); |
| String mapStr = map.toString().replaceAll(" ", ""); |
| return str.equals(mapStr); |
| } |
| |
| private boolean equalsQueryContent(String res, String query) { |
| res = res.replaceAll(" ", ""); |
| ppt = new PoliqarpPlusTree(query); |
| String queryMap = ppt.getRequestMap().get("query").toString().replaceAll(" ", ""); |
| return res.equals(queryMap); |
| } |
| |
| @Test |
| public void testContext() { |
| String contextString = "{korap=http://korap.ids-mannheim.de/ns/query, @language=de, operands={@id=korap:operands, @container=@list}, relation={@id=korap:relation, @type=korap:relation#types}, class={@id=korap:class, @type=xsd:integer}, query=korap:query, filter=korap:filter, meta=korap:meta}"; |
| ppt = new PoliqarpPlusTree("[base=test]"); |
| assertTrue(equalsContent(contextString, ppt.getRequestMap().get("@context"))); |
| } |
| |
| @Test |
| public void testSingleTokens() { |
| // [base=Mann] |
| String token1 = "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}"; |
| assertTrue(equalsQueryContent(token1, "[base=Mann]")); |
| |
| // [orth!=Frau] |
| String token2 = "{@type=korap:token, @value={@type=korap:term, @value=orth:Frau, relation=!=}}"; |
| assertTrue(equalsQueryContent(token2, "[orth!=Frau]")); |
| |
| // [!p=NN] |
| String token3 = "{@type=korap:token, @value={@type=korap:term, @value=p:NN, relation=!=}}"; |
| assertTrue(equalsQueryContent(token3, "[!p=NN]")); |
| |
| // [!p!=NN] |
| String token4 = "{@type=korap:token, @value={@type=korap:term, @value=p:NN, relation==}}"; |
| assertTrue(equalsQueryContent(token4, "[!p!=NN]")); |
| } |
| |
| @Test |
| public void testElements() { |
| // <s> |
| String elem1 = "{@type=korap:element, @value=s}"; |
| assertTrue(equalsQueryContent(elem1, "<s>")); |
| |
| // <vp> |
| String elem2 = "{@type=korap:element, @value=vp}"; |
| assertTrue(equalsQueryContent(elem2, "<vp>")); |
| } |
| |
| @Test |
| public void testCoordinatedFields() { |
| // [base=Mann&(cas=N|cas=A)] |
| String cof1 = |
| "{@type=korap:token, @value=" + |
| "{@type=korap:group, operands=[" + |
| "{@type=korap:term, @value=base:Mann, relation==}," + |
| "{@type=korap:group, operands=[" + |
| "{@type=korap:term, @value=cas:N, relation==}," + |
| "{@type=korap:term, @value=cas:A, relation==}" + |
| "], relation=or}" + |
| "], relation=and}" + |
| "}"; |
| ppt = new PoliqarpPlusTree("[base=Mann&(cas=N|cas=A)]"); |
| map = ppt.getRequestMap().get("query").toString(); |
| assertEquals(cof1.replaceAll(" ", ""), map.replaceAll(" ", "")); |
| } |
| |
| @Test |
| public void testOccurrence() { |
| // [base=foo]* |
| String occ1 = "{@type=korap:group, operands=[" + |
| "{@type=korap:token, @value={@type=korap:term, @value=base:foo, relation==}}" + |
| "], relation=repetition, quantifier=* }"; |
| ppt = new PoliqarpPlusTree("[base=foo]*"); |
| map = ppt.getRequestMap().get("query").toString(); |
| assertEquals(occ1.replaceAll(" ", ""), map.replaceAll(" ", "")); |
| |
| // [base=foo]*[base=bar] |
| String occ2 = |
| "{@type=korap:sequence, operands=[" + |
| "{@type=korap:group, operands=[" + |
| "{@type=korap:token, @value={@type=korap:term, @value=base:foo, relation==}}" + |
| "], relation=repetition, quantifier=* }," + |
| "{@type=korap:token, @value={@type=korap:term, @value=base:bar, relation==}}" + |
| "]}"; |
| ppt = new PoliqarpPlusTree("[base=foo]*[base=bar]"); |
| map = ppt.getRequestMap().get("query").toString(); |
| assertEquals(occ2.replaceAll(" ", ""), map.replaceAll(" ", "")); |
| |
| // [base=bar][base=foo]* |
| String occ3 = |
| "{@type=korap:sequence, operands=[" + |
| "{@type=korap:token, @value={@type=korap:term, @value=base:bar, relation==}}," + |
| "{@type=korap:group, operands=[" + |
| "{@type=korap:token, @value={@type=korap:term, @value=base:foo, relation==}}" + |
| "], relation=repetition, quantifier=* }" + |
| "]}"; |
| ppt = new PoliqarpPlusTree("[base=bar][base=foo]*"); |
| map = ppt.getRequestMap().get("query").toString(); |
| assertEquals(occ3.replaceAll(" ", ""), map.replaceAll(" ", "")); |
| } |
| |
| @Test |
| public void testTokenSequence() { |
| // [base=Mann][orth=Frau] |
| String seq1 = "{@type=korap:sequence, operands=[" + |
| "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}, " + |
| "{@type=korap:token, @value={@type=korap:term, @value=orth:Frau, relation==}}" + |
| "]}"; |
| assertTrue(equalsQueryContent(seq1, "[base=Mann][orth=Frau]")); |
| |
| // [base=Mann][orth=Frau][p=NN] |
| String seq2 = "{@type=korap:sequence, operands=[" + |
| "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}, " + |
| "{@type=korap:token, @value={@type=korap:term, @value=orth:Frau, relation==}}, " + |
| "{@type=korap:token, @value={@type=korap:term, @value=p:NN, relation==}}" + |
| "]}"; |
| assertTrue(equalsQueryContent(seq2, "[base=Mann][orth=Frau][p=NN]")); |
| } |
| |
| @Test |
| public void testTokenElemSequence() { |
| // [base=Mann]<vp> |
| String seq1 = "{@type=korap:sequence, operands=[" + |
| "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}, " + |
| "{@type=korap:element, @value=vp}" + |
| "]}"; |
| assertTrue(equalsQueryContent(seq1, "[base=Mann]<vp>")); |
| |
| // <vp>[base=Mann] |
| String seq2 = "{@type=korap:sequence, operands=[" + |
| "{@type=korap:element, @value=vp}, "+ |
| "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}} " + |
| "]}"; |
| assertTrue(equalsQueryContent(seq2, "<vp>[base=Mann]")); |
| |
| // <vp>[base=Mann]<pp> |
| String seq3 = "{@type=korap:sequence, operands=[" + |
| "{@type=korap:element, @value=vp}, "+ |
| "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}, " + |
| "{@type=korap:element, @value=pp} "+ |
| "]}"; |
| assertTrue(equalsQueryContent(seq3, "<vp>[base=Mann]<pp>")); |
| } |
| |
| @Test |
| public void testElemSequence() { |
| // <np><vp> |
| String seq1 = "{@type=korap:sequence, operands=[" + |
| "{@type=korap:element, @value=np}," + |
| "{@type=korap:element, @value=vp}" + |
| "]}"; |
| assertTrue(equalsQueryContent(seq1, "<np><vp>")); |
| |
| // <np><vp><pp> |
| String seq2 = "{@type=korap:sequence, operands=[" + |
| "{@type=korap:element, @value=np}," + |
| "{@type=korap:element, @value=vp}," + |
| "{@type=korap:element, @value=pp}" + |
| "]}"; |
| assertTrue(equalsQueryContent(seq2, "<np><vp><pp>")); |
| } |
| |
| @Test |
| public void testClasses() { |
| // {[base=Mann]} |
| String cls1 = "{@type=korap:group, class=0, operands=[" + |
| "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}" + |
| "]}"; |
| assertTrue(equalsQueryContent(cls1, "{[base=Mann]}")); |
| |
| // {[base=Mann][orth=Frau]} |
| String cls2 = "{@type=korap:group, class=0, operands=[" + |
| "{@type=korap:sequence, operands=[" + |
| "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}," + |
| "{@type=korap:token, @value={@type=korap:term, @value=orth:Frau, relation==}}" + |
| "]}" + |
| "]}"; |
| assertTrue(equalsQueryContent(cls2, "{[base=Mann][orth=Frau]}")); |
| |
| // [p=NN]{[base=Mann][orth=Frau]} |
| String cls3 = "{@type=korap:sequence, operands=[" + |
| "{@type=korap:token, @value={@type=korap:term, @value=p:NN, relation==}}," + |
| "{@type=korap:group, class=0, operands=[" + |
| "{@type=korap:sequence, operands=[" + |
| "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}," + |
| "{@type=korap:token, @value={@type=korap:term, @value=orth:Frau, relation==}}" + |
| "]}" + |
| "]}" + |
| "]}"; |
| assertTrue(equalsQueryContent(cls3, "[p=NN]{[base=Mann][orth=Frau]}")); |
| |
| // {[base=Mann][orth=Frau]}[p=NN] |
| String cls4 = "{@type=korap:sequence, operands=[" + |
| "{@type=korap:group, class=0, operands=[" + |
| "{@type=korap:sequence, operands=[" + |
| "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}," + |
| "{@type=korap:token, @value={@type=korap:term, @value=orth:Frau, relation==}}" + |
| "]}" + |
| "]}," + |
| "{@type=korap:token, @value={@type=korap:term, @value=p:NN, relation==}}" + |
| "]}"; |
| assertTrue(equalsQueryContent(cls4, "{[base=Mann][orth=Frau]}[p=NN]")); |
| |
| // {2:{1:[tt/p=ADJA]}[mate/p=NN]}" |
| String cls5 = "{@type=korap:group, class=2, operands=[" + |
| "{@type=korap:sequence, operands=[" + |
| "{@type=korap:group, class=1, operands=[" + |
| "{@type=korap:token, @value={@type=korap:term, @value=tt/p:ADJA, relation==}}" + |
| "]}," + |
| "{@type=korap:token, @value={@type=korap:term, @value=mate/p:NN, relation==}}" + |
| "]}" + |
| "]}"; |
| ppt = new PoliqarpPlusTree("{2: {1:[tt/p=ADJA]}[mate/p=NN]}"); |
| map = ppt.getRequestMap().get("query").toString(); |
| assertEquals(cls5.replaceAll(" ", ""), map.replaceAll(" ", "")); |
| } |
| |
| @Test |
| public void testPositions() { |
| // contains(<s>,<np>) |
| String pos1 = "{@type=korap:group, relation=position, position=contains, operands=[" + |
| "{@type=korap:element, @value=s}," + |
| "{@type=korap:element, @value=np}" + |
| "]}"; |
| assertTrue(equalsQueryContent(pos1, "contains(<s>,<np>)")); |
| |
| // contains(<s>,[base=Mann]) |
| String pos2 = "{@type=korap:group, relation=position, position=contains, operands=[" + |
| "{@type=korap:element, @value=s}," + |
| "{@type=korap:token, @value= {@type=korap:term, @value=base:Mann, relation==}}" + |
| "]}"; |
| assertTrue(equalsQueryContent(pos2, "contains(<s>,[base=Mann])")); |
| |
| // contains(<s>,[orth=der][orth=Mann]) |
| String pos3 = "{@type=korap:group, relation=position, position=contains, operands=[" + |
| "{@type=korap:element, @value=s}," + |
| "{@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==}}" + |
| "]}" + |
| "]}"; |
| ppt = new PoliqarpPlusTree("contains(<s>,[orth=der][orth=Mann])"); |
| map = ppt.getRequestMap().get("query").toString(); |
| assertEquals(pos3.replaceAll(" ", ""), map.replaceAll(" ", "")); |
| |
| // [base=Auto]contains(<s>,[base=Mann]) |
| String pos4 = |
| "{@type=korap:sequence, operands=[" + |
| "{@type=korap:token, @value={@type=korap:term, @value=base:Auto, relation==}}," + |
| "{@type=korap:group, relation=position, position=contains, operands=[" + |
| "{@type=korap:element, @value=s}," + |
| "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}" + |
| "]}" + |
| "]}"; |
| ppt = new PoliqarpPlusTree("[base=Auto]contains(<s>,[base=Mann])"); |
| map = ppt.getRequestMap().get("query").toString(); |
| assertEquals(pos4.replaceAll(" ", ""), map.replaceAll(" ", "")); |
| } |
| |
| @Test |
| public void testNestedPositions() { |
| // contains(<s>,startswith(<np>,[orth=Der])) |
| String npos1 = |
| "{@type=korap:group, relation=position, position=contains, operands=[" + |
| "{@type=korap:element, @value=s}," + |
| "{@type=korap:group, relation=position, position=startswith, operands=[" + |
| "{@type=korap:element, @value=np}," + |
| "{@type=korap:token, @value={@type=korap:term, @value=orth:Der, relation==}}" + |
| "]}" + |
| "]}"; |
| ppt = new PoliqarpPlusTree("contains(<s>, startswith(<np>,[orth=Der]))"); |
| map = ppt.getRequestMap().get("query").toString(); |
| assertEquals(npos1.replaceAll(" ", ""), map.replaceAll(" ", "")); |
| } |
| |
| @Test |
| public void testShrinkSplit() { |
| // shrink([orth=Der]{[orth=Mann]}) |
| String shr1 = |
| "{@type=korap:group, relation=shrink, shrink=0, operands=[" + |
| "{@type=korap:sequence, operands=[" + |
| "{@type=korap:token, @value={@type=korap:term, @value=orth:Der, relation==}}," + |
| "{@type=korap:group, class=0, operands=[" + |
| "{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}" + |
| "]}" + |
| "]}" + |
| "]}"; |
| ppt = new PoliqarpPlusTree("shrink([orth=Der]{[orth=Mann]})"); |
| map = ppt.getRequestMap().get("query").toString(); |
| assertEquals(shr1.replaceAll(" ", ""), map.replaceAll(" ", "")); |
| |
| // shrink([orth=Der]{[orth=Mann][orth=geht]}) |
| String shr2 = |
| "{@type=korap:group, relation=shrink, shrink=0, operands=[" + |
| "{@type=korap:sequence, operands=[" + |
| "{@type=korap:token, @value={@type=korap:term, @value=orth:Der, relation==}}," + |
| "{@type=korap:group, class=0, operands=[" + |
| "{@type=korap:sequence, operands=[" + |
| "{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}," + |
| "{@type=korap:token, @value={@type=korap:term, @value=orth:geht, relation==}}" + |
| "]}" + |
| "]}" + |
| "]}" + |
| "]}"; |
| ppt = new PoliqarpPlusTree("shrink([orth=Der]{[orth=Mann][orth=geht]})"); |
| map = ppt.getRequestMap().get("query").toString(); |
| assertEquals(shr2.replaceAll(" ", ""), map.replaceAll(" ", "")); |
| |
| // shrink(1:[orth=Der]{1:[orth=Mann][orth=geht]}) |
| String shr3 = |
| "{@type=korap:group, relation=shrink, shrink=1, operands=[" + |
| "{@type=korap:sequence, operands=[" + |
| "{@type=korap:token, @value={@type=korap:term, @value=orth:Der, relation==}}," + |
| "{@type=korap:group, class=1, operands=[" + |
| "{@type=korap:sequence, operands=[" + |
| "{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}," + |
| "{@type=korap:token, @value={@type=korap:term, @value=orth:geht, relation==}}" + |
| "]}" + |
| "]}" + |
| "]}" + |
| "]}"; |
| ppt = new PoliqarpPlusTree("shrink(1:[orth=Der]{1:[orth=Mann][orth=geht]})"); |
| map = ppt.getRequestMap().get("query").toString(); |
| assertEquals(shr3.replaceAll(" ", ""), map.replaceAll(" ", "")); |
| |
| // shrink(1:startswith(<s>,{1:<np>})) |
| String shr4 = |
| "{@type=korap:group, relation=shrink, shrink=1, operands=[" + |
| "{@type=korap:group, relation=position, position=startswith, operands=[" + |
| "{@type=korap:element, @value=s}," + |
| "{@type=korap:group, class=1, operands=[" + |
| "{@type=korap:element, @value=np}" + |
| "]}" + |
| "]}" + |
| "]}"; |
| ppt = new PoliqarpPlusTree("shrink(1: startswith(<s>,{1:<np>}))"); |
| map = ppt.getRequestMap().get("query").toString(); |
| assertEquals(shr4.replaceAll(" ", ""), map.replaceAll(" ", "")); |
| |
| // shrink(3: startswith(<s>, {3:[base=der]{1:[mate/p=ADJA]{2:[tt/p=NN]}}})) |
| String shr5 = |
| "{@type=korap:group, relation=shrink, shrink=3, operands=[" + |
| "{@type=korap:group, relation=position, position=startswith, operands=[" + |
| "{@type=korap:element, @value=s}," + |
| "{@type=korap:group, class=3, operands=[" + |
| "{@type=korap:sequence, operands=[" + |
| "{@type=korap:token, @value={@type=korap:term, @value=base:der, relation==}}," + |
| "{@type=korap:group, class=1, operands=[" + |
| "{@type=korap:sequence, operands=[" + |
| "{@type=korap:token, @value={@type=korap:term, @value=mate/p:ADJA, relation==}}," + |
| "{@type=korap:group, class=2, operands=[" + |
| "{@type=korap:token, @value={@type=korap:term, @value=tt/p:NN, relation==}}" + |
| "]}" + |
| "]}" + |
| "]}" + |
| "]}" + |
| "]}" + |
| "]}" + |
| "]}"; |
| ppt = new PoliqarpPlusTree("shrink(3: startswith(<s>, {3:[base=der]{1:[mate/p=ADJA]{2:[tt/p=NN]}}})) "); |
| map = ppt.getRequestMap().get("query").toString(); |
| assertEquals(shr5.replaceAll(" ", ""), map.replaceAll(" ", "")); |
| } |
| |
| @Test |
| public void testLayers() { |
| // [base=Mann] |
| String layer1 = "{@type=korap:token, @value={@type=korap:term, @value=tt/base:Mann, relation==}}"; |
| assertTrue(equalsQueryContent(layer1, "[tt/base=Mann]")); |
| |
| } |
| } |
| |