blob: d0e952c16e56ef5f6eaff97d0916c166b73fcf17 [file] [log] [blame]
Nils Diewald8db8f922014-10-24 17:43:13 +00001package de.ids_mannheim.korap.query;
2
Akrond6f5f592018-06-19 15:58:16 +02003import static de.ids_mannheim.korap.TestSimple.*;
Eliza Margaretha369e7562015-02-09 17:36:24 +00004import static org.junit.Assert.assertEquals;
5import static org.junit.Assert.assertTrue;
6import static org.junit.Assert.fail;
Nils Diewald8db8f922014-10-24 17:43:13 +00007
Eliza Margaretha369e7562015-02-09 17:36:24 +00008import org.apache.lucene.search.spans.SpanQuery;
9import org.junit.Test;
10import org.junit.runner.RunWith;
11import org.junit.runners.JUnit4;
Nils Diewald8db8f922014-10-24 17:43:13 +000012
13import de.ids_mannheim.korap.query.wrap.SpanQueryWrapper;
14import de.ids_mannheim.korap.util.QueryException;
15
Nils Diewald0cc4f2e2015-01-30 20:13:08 +000016/**
17 * @author diewald
18 */
19
Nils Diewald8db8f922014-10-24 17:43:13 +000020@RunWith(JUnit4.class)
21public class TestSpanSequenceQueryJSON {
22
23 static String path = "/queries/sequence/";
24
Nils Diewaldbb33da22015-03-04 16:24:25 +000025
Nils Diewald8db8f922014-10-24 17:43:13 +000026 // Test Extensions
27
28 @Test
29 public void queryJSONseqEmpty () throws QueryException {
Nils Diewald5c375702015-02-09 20:58:24 +000030 SpanQueryWrapper sqwi = jsonQueryFile("empty.jsonld");
Nils Diewald8db8f922014-10-24 17:43:13 +000031
Nils Diewald5c375702015-02-09 20:58:24 +000032 // []
33 assertTrue(sqwi.isEmpty());
Nils Diewald8db8f922014-10-24 17:43:13 +000034 };
35
Nils Diewaldbb33da22015-03-04 16:24:25 +000036
Nils Diewald8db8f922014-10-24 17:43:13 +000037 @Test
38 public void queryJSONseqEmptyEnd () throws QueryException {
Nils Diewald5c375702015-02-09 20:58:24 +000039 SpanQueryWrapper sqwi = jsonQueryFile("empty-last.jsonld");
Eliza Margaretha6f989202016-10-14 21:48:29 +020040 assertEquals(sqwi.toQuery().toString(),
Akrona7b936d2016-03-04 13:40:54 +010041 "focus(254: spanContain(<tokens:base/s:t />, {254: spanExpansion(tokens:s:der, []{1, 1}, right)}))");
Nils Diewald8db8f922014-10-24 17:43:13 +000042 };
43
Nils Diewaldbb33da22015-03-04 16:24:25 +000044
Nils Diewald8db8f922014-10-24 17:43:13 +000045 @Test
46 public void queryJSONseqEmptyEndClass () throws QueryException {
Nils Diewald5c375702015-02-09 20:58:24 +000047 SpanQueryWrapper sqwi = jsonQueryFile("empty-last-class.jsonld");
48 // der{3:[]}
Eliza Margaretha6f989202016-10-14 21:48:29 +020049 assertEquals(sqwi.toQuery().toString(),
Akrona7b936d2016-03-04 13:40:54 +010050 "focus(254: spanContain(<tokens:base/s:t />, {254: spanExpansion(tokens:s:der, []{1, 1}, right, class:3)}))");
Nils Diewald8db8f922014-10-24 17:43:13 +000051 };
52
Nils Diewaldbb33da22015-03-04 16:24:25 +000053
Nils Diewald8db8f922014-10-24 17:43:13 +000054 @Test
55 public void queryJSONseqEmptyEndRepetition () throws QueryException {
Nils Diewald5c375702015-02-09 20:58:24 +000056 SpanQueryWrapper sqwi = jsonQueryFile("empty-last-repetition.jsonld");
57 // der[]{3,5}
Eliza Margaretha6f989202016-10-14 21:48:29 +020058 assertEquals(sqwi.toQuery().toString(),
Akrona7b936d2016-03-04 13:40:54 +010059 "focus(254: spanContain(<tokens:base/s:t />, {254: spanExpansion(tokens:s:der, []{3, 5}, right)}))");
Nils Diewald8db8f922014-10-24 17:43:13 +000060 };
61
Nils Diewaldbb33da22015-03-04 16:24:25 +000062
Nils Diewald8db8f922014-10-24 17:43:13 +000063 @Test
64 public void queryJSONseqEmptyStart () throws QueryException {
Nils Diewald5c375702015-02-09 20:58:24 +000065 SpanQueryWrapper sqwi = jsonQueryFile("empty-first.jsonld");
66 // [][tt/p=NN]
Nils Diewaldbb33da22015-03-04 16:24:25 +000067 assertEquals(sqwi.toQuery().toString(),
68 "spanExpansion(tokens:tt/p:NN, []{1, 1}, left)");
Nils Diewald8db8f922014-10-24 17:43:13 +000069 };
70
Nils Diewaldbb33da22015-03-04 16:24:25 +000071
Nils Diewald8db8f922014-10-24 17:43:13 +000072 @Test
73 public void queryJSONseqEmptyStartClass () throws QueryException {
Nils Diewald5c375702015-02-09 20:58:24 +000074 SpanQueryWrapper sqwi = jsonQueryFile("empty-first-class.jsonld");
75 // {2:[]}[tt/p=NN]
Nils Diewaldbb33da22015-03-04 16:24:25 +000076 assertEquals(sqwi.toQuery().toString(),
77 "spanExpansion(tokens:tt/p:NN, []{1, 1}, left, class:2)");
Nils Diewald8db8f922014-10-24 17:43:13 +000078 };
79
Nils Diewaldbb33da22015-03-04 16:24:25 +000080
Nils Diewald8db8f922014-10-24 17:43:13 +000081 @Test
82 public void queryJSONseqEmptyStartRepetition () throws QueryException {
Nils Diewald5c375702015-02-09 20:58:24 +000083 SpanQueryWrapper sqwi = jsonQueryFile("empty-first-repetition.jsonld");
84 // []{2,7}[tt/p=NN]
Nils Diewaldbb33da22015-03-04 16:24:25 +000085 assertEquals(sqwi.toQuery().toString(),
86 "spanExpansion(tokens:tt/p:NN, []{2, 7}, left)");
Nils Diewald8db8f922014-10-24 17:43:13 +000087 };
88
Nils Diewaldbb33da22015-03-04 16:24:25 +000089
Nils Diewald8db8f922014-10-24 17:43:13 +000090 @Test
91 public void queryJSONseqEmptyStartRepetition2 () throws QueryException {
Eliza Margaretha6f989202016-10-14 21:48:29 +020092 SpanQueryWrapper sqwi = jsonQueryFile(
93 "empty-first-repetition-2.jsonld");
Nils Diewald5c375702015-02-09 20:58:24 +000094 // []{0,0}[tt/p=NN]
95 assertEquals(sqwi.toQuery().toString(), "tokens:tt/p:NN");
Nils Diewald8db8f922014-10-24 17:43:13 +000096 };
97
Nils Diewaldbb33da22015-03-04 16:24:25 +000098
Nils Diewald8db8f922014-10-24 17:43:13 +000099 @Test
100 public void queryJSONseqEmptyMiddle () throws QueryException {
Nils Diewald5c375702015-02-09 20:58:24 +0000101 SpanQueryWrapper sqwi = jsonQueryFile("empty-middle.jsonld");
102 // der[][tt/p=NN]
Nils Diewaldbb33da22015-03-04 16:24:25 +0000103 assertEquals(sqwi.toQuery().toString(),
104 "spanNext(tokens:s:der, spanExpansion(tokens:tt/p:NN, []{1, 1}, left))");
Nils Diewald8db8f922014-10-24 17:43:13 +0000105 };
106
Nils Diewaldbb33da22015-03-04 16:24:25 +0000107
Nils Diewald8db8f922014-10-24 17:43:13 +0000108 @Test
109 public void queryJSONseqEmptyMiddleClass () throws QueryException {
Nils Diewald5c375702015-02-09 20:58:24 +0000110 SpanQueryWrapper sqwi = jsonQueryFile("empty-middle-class.jsonld");
111 // der{1:[]}[tt/p=NN]
Eliza Margaretha6f989202016-10-14 21:48:29 +0200112 assertEquals(sqwi.toQuery().toString(),
Nils Diewaldbb33da22015-03-04 16:24:25 +0000113 "spanNext(tokens:s:der, spanExpansion(tokens:tt/p:NN, []{1, 1}, left, class:1))");
Nils Diewald8db8f922014-10-24 17:43:13 +0000114 };
115
Nils Diewaldbb33da22015-03-04 16:24:25 +0000116
Nils Diewald8db8f922014-10-24 17:43:13 +0000117 @Test
118 public void queryJSONseqEmptyMiddleRepetition () throws QueryException {
Nils Diewald5c375702015-02-09 20:58:24 +0000119 SpanQueryWrapper sqwi = jsonQueryFile("empty-middle-repetition.jsonld");
120 // der[]{4,8}[tt/p=NN]
Nils Diewaldbb33da22015-03-04 16:24:25 +0000121 assertEquals(sqwi.toQuery().toString(),
122 "spanNext(tokens:s:der, spanExpansion(tokens:tt/p:NN, []{4, 8}, left))");
Nils Diewald8db8f922014-10-24 17:43:13 +0000123 };
124
Nils Diewaldbb33da22015-03-04 16:24:25 +0000125
Nils Diewald8db8f922014-10-24 17:43:13 +0000126 @Test
127 public void queryJSONseqEmptySurround () throws QueryException {
Nils Diewald5c375702015-02-09 20:58:24 +0000128 SpanQueryWrapper sqwi = jsonQueryFile("empty-surround.jsonld");
129 // [][tt/p=NN][]
Eliza Margaretha6f989202016-10-14 21:48:29 +0200130 assertEquals(sqwi.toQuery().toString(),
Akrona7b936d2016-03-04 13:40:54 +0100131 "focus(254: spanContain(<tokens:base/s:t />, {254: spanExpansion(spanExpansion(tokens:tt/p:NN, []{1, 1}, left), []{1, 1}, right)}))");
Nils Diewald8db8f922014-10-24 17:43:13 +0000132 };
133
Nils Diewaldbb33da22015-03-04 16:24:25 +0000134
Nils Diewald8db8f922014-10-24 17:43:13 +0000135 @Test
136 public void queryJSONseqEmptySurroundClass () throws QueryException {
Nils Diewald5c375702015-02-09 20:58:24 +0000137 SpanQueryWrapper sqwi = jsonQueryFile("empty-surround-class.jsonld");
138 // [][tt/p=NN]{2:[]}
Eliza Margaretha6f989202016-10-14 21:48:29 +0200139 assertEquals(sqwi.toQuery().toString(),
Akrona7b936d2016-03-04 13:40:54 +0100140 "focus(254: spanContain(<tokens:base/s:t />, {254: spanExpansion(spanExpansion(tokens:tt/p:NN, []{1, 1}, left), []{1, 1}, right, class:2)}))");
Nils Diewald8db8f922014-10-24 17:43:13 +0000141 };
142
Nils Diewaldbb33da22015-03-04 16:24:25 +0000143
Nils Diewald8db8f922014-10-24 17:43:13 +0000144 @Test
145 public void queryJSONseqEmptySurroundClass2 () throws QueryException {
Nils Diewald5c375702015-02-09 20:58:24 +0000146 SpanQueryWrapper sqwi = jsonQueryFile("empty-surround-class-2.jsonld");
147 // {3:[]}[tt/p=NN]{2:[]}
Eliza Margaretha6f989202016-10-14 21:48:29 +0200148 assertEquals(sqwi.toQuery().toString(),
Akrona7b936d2016-03-04 13:40:54 +0100149 "focus(254: spanContain(<tokens:base/s:t />, {254: spanExpansion(spanExpansion(tokens:tt/p:NN, []{1, 1}, left, class:3), []{1, 1}, right, class:2)}))");
Nils Diewald8db8f922014-10-24 17:43:13 +0000150 };
151
Nils Diewaldbb33da22015-03-04 16:24:25 +0000152
Nils Diewald8db8f922014-10-24 17:43:13 +0000153 @Test
154 public void queryJSONseqEmptySurroundRepetition () throws QueryException {
Eliza Margaretha6f989202016-10-14 21:48:29 +0200155 SpanQueryWrapper sqwi = jsonQueryFile(
156 "empty-surround-repetition.jsonld");
Nils Diewald5c375702015-02-09 20:58:24 +0000157 // [][tt/p=NN][]{2,7}
Eliza Margaretha6f989202016-10-14 21:48:29 +0200158 assertEquals(sqwi.toQuery().toString(),
Akrona7b936d2016-03-04 13:40:54 +0100159 "focus(254: spanContain(<tokens:base/s:t />, {254: spanExpansion(spanExpansion(tokens:tt/p:NN, []{1, 1}, left), []{2, 7}, right)}))");
Nils Diewald8db8f922014-10-24 17:43:13 +0000160 };
161
Nils Diewaldbb33da22015-03-04 16:24:25 +0000162
Nils Diewald8db8f922014-10-24 17:43:13 +0000163 @Test
164 public void queryJSONseqEmptySurroundRepetition2 () throws QueryException {
Eliza Margaretha6f989202016-10-14 21:48:29 +0200165 SpanQueryWrapper sqwi = jsonQueryFile(
166 "empty-surround-repetition-2.jsonld");
Nils Diewald5c375702015-02-09 20:58:24 +0000167 // []{3,5}[tt/p=NN][]{2,7}
Eliza Margaretha6f989202016-10-14 21:48:29 +0200168 assertEquals(sqwi.toQuery().toString(),
Akrona7b936d2016-03-04 13:40:54 +0100169 "focus(254: spanContain(<tokens:base/s:t />, {254: spanExpansion(spanExpansion(tokens:tt/p:NN, []{3, 5}, left), []{2, 7}, right)}))");
Nils Diewald8db8f922014-10-24 17:43:13 +0000170 };
171
Nils Diewaldbb33da22015-03-04 16:24:25 +0000172
Nils Diewald8db8f922014-10-24 17:43:13 +0000173 @Test
Nils Diewaldbb33da22015-03-04 16:24:25 +0000174 public void queryJSONseqEmptySurroundRepetitionClass ()
175 throws QueryException {
Eliza Margaretha6f989202016-10-14 21:48:29 +0200176 SpanQueryWrapper sqwi = jsonQueryFile(
177 "empty-surround-repetition-class.jsonld");
Nils Diewald5c375702015-02-09 20:58:24 +0000178 // {1:[]}{3,8}[tt/p=NN]{2:[]{2,7}}
179 // Ist gleichbedeutend mit
180 // {1:[]{3,8}}[tt/p=NN]{2:[]}{2,7}
Eliza Margaretha6f989202016-10-14 21:48:29 +0200181 assertEquals(sqwi.toQuery().toString(),
Akrona7b936d2016-03-04 13:40:54 +0100182 "focus(254: spanContain(<tokens:base/s:t />, {254: spanExpansion(spanExpansion(tokens:tt/p:NN, []{3, 8}, left, class:1), []{2, 7}, right, class:2)}))");
Nils Diewald8db8f922014-10-24 17:43:13 +0000183 };
184
Nils Diewaldbb33da22015-03-04 16:24:25 +0000185
Nils Diewald8db8f922014-10-24 17:43:13 +0000186 @Test
187 public void queryJSONseqNegative () throws QueryException {
Nils Diewald5c375702015-02-09 20:58:24 +0000188 SpanQueryWrapper sqwi = jsonQueryFile("negative.jsonld");
189 // [tt/p!=NN]
190 assertTrue(sqwi.isNegative());
Nils Diewald8db8f922014-10-24 17:43:13 +0000191 };
192
Nils Diewaldbb33da22015-03-04 16:24:25 +0000193
Nils Diewald8db8f922014-10-24 17:43:13 +0000194 @Test
195 public void queryJSONseqNegativeStart () throws QueryException {
Nils Diewald5c375702015-02-09 20:58:24 +0000196 SpanQueryWrapper sqwi = jsonQueryFile("negative-first.jsonld");
197 // [tt/p!=NN][tt/p=NN]
Nils Diewaldbb33da22015-03-04 16:24:25 +0000198 assertEquals(sqwi.toQuery().toString(),
199 "spanExpansion(tokens:tt/p:NN, !tokens:tt/p:NN{1, 1}, left)");
Nils Diewald8db8f922014-10-24 17:43:13 +0000200 };
201
Nils Diewaldbb33da22015-03-04 16:24:25 +0000202
Nils Diewald8db8f922014-10-24 17:43:13 +0000203 @Test
204 public void queryJSONseqNegativeEnd () throws QueryException {
Nils Diewald5c375702015-02-09 20:58:24 +0000205 SpanQueryWrapper sqwi = jsonQueryFile("negative-last.jsonld");
206 // [tt/p=NN][tt/p!=NN]
Eliza Margaretha6f989202016-10-14 21:48:29 +0200207 assertEquals(sqwi.toQuery().toString(),
Akrona7b936d2016-03-04 13:40:54 +0100208 "focus(254: spanContain(<tokens:base/s:t />, {254: spanExpansion(tokens:tt/p:NN, !tokens:tt/p:NN{1, 1}, right)}))");
Nils Diewald8db8f922014-10-24 17:43:13 +0000209 };
210
Nils Diewaldbb33da22015-03-04 16:24:25 +0000211
Akrone54600f2018-01-04 20:10:31 +0100212 @Test
213 public void queryJSONseqNegativeRegexEnd () throws QueryException {
214 SpanQueryWrapper sqwi = jsonQueryFile("negative-regex.jsonld");
215 // [tt/p=NN][tt/p!="NN"]
216 assertEquals(
217 "focus(254: spanContain(<tokens:base/s:t />, {254: spanExpansion(tokens:tt/p:NN, !SpanMultiTermQueryWrapper(tokens:/opennlp/p:NN/){1, 1}, right)}))",
218 sqwi.toQuery().toString()
219 );
220 };
221
222
Nils Diewald8db8f922014-10-24 17:43:13 +0000223 @Test
224 public void queryJSONseqNegativeStartRepetition () throws QueryException {
Eliza Margaretha6f989202016-10-14 21:48:29 +0200225 SpanQueryWrapper sqwi = jsonQueryFile(
226 "negative-first-repetition.jsonld");
Nils Diewald5c375702015-02-09 20:58:24 +0000227 // [tt/p!=NN]{4,5}[tt/p=NN]
Nils Diewaldbb33da22015-03-04 16:24:25 +0000228 assertEquals(sqwi.toQuery().toString(),
229 "spanExpansion(tokens:tt/p:NN, !tokens:tt/p:NN{4, 5}, left)");
Nils Diewald8db8f922014-10-24 17:43:13 +0000230 };
231
Nils Diewaldbb33da22015-03-04 16:24:25 +0000232
Nils Diewald8db8f922014-10-24 17:43:13 +0000233 @Test
234 public void queryJSONseqNegativeStartRepetition2 () throws QueryException {
Eliza Margaretha6f989202016-10-14 21:48:29 +0200235 SpanQueryWrapper sqwi = jsonQueryFile(
236 "negative-first-repetition-2.jsonld");
Nils Diewald5c375702015-02-09 20:58:24 +0000237 // [tt/p!=NN]{0,5}[tt/p=NN]
Nils Diewaldbb33da22015-03-04 16:24:25 +0000238 assertEquals(sqwi.toQuery().toString(),
239 "spanExpansion(tokens:tt/p:NN, !tokens:tt/p:NN{0, 5}, left)");
Nils Diewald8db8f922014-10-24 17:43:13 +0000240 };
241
Nils Diewaldbb33da22015-03-04 16:24:25 +0000242
Nils Diewald8db8f922014-10-24 17:43:13 +0000243 @Test
244 public void queryJSONseqNegativeStartRepetition3 () throws QueryException {
Eliza Margaretha6f989202016-10-14 21:48:29 +0200245 SpanQueryWrapper sqwi = jsonQueryFile(
246 "negative-first-repetition-3.jsonld");
Nils Diewald5c375702015-02-09 20:58:24 +0000247 // [tt/p!=NN]{0,0}[tt/p=NN]
248 assertEquals(sqwi.toQuery().toString(), "tokens:tt/p:NN");
Nils Diewald8db8f922014-10-24 17:43:13 +0000249 };
250
Nils Diewaldbb33da22015-03-04 16:24:25 +0000251
Nils Diewald8db8f922014-10-24 17:43:13 +0000252 @Test
253 public void queryJSONseqNegativeEndClass () throws QueryException {
Nils Diewald5c375702015-02-09 20:58:24 +0000254 SpanQueryWrapper sqwi = jsonQueryFile("negative-last-class.jsonld");
255 // [tt/p=NN]{2:[tt/p!=NN]}
256 SpanQuery sq = sqwi.toQuery();
Eliza Margaretha6f989202016-10-14 21:48:29 +0200257 assertEquals(sq.toString(),
Akrona7b936d2016-03-04 13:40:54 +0100258 "focus(254: spanContain(<tokens:base/s:t />, {254: spanExpansion(tokens:tt/p:NN, !tokens:tt/p:NN{1, 1}, right, class:2)}))");
Nils Diewald8db8f922014-10-24 17:43:13 +0000259 };
260
Nils Diewaldbb33da22015-03-04 16:24:25 +0000261
Nils Diewald8db8f922014-10-24 17:43:13 +0000262 @Test
Eliza Margaretha6f989202016-10-14 21:48:29 +0200263 public void queryJSONseqNegativeEndRepetitionClass ()
264 throws QueryException {
265 SpanQueryWrapper sqwi = jsonQueryFile(
266 "negative-last-class-repetition.jsonld");
Nils Diewald5c375702015-02-09 20:58:24 +0000267 // [tt/p=NN]{2:[tt/p!=NN]{4,5}}
Eliza Margaretha6f989202016-10-14 21:48:29 +0200268 assertEquals(sqwi.toQuery().toString(),
Akrona7b936d2016-03-04 13:40:54 +0100269 "focus(254: spanContain(<tokens:base/s:t />, {254: spanExpansion(tokens:tt/p:NN, !tokens:tt/p:NN{4, 5}, right, class:2)}))");
Nils Diewald8db8f922014-10-24 17:43:13 +0000270 };
271
Nils Diewaldbb33da22015-03-04 16:24:25 +0000272
Nils Diewald8db8f922014-10-24 17:43:13 +0000273 @Test
Nils Diewaldbb33da22015-03-04 16:24:25 +0000274 public void queryJSONseqNegativeEndRepetitionClass2 ()
275 throws QueryException {
Eliza Margaretha6f989202016-10-14 21:48:29 +0200276 SpanQueryWrapper sqwi = jsonQueryFile(
277 "negative-last-class-repetition-2.jsonld");
Nils Diewald5c375702015-02-09 20:58:24 +0000278 // [tt/p=NN]{2:[tt/p!=NN]}{4,5}
Eliza Margaretha6f989202016-10-14 21:48:29 +0200279 assertEquals(sqwi.toQuery().toString(),
Akrona7b936d2016-03-04 13:40:54 +0100280 "focus(254: spanContain(<tokens:base/s:t />, {254: spanExpansion(tokens:tt/p:NN, !tokens:tt/p:NN{4, 5}, right, class:2)}))");
Nils Diewald8db8f922014-10-24 17:43:13 +0000281 };
282
Nils Diewaldbb33da22015-03-04 16:24:25 +0000283
Nils Diewald8db8f922014-10-24 17:43:13 +0000284 @Test
margaretha7d89c052017-05-10 19:11:45 +0200285 public void queryJSONseqNegativelastConstraint () throws QueryException {
Eliza Margaretha6f989202016-10-14 21:48:29 +0200286 SpanQueryWrapper sqwi = jsonQueryFile(
287 "negative-last-constraint.jsonld");
Nils Diewald5c375702015-02-09 20:58:24 +0000288 try {
289 sqwi.toQuery().toString();
290 fail("Should throw an exception");
291 }
292 catch (QueryException qe) {
Nils Diewaldbb33da22015-03-04 16:24:25 +0000293 assertEquals(
Akronf9def5e2016-10-10 21:26:46 +0200294 "Distance constraints not supported with empty, optional or negative operands",
Nils Diewaldbb33da22015-03-04 16:24:25 +0000295 qe.getMessage());
Nils Diewald5c375702015-02-09 20:58:24 +0000296 };
Nils Diewald8db8f922014-10-24 17:43:13 +0000297 };
298
Nils Diewaldbb33da22015-03-04 16:24:25 +0000299
Nils Diewald8db8f922014-10-24 17:43:13 +0000300 @Test
301 public void queryJSONseqNegativeEndSequence () throws QueryException {
Nils Diewald5c375702015-02-09 20:58:24 +0000302 SpanQueryWrapper sqwi = jsonQueryFile("negative-last-sequence.jsonld");
303 // [tt/p=NN]([tt/p!=DET][tt/p!=NN])
Nils Diewaldbb33da22015-03-04 16:24:25 +0000304 assertEquals(
Akrona7b936d2016-03-04 13:40:54 +0100305 "focus(254: spanContain(<tokens:base/s:t />, {254: spanExpansion(spanExpansion(tokens:tt/p:NN, !tokens:tt/p:DET{1, 1}, right), !tokens:tt/p:ADJ{1, 1}, right)}))",
Nils Diewaldbb33da22015-03-04 16:24:25 +0000306 sqwi.toQuery().toString());
Nils Diewald8db8f922014-10-24 17:43:13 +0000307 };
308
Nils Diewaldb84e7272014-11-07 01:27:38 +0000309
Nils Diewald8db8f922014-10-24 17:43:13 +0000310 @Test
311 public void queryJSONseqNegativeEndSequence2 () throws QueryException {
Eliza Margaretha6f989202016-10-14 21:48:29 +0200312 SpanQueryWrapper sqwi = jsonQueryFile(
313 "negative-last-sequence-2.jsonld");
Nils Diewald5c375702015-02-09 20:58:24 +0000314 // [tt/p!=NN]([tt/p!=DET][tt/p=NN])
Nils Diewald8db8f922014-10-24 17:43:13 +0000315
Nils Diewald5c375702015-02-09 20:58:24 +0000316 // spanNext(tokens:tt/p:NN,
Nils Diewaldbb33da22015-03-04 16:24:25 +0000317 assertEquals(
318 "spanExpansion(spanExpansion(tokens:tt/p:ADJ, !tokens:tt/p:DET{1, 1}, left), !tokens:tt/p:NN{1, 1}, left)",
319 sqwi.toQuery().toString());
Nils Diewald8db8f922014-10-24 17:43:13 +0000320 };
321
Nils Diewaldbb33da22015-03-04 16:24:25 +0000322
Nils Diewaldb84e7272014-11-07 01:27:38 +0000323 @Test
324 public void queryJSONseqMultipleDistances () throws QueryException {
Akron4d5fe192016-02-16 00:22:14 +0100325 SpanQueryWrapper sqwi = jsonQueryFile("distance-multiple.jsonld");
Nils Diewald5c375702015-02-09 20:58:24 +0000326 // er []{,10} kann []{1,10} sagte
Nils Diewaldb84e7272014-11-07 01:27:38 +0000327
Nils Diewaldbb33da22015-03-04 16:24:25 +0000328 assertEquals(
329 "spanDistance(tokens:s:er, spanDistance(tokens:s:kann, tokens:s:sagte, [(w[2:11], ordered, notExcluded)]), [(w[1:11], ordered, notExcluded)])",
330 sqwi.toQuery().toString());
Nils Diewaldb84e7272014-11-07 01:27:38 +0000331 };
Nils Diewald8db8f922014-10-24 17:43:13 +0000332
Akron13db6152016-02-19 14:08:38 +0100333
Akron4d5fe192016-02-16 00:22:14 +0100334 @Test
335 public void queryJSONseqSentenceDistance () throws QueryException {
336 SpanQueryWrapper sqwi = jsonQueryFile("distance-sentence.jsonld");
337
Akron13db6152016-02-19 14:08:38 +0100338 assertEquals(
339 "spanElementDistance({129: tokens:s:der}, {129: tokens:s:Baum}, [(base/s:s[0:0], notOrdered, notExcluded)])",
340 sqwi.toQuery().toString());
Akron4d5fe192016-02-16 00:22:14 +0100341 };
342
Akron13db6152016-02-19 14:08:38 +0100343
Akron4d5fe192016-02-16 00:22:14 +0100344 @Test
345 public void queryJSONseqSentenceDistanceExcluded () throws QueryException {
Eliza Margaretha6f989202016-10-14 21:48:29 +0200346 SpanQueryWrapper sqwi = jsonQueryFile(
347 "distance-sentence-excluded.jsonld");
Akron4d5fe192016-02-16 00:22:14 +0100348
Akron13db6152016-02-19 14:08:38 +0100349 assertEquals(
350 "spanElementDistance({129: tokens:s:der}, {129: tokens:s:Baum}, [(base/s:s[0:0], notOrdered, excluded)])",
351 sqwi.toQuery().toString());
Akron4d5fe192016-02-16 00:22:14 +0100352 };
353
Nils Diewald8db8f922014-10-24 17:43:13 +0000354
Akron4e2bc0e2016-02-17 12:23:46 +0100355 @Test
356 public void queryJSONkoralSimpleDistanceBug () throws QueryException {
357 SpanQueryWrapper sqwi = jsonQueryFile("distance-simple.jsonld");
358
Akron13db6152016-02-19 14:08:38 +0100359 assertEquals(
360 "spanDistance(tokens:s:der, tokens:s:Baum, [(w[2:2], ordered, notExcluded)])",
361 sqwi.toQuery().toString());
Akron4e2bc0e2016-02-17 12:23:46 +0100362 };
363
Akronf9def5e2016-10-10 21:26:46 +0200364
Akron07b727b2016-09-29 21:32:46 +0200365 @Test
Akronf9def5e2016-10-10 21:26:46 +0200366 public void queryJSONkoralOptionalityInDistanceBug () {
367 try {
368 // Sonne [] Mond?
Eliza Margaretha6f989202016-10-14 21:48:29 +0200369 SpanQueryWrapper sqwi = jsonQueryFile(
370 "distance-with-optionality.jsonld");
Akronf9def5e2016-10-10 21:26:46 +0200371 sqwi.toQuery().toString();
372 }
373 catch (QueryException qe) {
374 assertEquals(
375 "Distance constraints not supported with empty, optional or negative operands",
376 qe.getMessage());
377 }
378 // Could also be a distance at the end ... that's a query planner thing.
Akron07b727b2016-09-29 21:32:46 +0200379 };
380
Akronf9def5e2016-10-10 21:26:46 +0200381
382 @Test
Eliza Margaretha6f989202016-10-14 21:48:29 +0200383 public void queryJSONkoralOptionalityAfterEmptyBug ()
384 throws QueryException {
Akronf9def5e2016-10-10 21:26:46 +0200385 // Sonne [] Mond?
Eliza Margaretha6f989202016-10-14 21:48:29 +0200386 SpanQueryWrapper sqwi = jsonQueryFile(
387 "empty-followed-by-optionality.jsonld");
Akron07b727b2016-09-29 21:32:46 +0200388 assertEquals(
Eliza Margaretha6f989202016-10-14 21:48:29 +0200389 "focus(254: spanContain(<tokens:base/s:t />, {254: spanOr([spanExpansion(tokens:s:Sonne, []{1, 1}, right), spanNext(spanExpansion(tokens:s:Sonne, []{1, 1}, right), tokens:s:Mond)])}))",
390 sqwi.toQuery().toString());
Akronf9def5e2016-10-10 21:26:46 +0200391 // Could also be a distance at the end ... that's a query planner thing.
Akron07b727b2016-09-29 21:32:46 +0200392 };
393
Akronf9def5e2016-10-10 21:26:46 +0200394
Akron3fd7ffe2017-05-22 20:57:49 +0200395 @Test
396 public void queryJSONseqEmptyNegativeOptionalClass () throws QueryException {
397 SpanQueryWrapper sqwi = jsonQueryFile("empty-negative-optional.jsonld");
398 // der {[pos!=ADJA]*} Mann
399 assertEquals(sqwi.toQuery().toString(),"spanNext(tokens:s:der, spanExpansion(tokens:s:Mann, !tokens:tt/p:ADJA{0, 100}, left, class:1))");
400 };
401
Akron79fa75b2017-08-09 12:49:08 +0200402 @Test
403 public void queryJSONcosmas2Bug () throws QueryException {
404
Akrond6f5f592018-06-19 15:58:16 +0200405 SpanQueryWrapper sqwi = getJsonQuery(getClass().getResource("/queries/bugs/cosmas_wildcards.jsonld").getFile());
margarethaf14f3802017-08-30 16:34:01 +0200406 SpanQuery sq = sqwi.toQuery();
Akron79fa75b2017-08-09 12:49:08 +0200407 // meine* /+w1:2,s0 &Erfahrung
margarethaf14f3802017-08-30 16:34:01 +0200408 assertEquals(sq.toString(),"spanMultipleDistance({129: SpanMultiTermQueryWrapper(tokens:s:meine*)}, "+
margaretha9880aec2017-08-31 16:58:07 +0200409 "{129: tokens:tt/l:Erfahrung}, "+
Akron79fa75b2017-08-09 12:49:08 +0200410 "[(w[1:2], ordered, notExcluded), "+
411 "(base/s:s[0:0], ordered, notExcluded)])");
412 };
413
Akronb8676eb2021-03-08 10:57:30 +0100414
415 @Test
416 public void queryJSONdistanceMultipleOps () throws QueryException {
417
418 SpanQueryWrapper sqwi = getJsonQuery(getClass().getResource("/queries/sequence/distance-with-multiple-ops.jsonld").getFile());
419 SpanQuery sq = sqwi.toQuery();
420 assertEquals(sq.toString(),"spanDistance(spanDistance(tokens:s:der, tokens:s:alte, [(w[2:2], ordered, notExcluded)]), tokens:s:Baum, [(w[2:2], ordered, notExcluded)])");
421 };
422
423
Akron296fb4c2020-01-16 18:11:05 +0100424 @Test
425 public void queryJSONcosmas2Bug2 () throws QueryException {
Akron79fa75b2017-08-09 12:49:08 +0200426
Akron296fb4c2020-01-16 18:11:05 +0100427 SpanQueryWrapper sqwi = getJsonQuery(getClass().getResource("/queries/bugs/cosmas-exclude.jsonld").getFile());
428
429 SpanQuery sq = sqwi.toQuery();
430
431 // (Pop-up OR Pop-ups) %s0 (Internet OR Programm)
Akron163a04b2020-01-20 10:43:04 +0100432 assertEquals(sq.toString(),"spanElementDistance({129: spanOr([tokens:s:Blatt, tokens:s:Augen])}, {129: spanOr([tokens:s:Wald, tokens:s:Baum])}, [(base/s:s[0:0], notOrdered, excluded)])");
Akron296fb4c2020-01-16 18:11:05 +0100433 };
Akron79fa75b2017-08-09 12:49:08 +0200434
Akron4e2bc0e2016-02-17 12:23:46 +0100435
Nils Diewald8db8f922014-10-24 17:43:13 +0000436 // get query wrapper based on json file
margaretha7d89c052017-05-10 19:11:45 +0200437 public SpanQueryWrapper jsonQueryFile (String filename) throws QueryException {
Akrond6f5f592018-06-19 15:58:16 +0200438 return getJsonQuery(getClass().getResource(path + filename).getFile());
Nils Diewald8db8f922014-10-24 17:43:13 +0000439 };
440};