blob: 82f7d72892de2584142ef70f26de6acbead3b71a [file] [log] [blame]
Joachim Bingel53333e62013-12-09 19:25:52 +00001import static org.junit.Assert.*;
2
3import org.junit.Test;
4
5import de.ids_mannheim.korap.query.serialize.PoliqarpPlusTree;
Joachim Bingel16da4e12013-12-17 09:48:12 +00006import de.ids_mannheim.korap.util.QueryException;
Joachim Bingel53333e62013-12-09 19:25:52 +00007
8public class PoliqarpPlusTreeTest {
9
10 PoliqarpPlusTree ppt;
11 String map;
12
13 private boolean equalsContent(String str, Object map) {
14 str = str.replaceAll(" ", "");
15 String mapStr = map.toString().replaceAll(" ", "");
16 return str.equals(mapStr);
17 }
18
Joachim Bingel16da4e12013-12-17 09:48:12 +000019 private boolean equalsQueryContent(String res, String query) throws QueryException {
Joachim Bingel53333e62013-12-09 19:25:52 +000020 res = res.replaceAll(" ", "");
21 ppt = new PoliqarpPlusTree(query);
22 String queryMap = ppt.getRequestMap().get("query").toString().replaceAll(" ", "");
23 return res.equals(queryMap);
24 }
25
26 @Test
Joachim Bingel16da4e12013-12-17 09:48:12 +000027 public void testContext() throws QueryException {
Joachim Bingel53333e62013-12-09 19:25:52 +000028 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}";
29 ppt = new PoliqarpPlusTree("[base=test]");
30 assertTrue(equalsContent(contextString, ppt.getRequestMap().get("@context")));
31 }
32
33 @Test
Joachim Bingel16da4e12013-12-17 09:48:12 +000034 public void testSingleTokens() throws QueryException {
Joachim Bingel53333e62013-12-09 19:25:52 +000035 // [base=Mann]
36 String token1 = "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}";
37 assertTrue(equalsQueryContent(token1, "[base=Mann]"));
38
39 // [orth!=Frau]
40 String token2 = "{@type=korap:token, @value={@type=korap:term, @value=orth:Frau, relation=!=}}";
41 assertTrue(equalsQueryContent(token2, "[orth!=Frau]"));
42
43 // [!p=NN]
44 String token3 = "{@type=korap:token, @value={@type=korap:term, @value=p:NN, relation=!=}}";
45 assertTrue(equalsQueryContent(token3, "[!p=NN]"));
46
47 // [!p!=NN]
48 String token4 = "{@type=korap:token, @value={@type=korap:term, @value=p:NN, relation==}}";
49 assertTrue(equalsQueryContent(token4, "[!p!=NN]"));
50 }
51
52 @Test
Joachim Bingel16da4e12013-12-17 09:48:12 +000053 public void testElements() throws QueryException {
Joachim Bingel53333e62013-12-09 19:25:52 +000054 // <s>
55 String elem1 = "{@type=korap:element, @value=s}";
56 assertTrue(equalsQueryContent(elem1, "<s>"));
57
58 // <vp>
59 String elem2 = "{@type=korap:element, @value=vp}";
60 assertTrue(equalsQueryContent(elem2, "<vp>"));
61 }
62
63 @Test
Joachim Bingel16da4e12013-12-17 09:48:12 +000064 public void testCoordinatedFields() throws QueryException {
Joachim Bingel53333e62013-12-09 19:25:52 +000065 // [base=Mann&(cas=N|cas=A)]
66 String cof1 =
67 "{@type=korap:token, @value=" +
68 "{@type=korap:group, operands=[" +
69 "{@type=korap:term, @value=base:Mann, relation==}," +
70 "{@type=korap:group, operands=[" +
71 "{@type=korap:term, @value=cas:N, relation==}," +
72 "{@type=korap:term, @value=cas:A, relation==}" +
73 "], relation=or}" +
74 "], relation=and}" +
75 "}";
76 ppt = new PoliqarpPlusTree("[base=Mann&(cas=N|cas=A)]");
77 map = ppt.getRequestMap().get("query").toString();
78 assertEquals(cof1.replaceAll(" ", ""), map.replaceAll(" ", ""));
Nils Diewald7d486c22013-12-13 16:32:18 +000079
80
81 assertEquals(
82 new PoliqarpPlusTree(" [ base=Mann & ( cas=N | cas=A)] ").getRequestMap().get("query").toString(),
83 new PoliqarpPlusTree("[base=Mann &(cas=N|cas=A)]").getRequestMap().get("query").toString()
84 );
Joachim Bingel53333e62013-12-09 19:25:52 +000085 }
86
87 @Test
Joachim Bingel16da4e12013-12-17 09:48:12 +000088 public void testOccurrence() throws QueryException {
Joachim Bingelcd9ed332013-12-09 21:01:35 +000089 // [base=foo]*
90 String occ1 = "{@type=korap:group, operands=[" +
91 "{@type=korap:token, @value={@type=korap:term, @value=base:foo, relation==}}" +
92 "], relation=repetition, quantifier=* }";
93 ppt = new PoliqarpPlusTree("[base=foo]*");
94 map = ppt.getRequestMap().get("query").toString();
95 assertEquals(occ1.replaceAll(" ", ""), map.replaceAll(" ", ""));
96
97 // [base=foo]*[base=bar]
98 String occ2 =
99 "{@type=korap:sequence, operands=[" +
100 "{@type=korap:group, operands=[" +
101 "{@type=korap:token, @value={@type=korap:term, @value=base:foo, relation==}}" +
102 "], relation=repetition, quantifier=* }," +
103 "{@type=korap:token, @value={@type=korap:term, @value=base:bar, relation==}}" +
104 "]}";
105 ppt = new PoliqarpPlusTree("[base=foo]*[base=bar]");
106 map = ppt.getRequestMap().get("query").toString();
107 assertEquals(occ2.replaceAll(" ", ""), map.replaceAll(" ", ""));
108
109 // [base=bar][base=foo]*
110 String occ3 =
111 "{@type=korap:sequence, operands=[" +
112 "{@type=korap:token, @value={@type=korap:term, @value=base:bar, relation==}}," +
113 "{@type=korap:group, operands=[" +
114 "{@type=korap:token, @value={@type=korap:term, @value=base:foo, relation==}}" +
115 "], relation=repetition, quantifier=* }" +
116 "]}";
117 ppt = new PoliqarpPlusTree("[base=bar][base=foo]*");
118 map = ppt.getRequestMap().get("query").toString();
119 assertEquals(occ3.replaceAll(" ", ""), map.replaceAll(" ", ""));
Joachim Bingelb4da7022013-12-09 23:17:24 +0000120
121 // ([base=bar][base=foo])*
122 String occ4 =
123 "{@type=korap:group, operands=[" +
124 "{@type=korap:sequence, operands=[" +
125 "{@type=korap:token, @value={@type=korap:term, @value=base:bar, relation==}}," +
126 "{@type=korap:token, @value={@type=korap:term, @value=base:foo, relation==}}" +
127 "]}" +
128 "], relation=repetition, quantifier=* }" ;
129 ppt = new PoliqarpPlusTree("([base=bar][base=foo])*");
130 map = ppt.getRequestMap().get("query").toString();
131 assertEquals(occ4.replaceAll(" ", ""), map.replaceAll(" ", ""));
132
133 // <s>([base=bar][base=foo])*
134 String occ5 =
135 "{@type=korap:sequence, operands=[" +
136 "{@type=korap:element, @value=s}," +
137 "{@type=korap:group, operands=[" +
138 "{@type=korap:sequence, operands=[" +
139 "{@type=korap:token, @value={@type=korap:term, @value=base:bar, relation==}}," +
140 "{@type=korap:token, @value={@type=korap:term, @value=base:foo, relation==}}" +
141 "]}" +
142 "], relation=repetition, quantifier=* }" +
143 "]}" ;
144 ppt = new PoliqarpPlusTree("<s>([base=bar][base=foo])*");
145 map = ppt.getRequestMap().get("query").toString();
146 assertEquals(occ5.replaceAll(" ", ""), map.replaceAll(" ", ""));
147
148 // <s><np>([base=bar][base=foo])*
Joachim Bingelb4da7022013-12-09 23:17:24 +0000149 String occ6 =
150 "{@type=korap:sequence, operands=[" +
Joachim Bingel94a1ccd2013-12-10 10:37:29 +0000151 "{@type=korap:element, @value=s}," +
152 "{@type=korap:element, @value=np}," +
Joachim Bingelb4da7022013-12-09 23:17:24 +0000153 "{@type=korap:group, operands=[" +
154 "{@type=korap:sequence, operands=[" +
155 "{@type=korap:token, @value={@type=korap:term, @value=base:bar, relation==}}," +
156 "{@type=korap:token, @value={@type=korap:term, @value=base:foo, relation==}}" +
157 "]}" +
158 "], relation=repetition, quantifier=* }" +
159 "]}" ;
160 ppt = new PoliqarpPlusTree("<s><np>([base=bar][base=foo])*");
161 map = ppt.getRequestMap().get("query").toString();
162 assertEquals(occ6.replaceAll(" ", ""), map.replaceAll(" ", ""));
163
164 // <s><np>([base=bar][base=foo])*[p=NN]
165 // comment: embedded sequence shouldn't really be here, but does not really hurt, either. (?)
166 // really hard to get this behaviour out of the PQPlus grammar...
167 String occ7 =
168 "{@type=korap:sequence, operands=[" +
Joachim Bingel94a1ccd2013-12-10 10:37:29 +0000169 "{@type=korap:element, @value=s}," +
170 "{@type=korap:element, @value=np}," +
Joachim Bingelb4da7022013-12-09 23:17:24 +0000171 "{@type=korap:group, operands=[" +
172 "{@type=korap:sequence, operands=[" +
173 "{@type=korap:token, @value={@type=korap:term, @value=base:bar, relation==}}," +
174 "{@type=korap:token, @value={@type=korap:term, @value=base:foo, relation==}}" +
175 "]}" +
176 "], relation=repetition, quantifier=* }," +
177 "{@type=korap:token, @value={@type=korap:term, @value=p:NN, relation==}}" +
178 "]}" ;
179 ppt = new PoliqarpPlusTree("<s><np>([base=bar][base=foo])*[p=NN]");
180 map = ppt.getRequestMap().get("query").toString();
181 assertEquals(occ7.replaceAll(" ", ""), map.replaceAll(" ", ""));
182
183 // ([base=bar][base=foo])*[p=NN]
Joachim Bingelb4da7022013-12-09 23:17:24 +0000184 String occ8 =
185 "{@type=korap:sequence, operands=[" +
186 "{@type=korap:group, operands=[" +
187 "{@type=korap:sequence, operands=[" +
188 "{@type=korap:token, @value={@type=korap:term, @value=base:bar, relation==}}," +
189 "{@type=korap:token, @value={@type=korap:term, @value=base:foo, relation==}}" +
190 "]}" +
191 "], relation=repetition, quantifier=* }," +
192 "{@type=korap:token, @value={@type=korap:term, @value=p:NN, relation==}}" +
193 "]}" ;
194 ppt = new PoliqarpPlusTree("([base=bar][base=foo])*[p=NN]");
195 map = ppt.getRequestMap().get("query").toString();
196 assertEquals(occ8.replaceAll(" ", ""), map.replaceAll(" ", ""));
Joachim Bingel53333e62013-12-09 19:25:52 +0000197 }
198
199 @Test
Joachim Bingel16da4e12013-12-17 09:48:12 +0000200 public void testTokenSequence() throws QueryException {
Joachim Bingel53333e62013-12-09 19:25:52 +0000201 // [base=Mann][orth=Frau]
202 String seq1 = "{@type=korap:sequence, operands=[" +
203 "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}, " +
204 "{@type=korap:token, @value={@type=korap:term, @value=orth:Frau, relation==}}" +
205 "]}";
206 assertTrue(equalsQueryContent(seq1, "[base=Mann][orth=Frau]"));
207
208 // [base=Mann][orth=Frau][p=NN]
209 String seq2 = "{@type=korap:sequence, operands=[" +
210 "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}, " +
211 "{@type=korap:token, @value={@type=korap:term, @value=orth:Frau, relation==}}, " +
212 "{@type=korap:token, @value={@type=korap:term, @value=p:NN, relation==}}" +
213 "]}";
214 assertTrue(equalsQueryContent(seq2, "[base=Mann][orth=Frau][p=NN]"));
215 }
216
217 @Test
Joachim Bingel16da4e12013-12-17 09:48:12 +0000218 public void testDisjSegments() throws QueryException {
Joachim Bingel94a1ccd2013-12-10 10:37:29 +0000219 // ([base=der]|[base=das])[base=Schild]
220 String disj1 =
221 "{@type=korap:sequence, operands=[" +
222 "{@type=korap:group, relation=or, operands=[" +
223 "{@type=korap:token, @value={@type=korap:term, @value=base:der, relation==}}," +
224 "{@type=korap:token, @value={@type=korap:term, @value=base:das, relation==}}" +
225 "]}," +
226 "{@type=korap:token, @value={@type=korap:term, @value=base:Schild, relation==}}" +
227 "]}";
228 ppt = new PoliqarpPlusTree("([base=der]|[base=das])[base=Schild]");
229 map = ppt.getRequestMap().get("query").toString();
230 assertEquals(disj1.replaceAll(" ", ""), map.replaceAll(" ", ""));
231
232 // [base=Schild]([base=der]|[base=das])
233 String disj2 =
234 "{@type=korap:sequence, operands=[" +
235 "{@type=korap:token, @value={@type=korap:term, @value=base:Schild, relation==}}," +
236 "{@type=korap:group, relation=or, operands=[" +
237 "{@type=korap:token, @value={@type=korap:term, @value=base:der, relation==}}," +
238 "{@type=korap:token, @value={@type=korap:term, @value=base:das, relation==}}" +
239 "]}" +
240 "]}";
241 ppt = new PoliqarpPlusTree("[base=Schild]([base=der]|[base=das])");
242 map = ppt.getRequestMap().get("query").toString();
243 assertEquals(disj2.replaceAll(" ", ""), map.replaceAll(" ", ""));
244 }
245
246 @Test
Joachim Bingel16da4e12013-12-17 09:48:12 +0000247 public void testTokenElemSequence() throws QueryException {
Joachim Bingel53333e62013-12-09 19:25:52 +0000248 // [base=Mann]<vp>
249 String seq1 = "{@type=korap:sequence, operands=[" +
250 "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}, " +
251 "{@type=korap:element, @value=vp}" +
252 "]}";
253 assertTrue(equalsQueryContent(seq1, "[base=Mann]<vp>"));
254
255 // <vp>[base=Mann]
256 String seq2 = "{@type=korap:sequence, operands=[" +
257 "{@type=korap:element, @value=vp}, "+
258 "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}} " +
259 "]}";
260 assertTrue(equalsQueryContent(seq2, "<vp>[base=Mann]"));
261
262 // <vp>[base=Mann]<pp>
263 String seq3 = "{@type=korap:sequence, operands=[" +
264 "{@type=korap:element, @value=vp}, "+
265 "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}, " +
266 "{@type=korap:element, @value=pp} "+
267 "]}";
268 assertTrue(equalsQueryContent(seq3, "<vp>[base=Mann]<pp>"));
269 }
270
271 @Test
Joachim Bingel16da4e12013-12-17 09:48:12 +0000272 public void testElemSequence() throws QueryException {
Joachim Bingel53333e62013-12-09 19:25:52 +0000273 // <np><vp>
274 String seq1 = "{@type=korap:sequence, operands=[" +
275 "{@type=korap:element, @value=np}," +
276 "{@type=korap:element, @value=vp}" +
277 "]}";
278 assertTrue(equalsQueryContent(seq1, "<np><vp>"));
279
280 // <np><vp><pp>
281 String seq2 = "{@type=korap:sequence, operands=[" +
282 "{@type=korap:element, @value=np}," +
283 "{@type=korap:element, @value=vp}," +
284 "{@type=korap:element, @value=pp}" +
285 "]}";
286 assertTrue(equalsQueryContent(seq2, "<np><vp><pp>"));
287 }
288
289 @Test
Joachim Bingel16da4e12013-12-17 09:48:12 +0000290 public void testClasses() throws QueryException {
Joachim Bingel53333e62013-12-09 19:25:52 +0000291 // {[base=Mann]}
292 String cls1 = "{@type=korap:group, class=0, operands=[" +
293 "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}" +
294 "]}";
295 assertTrue(equalsQueryContent(cls1, "{[base=Mann]}"));
296
297 // {[base=Mann][orth=Frau]}
298 String cls2 = "{@type=korap:group, class=0, operands=[" +
299 "{@type=korap:sequence, operands=[" +
300 "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}," +
301 "{@type=korap:token, @value={@type=korap:term, @value=orth:Frau, relation==}}" +
302 "]}" +
303 "]}";
304 assertTrue(equalsQueryContent(cls2, "{[base=Mann][orth=Frau]}"));
305
306 // [p=NN]{[base=Mann][orth=Frau]}
307 String cls3 = "{@type=korap:sequence, operands=[" +
308 "{@type=korap:token, @value={@type=korap:term, @value=p:NN, relation==}}," +
309 "{@type=korap:group, class=0, operands=[" +
310 "{@type=korap:sequence, operands=[" +
311 "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}," +
312 "{@type=korap:token, @value={@type=korap:term, @value=orth:Frau, relation==}}" +
313 "]}" +
314 "]}" +
315 "]}";
316 assertTrue(equalsQueryContent(cls3, "[p=NN]{[base=Mann][orth=Frau]}"));
317
318 // {[base=Mann][orth=Frau]}[p=NN]
319 String cls4 = "{@type=korap:sequence, operands=[" +
320 "{@type=korap:group, class=0, operands=[" +
321 "{@type=korap:sequence, operands=[" +
322 "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}," +
323 "{@type=korap:token, @value={@type=korap:term, @value=orth:Frau, relation==}}" +
324 "]}" +
325 "]}," +
326 "{@type=korap:token, @value={@type=korap:term, @value=p:NN, relation==}}" +
327 "]}";
328 assertTrue(equalsQueryContent(cls4, "{[base=Mann][orth=Frau]}[p=NN]"));
Joachim Bingelcd9ed332013-12-09 21:01:35 +0000329
330 // {2:{1:[tt/p=ADJA]}[mate/p=NN]}"
331 String cls5 = "{@type=korap:group, class=2, operands=[" +
332 "{@type=korap:sequence, operands=[" +
333 "{@type=korap:group, class=1, operands=[" +
334 "{@type=korap:token, @value={@type=korap:term, @value=tt/p:ADJA, relation==}}" +
335 "]}," +
336 "{@type=korap:token, @value={@type=korap:term, @value=mate/p:NN, relation==}}" +
337 "]}" +
338 "]}";
339 ppt = new PoliqarpPlusTree("{2: {1:[tt/p=ADJA]}[mate/p=NN]}");
340 map = ppt.getRequestMap().get("query").toString();
341 assertEquals(cls5.replaceAll(" ", ""), map.replaceAll(" ", ""));
Joachim Bingel53333e62013-12-09 19:25:52 +0000342 }
343
344 @Test
Joachim Bingel16da4e12013-12-17 09:48:12 +0000345 public void testPositions() throws QueryException {
Joachim Bingel53333e62013-12-09 19:25:52 +0000346 // contains(<s>,<np>)
347 String pos1 = "{@type=korap:group, relation=position, position=contains, operands=[" +
348 "{@type=korap:element, @value=s}," +
349 "{@type=korap:element, @value=np}" +
350 "]}";
351 assertTrue(equalsQueryContent(pos1, "contains(<s>,<np>)"));
352
353 // contains(<s>,[base=Mann])
354 String pos2 = "{@type=korap:group, relation=position, position=contains, operands=[" +
355 "{@type=korap:element, @value=s}," +
356 "{@type=korap:token, @value= {@type=korap:term, @value=base:Mann, relation==}}" +
357 "]}";
358 assertTrue(equalsQueryContent(pos2, "contains(<s>,[base=Mann])"));
359
360 // contains(<s>,[orth=der][orth=Mann])
361 String pos3 = "{@type=korap:group, relation=position, position=contains, operands=[" +
362 "{@type=korap:element, @value=s}," +
363 "{@type=korap:sequence, operands=[" +
364 "{@type=korap:token, @value={@type=korap:term, @value=orth:der, relation==}}," +
365 "{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}" +
366 "]}" +
367 "]}";
368 ppt = new PoliqarpPlusTree("contains(<s>,[orth=der][orth=Mann])");
369 map = ppt.getRequestMap().get("query").toString();
370 assertEquals(pos3.replaceAll(" ", ""), map.replaceAll(" ", ""));
371
372 // [base=Auto]contains(<s>,[base=Mann])
373 String pos4 =
374 "{@type=korap:sequence, operands=[" +
375 "{@type=korap:token, @value={@type=korap:term, @value=base:Auto, relation==}}," +
376 "{@type=korap:group, relation=position, position=contains, operands=[" +
377 "{@type=korap:element, @value=s}," +
378 "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}" +
379 "]}" +
380 "]}";
381 ppt = new PoliqarpPlusTree("[base=Auto]contains(<s>,[base=Mann])");
382 map = ppt.getRequestMap().get("query").toString();
383 assertEquals(pos4.replaceAll(" ", ""), map.replaceAll(" ", ""));
384 }
385
386 @Test
Joachim Bingel16da4e12013-12-17 09:48:12 +0000387 public void testNestedPositions() throws QueryException {
Joachim Bingel53333e62013-12-09 19:25:52 +0000388 // contains(<s>,startswith(<np>,[orth=Der]))
389 String npos1 =
390 "{@type=korap:group, relation=position, position=contains, operands=[" +
391 "{@type=korap:element, @value=s}," +
392 "{@type=korap:group, relation=position, position=startswith, operands=[" +
393 "{@type=korap:element, @value=np}," +
394 "{@type=korap:token, @value={@type=korap:term, @value=orth:Der, relation==}}" +
395 "]}" +
396 "]}";
Joachim Bingelcd9ed332013-12-09 21:01:35 +0000397 ppt = new PoliqarpPlusTree("contains(<s>, startswith(<np>,[orth=Der]))");
Joachim Bingel53333e62013-12-09 19:25:52 +0000398 map = ppt.getRequestMap().get("query").toString();
399 assertEquals(npos1.replaceAll(" ", ""), map.replaceAll(" ", ""));
400 }
401
402 @Test
Joachim Bingel16da4e12013-12-17 09:48:12 +0000403 public void testShrinkSplit() throws QueryException {
Joachim Bingel53333e62013-12-09 19:25:52 +0000404 // shrink([orth=Der]{[orth=Mann]})
405 String shr1 =
406 "{@type=korap:group, relation=shrink, shrink=0, operands=[" +
407 "{@type=korap:sequence, operands=[" +
408 "{@type=korap:token, @value={@type=korap:term, @value=orth:Der, relation==}}," +
409 "{@type=korap:group, class=0, operands=[" +
410 "{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}" +
411 "]}" +
412 "]}" +
413 "]}";
414 ppt = new PoliqarpPlusTree("shrink([orth=Der]{[orth=Mann]})");
415 map = ppt.getRequestMap().get("query").toString();
416 assertEquals(shr1.replaceAll(" ", ""), map.replaceAll(" ", ""));
417
418 // shrink([orth=Der]{[orth=Mann][orth=geht]})
419 String shr2 =
420 "{@type=korap:group, relation=shrink, shrink=0, operands=[" +
421 "{@type=korap:sequence, operands=[" +
422 "{@type=korap:token, @value={@type=korap:term, @value=orth:Der, relation==}}," +
423 "{@type=korap:group, class=0, operands=[" +
424 "{@type=korap:sequence, operands=[" +
425 "{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}," +
426 "{@type=korap:token, @value={@type=korap:term, @value=orth:geht, relation==}}" +
427 "]}" +
428 "]}" +
429 "]}" +
430 "]}";
431 ppt = new PoliqarpPlusTree("shrink([orth=Der]{[orth=Mann][orth=geht]})");
432 map = ppt.getRequestMap().get("query").toString();
433 assertEquals(shr2.replaceAll(" ", ""), map.replaceAll(" ", ""));
434
435 // shrink(1:[orth=Der]{1:[orth=Mann][orth=geht]})
436 String shr3 =
437 "{@type=korap:group, relation=shrink, shrink=1, operands=[" +
438 "{@type=korap:sequence, operands=[" +
439 "{@type=korap:token, @value={@type=korap:term, @value=orth:Der, relation==}}," +
440 "{@type=korap:group, class=1, operands=[" +
441 "{@type=korap:sequence, operands=[" +
442 "{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}," +
443 "{@type=korap:token, @value={@type=korap:term, @value=orth:geht, relation==}}" +
444 "]}" +
445 "]}" +
446 "]}" +
447 "]}";
448 ppt = new PoliqarpPlusTree("shrink(1:[orth=Der]{1:[orth=Mann][orth=geht]})");
449 map = ppt.getRequestMap().get("query").toString();
450 assertEquals(shr3.replaceAll(" ", ""), map.replaceAll(" ", ""));
451
452 // shrink(1:startswith(<s>,{1:<np>}))
453 String shr4 =
454 "{@type=korap:group, relation=shrink, shrink=1, operands=[" +
455 "{@type=korap:group, relation=position, position=startswith, operands=[" +
456 "{@type=korap:element, @value=s}," +
457 "{@type=korap:group, class=1, operands=[" +
458 "{@type=korap:element, @value=np}" +
459 "]}" +
460 "]}" +
461 "]}";
Joachim Bingeladefa622013-12-13 10:51:48 +0000462 ppt = new PoliqarpPlusTree("shrink(1:startswith(<s>,{1:<np>}))");
Joachim Bingel53333e62013-12-09 19:25:52 +0000463 map = ppt.getRequestMap().get("query").toString();
464 assertEquals(shr4.replaceAll(" ", ""), map.replaceAll(" ", ""));
Joachim Bingelcd9ed332013-12-09 21:01:35 +0000465
466 // shrink(3: startswith(<s>, {3:[base=der]{1:[mate/p=ADJA]{2:[tt/p=NN]}}}))
467 String shr5 =
468 "{@type=korap:group, relation=shrink, shrink=3, operands=[" +
469 "{@type=korap:group, relation=position, position=startswith, operands=[" +
470 "{@type=korap:element, @value=s}," +
471 "{@type=korap:group, class=3, operands=[" +
472 "{@type=korap:sequence, operands=[" +
473 "{@type=korap:token, @value={@type=korap:term, @value=base:der, relation==}}," +
474 "{@type=korap:group, class=1, operands=[" +
475 "{@type=korap:sequence, operands=[" +
476 "{@type=korap:token, @value={@type=korap:term, @value=mate/p:ADJA, relation==}}," +
477 "{@type=korap:group, class=2, operands=[" +
478 "{@type=korap:token, @value={@type=korap:term, @value=tt/p:NN, relation==}}" +
479 "]}" +
480 "]}" +
481 "]}" +
482 "]}" +
483 "]}" +
484 "]}" +
485 "]}";
Joachim Bingeladefa622013-12-13 10:51:48 +0000486 ppt = new PoliqarpPlusTree("shrink(3:startswith(<s>,{3:[base=der]{1:[mate/p=ADJA]{2:[tt/p=NN]}}})) ");
Joachim Bingelcd9ed332013-12-09 21:01:35 +0000487 map = ppt.getRequestMap().get("query").toString();
488 assertEquals(shr5.replaceAll(" ", ""), map.replaceAll(" ", ""));
Joachim Bingel53333e62013-12-09 19:25:52 +0000489 }
490
Joachim Bingel03882702013-12-31 19:53:05 +0000491
Joachim Bingel53333e62013-12-09 19:25:52 +0000492 @Test
Joachim Bingel16da4e12013-12-17 09:48:12 +0000493 public void testLayers() throws QueryException {
Joachim Bingelcd9ed332013-12-09 21:01:35 +0000494 // [base=Mann]
495 String layer1 = "{@type=korap:token, @value={@type=korap:term, @value=tt/base:Mann, relation==}}";
496 assertTrue(equalsQueryContent(layer1, "[tt/base=Mann]"));
Joachim Bingel53333e62013-12-09 19:25:52 +0000497
498 }
Joachim Bingel16da4e12013-12-17 09:48:12 +0000499
500 @Test
501 public void testAlign() {
502 // [orth=der]^[orth=Mann]
503 String align1 =
Joachim Bingel03882702013-12-31 19:53:05 +0000504 "{@type=korap:sequence, operands=[" +
Joachim Bingel16da4e12013-12-17 09:48:12 +0000505 "{@type=korap:token, @value={@type=korap:term, @value=orth:der, relation==}}," +
Joachim Bingel03882702013-12-31 19:53:05 +0000506 "{@type=korap:group, relation=left-align, operands=[" +
507 "{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}" +
508 "]}" +
Joachim Bingel16da4e12013-12-17 09:48:12 +0000509 "]}";
510 ppt = new PoliqarpPlusTree("[orth=der]^[orth=Mann]");
511 map = ppt.getRequestMap().get("query").toString();
512 assertEquals(align1.replaceAll(" ", ""), map.replaceAll(" ", ""));
513
514 // "([base=a]^[base=b])|[base=c]",
515 String align2 =
516 "{@type=korap:group, relation=or, operands=[" +
Joachim Bingel03882702013-12-31 19:53:05 +0000517 "{@type=korap:sequence, operands=[" +
Joachim Bingel16da4e12013-12-17 09:48:12 +0000518 "{@type=korap:token, @value={@type=korap:term, @value=base:a, relation==}}," +
Joachim Bingel03882702013-12-31 19:53:05 +0000519 "{@type=korap:group, relation=left-align, operands=[" +
520 "{@type=korap:token, @value={@type=korap:term, @value=base:b, relation==}}" +
521 "]}" +
Joachim Bingel16da4e12013-12-17 09:48:12 +0000522 "]}," +
523 "{@type=korap:token, @value={@type=korap:term, @value=base:c, relation==}}" +
524 "]}";
525 ppt = new PoliqarpPlusTree("([base=a]^[base=b])|[base=c]");
526 map = ppt.getRequestMap().get("query").toString();
527 assertEquals(align2.replaceAll(" ", ""), map.replaceAll(" ", ""));
Joachim Bingela67e6a32014-01-02 18:35:24 +0000528
529 // "([base=a]^[base=b][base=c])|[base=d]",
530 String align3 =
531 "{@type=korap:group, relation=or, operands=[" +
532 "{@type=korap:sequence, operands=[" +
533 "{@type=korap:token, @value={@type=korap:term, @value=base:a, relation==}}," +
534 "{@type=korap:group, relation=left-align, operands=[" +
535 "{@type=korap:token, @value={@type=korap:term, @value=base:b, relation==}}" +
536 "]}," +
537 "{@type=korap:token, @value={@type=korap:term, @value=base:c, relation==}}" +
538 "]}," +
539 "{@type=korap:token, @value={@type=korap:term, @value=base:d, relation==}}" +
540 "]}";
541 ppt = new PoliqarpPlusTree("([base=a]^[base=b][base=c])|[base=d]");
542 map = ppt.getRequestMap().get("query").toString();
543 assertEquals(align3.replaceAll(" ", ""), map.replaceAll(" ", ""));
544
545 // "([base=a]^[base=b]^[base=c])|[base=d]",
546 String align4 =
547 "{@type=korap:group, relation=or, operands=[" +
548 "{@type=korap:sequence, operands=[" +
549 "{@type=korap:token, @value={@type=korap:term, @value=base:a, relation==}}," +
550 "{@type=korap:group, relation=left-align, operands=[" +
551 "{@type=korap:token, @value={@type=korap:term, @value=base:b, relation==}}" +
552 "]}," +
553 "{@type=korap:group, relation=left-align, operands=[" +
554 "{@type=korap:token, @value={@type=korap:term, @value=base:c, relation==}}" +
555 "]}" +
556 "]}," +
557 "{@type=korap:token, @value={@type=korap:term, @value=base:d, relation==}}" +
558 "]}";
559 ppt = new PoliqarpPlusTree("([base=a]^[base=b]^[base=c])|[base=d]");
560 map = ppt.getRequestMap().get("query").toString();
561 assertEquals(align4.replaceAll(" ", ""), map.replaceAll(" ", ""));
562
563
Joachim Bingel16da4e12013-12-17 09:48:12 +0000564 }
565
566 @Test
567 public void testSimpleQueries() {
Joachim Bingela67e6a32014-01-02 18:35:24 +0000568 // Baum
569 String simple1 =
570 "{@type=korap:token, @value={@type=korap:term, @value=orth:Baum, relation==}}";
571 ppt = new PoliqarpPlusTree("Baum");
572 map = ppt.getRequestMap().get("query").toString();
573 assertEquals(simple1.replaceAll(" ", ""), map.replaceAll(" ", ""));
Joachim Bingel16da4e12013-12-17 09:48:12 +0000574
Joachim Bingela67e6a32014-01-02 18:35:24 +0000575 // Der Baum
576 String simple2 =
577 "{@type=korap:sequence, operands=[" +
578 "{@type=korap:token, @value={@type=korap:term, @value=orth:Der, relation==}}, " +
579 "{@type=korap:token, @value={@type=korap:term, @value=orth:Baum, relation==}}" +
580 "]}";
581 ppt = new PoliqarpPlusTree("Der Baum");
582 map = ppt.getRequestMap().get("query").toString();
583 assertEquals(simple2.replaceAll(" ", ""), map.replaceAll(" ", ""));
584
585 // Der große Baum
586 String simple3 =
587 "{@type=korap:sequence, operands=[" +
588 "{@type=korap:token, @value={@type=korap:term, @value=orth:Der, relation==}}, " +
589 "{@type=korap:token, @value={@type=korap:term, @value=orth:große, relation==}}, " +
590 "{@type=korap:token, @value={@type=korap:term, @value=orth:Baum, relation==}}" +
591 "]}";
592 ppt = new PoliqarpPlusTree("Der große Baum");
593 map = ppt.getRequestMap().get("query").toString();
594 assertEquals(simple3.replaceAll(" ", ""), map.replaceAll(" ", ""));
595
596 // Baum | Stein
597 String simple4 =
598 "{@type=korap:group, relation=or, operands=[" +
599 "{@type=korap:token, @value={@type=korap:term, @value=orth:Baum, relation==}}, " +
600 "{@type=korap:token, @value={@type=korap:term, @value=orth:Stein, relation==}}" +
601 "]}";
602 ppt = new PoliqarpPlusTree("Baum | Stein");
603 map = ppt.getRequestMap().get("query").toString();
604 assertEquals(simple4.replaceAll(" ", ""), map.replaceAll(" ", ""));
Joachim Bingel16da4e12013-12-17 09:48:12 +0000605 }
Joachim Bingel53333e62013-12-09 19:25:52 +0000606}
607