| Eliza Margaretha | 7788a98 | 2014-08-29 16:10:52 +0000 | [diff] [blame] | 1 | package de.ids_mannheim.korap.query; |
| 2 | |
| Nils Diewald | 6d50c1f | 2013-12-04 20:14:08 +0000 | [diff] [blame] | 3 | import java.util.*; |
| 4 | import java.io.*; |
| 5 | |
| 6 | import org.apache.lucene.search.spans.SpanQuery; |
| 7 | import de.ids_mannheim.korap.query.wrap.SpanQueryWrapperInterface; |
| 8 | |
| 9 | import de.ids_mannheim.korap.KorapQuery; |
| 10 | import de.ids_mannheim.korap.util.QueryException; |
| 11 | |
| 12 | import static org.junit.Assert.*; |
| 13 | import org.junit.Test; |
| 14 | import org.junit.Ignore; |
| 15 | import org.junit.runner.RunWith; |
| 16 | import org.junit.runners.JUnit4; |
| 17 | |
| 18 | @RunWith(JUnit4.class) |
| 19 | public class TestKorapQueryJSON { |
| 20 | |
| Nils Diewald | c6b7875 | 2013-12-05 19:05:12 +0000 | [diff] [blame] | 21 | private String defaultFoundry = "mate/"; |
| 22 | |
| Nils Diewald | 1455e1e | 2014-08-01 16:12:43 +0000 | [diff] [blame] | 23 | @Test |
| Nils Diewald | 6d50c1f | 2013-12-04 20:14:08 +0000 | [diff] [blame] | 24 | public void queryJSONBsp1 () { |
| Nils Diewald | c86aa48 | 2014-02-12 16:58:05 +0000 | [diff] [blame] | 25 | SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/bsp1.jsonld").getFile()); |
| Nils Diewald | 6d50c1f | 2013-12-04 20:14:08 +0000 | [diff] [blame] | 26 | |
| Nils Diewald | 1455e1e | 2014-08-01 16:12:43 +0000 | [diff] [blame] | 27 | // There is a repetition in here |
| Nils Diewald | 6d50c1f | 2013-12-04 20:14:08 +0000 | [diff] [blame] | 28 | // ([base=foo]|[base=bar])[base=foobar] |
| Nils Diewald | 1455e1e | 2014-08-01 16:12:43 +0000 | [diff] [blame] | 29 | assertEquals(sqwi.toQuery().toString(), |
| Eliza Margaretha | 7788a98 | 2014-08-29 16:10:52 +0000 | [diff] [blame] | 30 | "spanOr([tokens:base:foo, spanRepetition(spanNext(tokens:base:foo, tokens:base:bar){1,100})])"); |
| Nils Diewald | 1455e1e | 2014-08-01 16:12:43 +0000 | [diff] [blame] | 31 | assertTrue(sqwi.isOptional()); |
| Nils Diewald | 6d50c1f | 2013-12-04 20:14:08 +0000 | [diff] [blame] | 32 | }; |
| 33 | |
| 34 | @Test |
| 35 | public void queryJSONBsp1b () { |
| 36 | |
| Nils Diewald | c86aa48 | 2014-02-12 16:58:05 +0000 | [diff] [blame] | 37 | SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/bsp1b.jsonld").getFile()); |
| Nils Diewald | 6d50c1f | 2013-12-04 20:14:08 +0000 | [diff] [blame] | 38 | |
| 39 | // [base=foo]|([base=foo][base=bar]) meta author=Goethe&year=1815 |
| Nils Diewald | c6b7875 | 2013-12-05 19:05:12 +0000 | [diff] [blame] | 40 | assertEquals(sqwi.toQuery().toString(), "spanOr([tokens:"+defaultFoundry+"l:foo, spanNext(tokens:"+defaultFoundry+"l:foo, tokens:"+defaultFoundry+"l:bar)])"); |
| Nils Diewald | 6d50c1f | 2013-12-04 20:14:08 +0000 | [diff] [blame] | 41 | }; |
| 42 | |
| 43 | |
| 44 | @Test |
| 45 | public void queryJSONBsp2 () { |
| Nils Diewald | c86aa48 | 2014-02-12 16:58:05 +0000 | [diff] [blame] | 46 | SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/bsp2.jsonld").getFile()); |
| Nils Diewald | 6d50c1f | 2013-12-04 20:14:08 +0000 | [diff] [blame] | 47 | |
| 48 | // ([base=foo]|[base=bar])[base=foobar] |
| Nils Diewald | c6b7875 | 2013-12-05 19:05:12 +0000 | [diff] [blame] | 49 | assertEquals(sqwi.toQuery().toString(), "spanNext(spanOr([tokens:"+defaultFoundry+"l:foo, tokens:"+defaultFoundry+"l:bar]), tokens:"+defaultFoundry+"l:foobar)"); |
| Nils Diewald | 6d50c1f | 2013-12-04 20:14:08 +0000 | [diff] [blame] | 50 | }; |
| 51 | |
| 52 | @Test |
| 53 | public void queryJSONBsp3 () { |
| Nils Diewald | c86aa48 | 2014-02-12 16:58:05 +0000 | [diff] [blame] | 54 | SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/bsp3.jsonld").getFile()); |
| Nils Diewald | 6d50c1f | 2013-12-04 20:14:08 +0000 | [diff] [blame] | 55 | |
| 56 | // shrink({[base=Mann]}) |
| Nils Diewald | c6b7875 | 2013-12-05 19:05:12 +0000 | [diff] [blame] | 57 | assertEquals(sqwi.toQuery().toString(), "shrink(0: {0: tokens:"+defaultFoundry+"l:Mann})"); |
| Nils Diewald | 6d50c1f | 2013-12-04 20:14:08 +0000 | [diff] [blame] | 58 | }; |
| 59 | |
| 60 | @Test |
| 61 | public void queryJSONBsp4 () { |
| Nils Diewald | c86aa48 | 2014-02-12 16:58:05 +0000 | [diff] [blame] | 62 | SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/bsp4.jsonld").getFile()); |
| Nils Diewald | 6d50c1f | 2013-12-04 20:14:08 +0000 | [diff] [blame] | 63 | |
| 64 | // shrink({[base=foo]}[orth=bar]) |
| Nils Diewald | c6b7875 | 2013-12-05 19:05:12 +0000 | [diff] [blame] | 65 | assertEquals(sqwi.toQuery().toString(), "shrink(0: spanNext({0: tokens:"+defaultFoundry+"l:foo}, tokens:s:bar))"); |
| Nils Diewald | 6d50c1f | 2013-12-04 20:14:08 +0000 | [diff] [blame] | 66 | }; |
| 67 | |
| 68 | @Test |
| 69 | public void queryJSONBsp5 () { |
| Nils Diewald | c86aa48 | 2014-02-12 16:58:05 +0000 | [diff] [blame] | 70 | SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/bsp5.jsonld").getFile()); |
| Nils Diewald | 6d50c1f | 2013-12-04 20:14:08 +0000 | [diff] [blame] | 71 | |
| 72 | // shrink(1:[base=Der]{1:[base=Mann]}) |
| Nils Diewald | c6b7875 | 2013-12-05 19:05:12 +0000 | [diff] [blame] | 73 | assertEquals(sqwi.toQuery().toString(), "shrink(1: spanNext(tokens:"+defaultFoundry+"l:Der, {1: tokens:"+defaultFoundry+"l:Mann}))"); |
| Nils Diewald | 6d50c1f | 2013-12-04 20:14:08 +0000 | [diff] [blame] | 74 | }; |
| 75 | |
| 76 | @Test |
| 77 | public void queryJSONBsp6 () { |
| Nils Diewald | c86aa48 | 2014-02-12 16:58:05 +0000 | [diff] [blame] | 78 | SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/bsp6.jsonld").getFile()); |
| Nils Diewald | 6d50c1f | 2013-12-04 20:14:08 +0000 | [diff] [blame] | 79 | |
| 80 | // [base=katze] |
| Nils Diewald | c6b7875 | 2013-12-05 19:05:12 +0000 | [diff] [blame] | 81 | assertEquals(sqwi.toQuery().toString(), "tokens:"+defaultFoundry+"l:Katze"); |
| Nils Diewald | 6d50c1f | 2013-12-04 20:14:08 +0000 | [diff] [blame] | 82 | }; |
| 83 | |
| Nils Diewald | 1455e1e | 2014-08-01 16:12:43 +0000 | [diff] [blame] | 84 | @Test |
| Nils Diewald | 6d50c1f | 2013-12-04 20:14:08 +0000 | [diff] [blame] | 85 | public void queryJSONBsp7 () { |
| Nils Diewald | c86aa48 | 2014-02-12 16:58:05 +0000 | [diff] [blame] | 86 | SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/bsp7.jsonld").getFile()); |
| Nils Diewald | 6d50c1f | 2013-12-04 20:14:08 +0000 | [diff] [blame] | 87 | |
| 88 | // [!base=Katze] |
| Nils Diewald | cc7c0b3 | 2014-07-31 19:58:22 +0000 | [diff] [blame] | 89 | assertEquals("tokens:mate/l:Katze", sqwi.toQuery().toString()); |
| 90 | assertTrue(sqwi.isNegative()); |
| Nils Diewald | 6d50c1f | 2013-12-04 20:14:08 +0000 | [diff] [blame] | 91 | }; |
| 92 | |
| Nils Diewald | 6d50c1f | 2013-12-04 20:14:08 +0000 | [diff] [blame] | 93 | @Test |
| 94 | public void queryJSONBsp9 () { |
| Nils Diewald | c86aa48 | 2014-02-12 16:58:05 +0000 | [diff] [blame] | 95 | SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/bsp9.jsonld").getFile()); |
| Nils Diewald | 6d50c1f | 2013-12-04 20:14:08 +0000 | [diff] [blame] | 96 | |
| 97 | // [base=Katze&orth=Katzen] |
| Nils Diewald | 97b6638 | 2014-02-11 00:32:23 +0000 | [diff] [blame] | 98 | assertEquals(sqwi.toQuery().toString(), "spanSegment(tokens:"+defaultFoundry+"l:Katze, tokens:s:Katzen)"); |
| Nils Diewald | 4d183ea | 2013-12-05 02:51:38 +0000 | [diff] [blame] | 99 | }; |
| 100 | |
| 101 | @Test |
| Nils Diewald | 8c54343 | 2014-02-27 18:25:38 +0000 | [diff] [blame] | 102 | public void queryJSONBsp9b () { |
| 103 | SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/bsp9b.jsonld").getFile()); |
| 104 | |
| 105 | // [base=Katze&orth=Katzen] |
| 106 | assertEquals(sqwi.toQuery().toString(), "spanSegment(tokens:mate/m:number:pl, tokens:tt/p:NN)"); |
| 107 | }; |
| 108 | |
| 109 | |
| 110 | @Test |
| Nils Diewald | 4d183ea | 2013-12-05 02:51:38 +0000 | [diff] [blame] | 111 | public void queryJSONBsp10 () { |
| Nils Diewald | c86aa48 | 2014-02-12 16:58:05 +0000 | [diff] [blame] | 112 | SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/bsp10.jsonld").getFile()); |
| Nils Diewald | 4d183ea | 2013-12-05 02:51:38 +0000 | [diff] [blame] | 113 | |
| 114 | // [base=Katze][orth=und][orth=Hunde] |
| Nils Diewald | c6b7875 | 2013-12-05 19:05:12 +0000 | [diff] [blame] | 115 | assertEquals(sqwi.toQuery().toString(), "spanNext(spanNext(tokens:"+defaultFoundry+"l:Katze, tokens:s:und), tokens:s:Hunde)"); |
| Nils Diewald | 4d183ea | 2013-12-05 02:51:38 +0000 | [diff] [blame] | 116 | }; |
| 117 | |
| Nils Diewald | 1455e1e | 2014-08-01 16:12:43 +0000 | [diff] [blame] | 118 | @Test |
| Nils Diewald | 4d183ea | 2013-12-05 02:51:38 +0000 | [diff] [blame] | 119 | public void queryJSONBsp11 () { |
| Nils Diewald | c86aa48 | 2014-02-12 16:58:05 +0000 | [diff] [blame] | 120 | SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/bsp11.jsonld").getFile()); |
| Nils Diewald | 4d183ea | 2013-12-05 02:51:38 +0000 | [diff] [blame] | 121 | |
| Nils Diewald | 1455e1e | 2014-08-01 16:12:43 +0000 | [diff] [blame] | 122 | // [base!=Katze | orth!=Katzen] |
| 123 | /* |
| 124 | Imagine a([^b]|[^c])d |
| 125 | Matches abd and acd |
| 126 | Interpretation would be not(spanAnd(...)) |
| 127 | */ |
| 128 | assertEquals(sqwi.toQuery().toString(), "spanOr([tokens:mate/l:Katze, tokens:s:Katzen])"); |
| 129 | assertTrue(sqwi.isNegative()); |
| Nils Diewald | 6d50c1f | 2013-12-04 20:14:08 +0000 | [diff] [blame] | 130 | }; |
| Nils Diewald | 4d183ea | 2013-12-05 02:51:38 +0000 | [diff] [blame] | 131 | |
| 132 | @Test |
| 133 | public void queryJSONBsp12 () { |
| Nils Diewald | c86aa48 | 2014-02-12 16:58:05 +0000 | [diff] [blame] | 134 | SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/bsp12.jsonld").getFile()); |
| Nils Diewald | 4d183ea | 2013-12-05 02:51:38 +0000 | [diff] [blame] | 135 | |
| 136 | // contains(<np>,[base=Mann]) |
| Nils Diewald | 6802acd | 2014-03-18 18:29:30 +0000 | [diff] [blame] | 137 | assertEquals(sqwi.toQuery().toString(), "spanContain(<tokens:np />, tokens:"+defaultFoundry+"l:Mann)"); |
| Nils Diewald | 4d183ea | 2013-12-05 02:51:38 +0000 | [diff] [blame] | 138 | }; |
| 139 | |
| Nils Diewald | 1455e1e | 2014-08-01 16:12:43 +0000 | [diff] [blame] | 140 | @Test |
| Nils Diewald | 4d183ea | 2013-12-05 02:51:38 +0000 | [diff] [blame] | 141 | public void queryJSONBsp13 () { |
| Nils Diewald | c86aa48 | 2014-02-12 16:58:05 +0000 | [diff] [blame] | 142 | SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/bsp13.jsonld").getFile()); |
| Nils Diewald | 4d183ea | 2013-12-05 02:51:38 +0000 | [diff] [blame] | 143 | |
| Nils Diewald | 1455e1e | 2014-08-01 16:12:43 +0000 | [diff] [blame] | 144 | assertEquals(sqwi.toQuery().toString(), "spanStartsWith(<tokens:np />, tokens:mate/p:Det)"); |
| Nils Diewald | 4d183ea | 2013-12-05 02:51:38 +0000 | [diff] [blame] | 145 | }; |
| 146 | |
| 147 | @Test |
| 148 | public void queryJSONBsp13b () { |
| Nils Diewald | c86aa48 | 2014-02-12 16:58:05 +0000 | [diff] [blame] | 149 | SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/bsp13b.jsonld").getFile()); |
| Nils Diewald | 4d183ea | 2013-12-05 02:51:38 +0000 | [diff] [blame] | 150 | |
| Nils Diewald | c86aa48 | 2014-02-12 16:58:05 +0000 | [diff] [blame] | 151 | // startswith(<np>,[pos=Det]) |
| Nils Diewald | 6802acd | 2014-03-18 18:29:30 +0000 | [diff] [blame] | 152 | assertEquals(sqwi.toQuery().toString(), "spanStartsWith(<tokens:np />, tokens:mate/p:Det)"); |
| Nils Diewald | 4d183ea | 2013-12-05 02:51:38 +0000 | [diff] [blame] | 153 | }; |
| 154 | |
| Nils Diewald | 26087ea | 2013-12-05 16:51:30 +0000 | [diff] [blame] | 155 | @Test |
| Nils Diewald | 4d183ea | 2013-12-05 02:51:38 +0000 | [diff] [blame] | 156 | public void queryJSONBsp14 () { |
| Nils Diewald | c86aa48 | 2014-02-12 16:58:05 +0000 | [diff] [blame] | 157 | SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/bsp14.jsonld").getFile()); |
| Nils Diewald | 4d183ea | 2013-12-05 02:51:38 +0000 | [diff] [blame] | 158 | |
| 159 | // 'vers{2,3}uch' |
| Nils Diewald | 26087ea | 2013-12-05 16:51:30 +0000 | [diff] [blame] | 160 | assertEquals(sqwi.toQuery().toString(), "SpanMultiTermQueryWrapper(tokens:/s:vers{2,3}uch/)"); |
| Nils Diewald | 4d183ea | 2013-12-05 02:51:38 +0000 | [diff] [blame] | 161 | }; |
| 162 | |
| Nils Diewald | 26087ea | 2013-12-05 16:51:30 +0000 | [diff] [blame] | 163 | @Test |
| 164 | public void queryJSONBsp15 () { |
| Nils Diewald | c86aa48 | 2014-02-12 16:58:05 +0000 | [diff] [blame] | 165 | SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/bsp15.jsonld").getFile()); |
| Nils Diewald | 26087ea | 2013-12-05 16:51:30 +0000 | [diff] [blame] | 166 | |
| 167 | // [orth='vers.*ch'] |
| 168 | assertEquals(sqwi.toQuery().toString(), "SpanMultiTermQueryWrapper(tokens:/s:vers.*ch/)"); |
| 169 | }; |
| 170 | |
| 171 | @Test |
| 172 | public void queryJSONBsp16 () { |
| Nils Diewald | c86aa48 | 2014-02-12 16:58:05 +0000 | [diff] [blame] | 173 | SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/bsp16.jsonld").getFile()); |
| Nils Diewald | 26087ea | 2013-12-05 16:51:30 +0000 | [diff] [blame] | 174 | |
| 175 | // [(base=bar|base=foo)&orth=foobar] |
| Nils Diewald | 97b6638 | 2014-02-11 00:32:23 +0000 | [diff] [blame] | 176 | assertEquals(sqwi.toQuery().toString(), "spanSegment(spanOr([tokens:"+defaultFoundry+"l:bar, tokens:"+defaultFoundry+"l:foo]), tokens:s:foobar)"); |
| Nils Diewald | 26087ea | 2013-12-05 16:51:30 +0000 | [diff] [blame] | 177 | }; |
| 178 | |
| 179 | @Test |
| 180 | public void queryJSONBsp17 () { |
| Nils Diewald | c86aa48 | 2014-02-12 16:58:05 +0000 | [diff] [blame] | 181 | SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/bsp17.jsonld").getFile()); |
| Nils Diewald | 26087ea | 2013-12-05 16:51:30 +0000 | [diff] [blame] | 182 | |
| 183 | // within(<np>,[base=Mann]) |
| Nils Diewald | 6802acd | 2014-03-18 18:29:30 +0000 | [diff] [blame] | 184 | assertEquals(sqwi.toQuery().toString(), "spanContain(<tokens:np />, tokens:"+defaultFoundry+"l:Mann)"); |
| Nils Diewald | 26087ea | 2013-12-05 16:51:30 +0000 | [diff] [blame] | 185 | }; |
| Nils Diewald | 6d50c1f | 2013-12-04 20:14:08 +0000 | [diff] [blame] | 186 | |
| Nils Diewald | 9cc86fe | 2013-12-07 17:45:59 +0000 | [diff] [blame] | 187 | @Test |
| 188 | public void queryJSONDemo () throws QueryException { |
| Nils Diewald | c86aa48 | 2014-02-12 16:58:05 +0000 | [diff] [blame] | 189 | SpanQueryWrapperInterface sqwi = new KorapQuery("tokens").fromJSON("{ \"query\" : { \"@type\" : \"korap:token\", \"wrap\" : { \"@type\" : \"korap:term\", \"foundry\" : \"base\", \"layer\" : \"p\", \"key\" : \"foo\", \"match\" : \"match:eq\" }}}"); |
| Nils Diewald | 9cc86fe | 2013-12-07 17:45:59 +0000 | [diff] [blame] | 190 | |
| 191 | assertEquals(sqwi.toQuery().toString(), "tokens:base/p:foo"); |
| 192 | }; |
| 193 | |
| Nils Diewald | 630811f | 2013-12-11 16:40:28 +0000 | [diff] [blame] | 194 | @Test |
| 195 | public void queryJSONBspClass () { |
| Nils Diewald | c86aa48 | 2014-02-12 16:58:05 +0000 | [diff] [blame] | 196 | SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/bsp-class.jsonld").getFile()); |
| Nils Diewald | 630811f | 2013-12-11 16:40:28 +0000 | [diff] [blame] | 197 | |
| 198 | // within(<np>,[base=Mann]) |
| 199 | assertEquals(sqwi.toQuery().toString(), "{0: spanNext(tokens:tt/p:ADJA, tokens:mate/p:NN)}"); |
| 200 | }; |
| 201 | |
| Nils Diewald | 9cc86fe | 2013-12-07 17:45:59 +0000 | [diff] [blame] | 202 | |
| Nils Diewald | 164f8be | 2014-02-13 02:43:16 +0000 | [diff] [blame] | 203 | @Test |
| 204 | public void queryJSONcosmas3 () { |
| 205 | SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/cosmas3.json").getFile()); |
| 206 | |
| 207 | // "das /+w1:3 Buch" |
| Nils Diewald | 0f5a279 | 2014-02-13 17:20:36 +0000 | [diff] [blame] | 208 | assertEquals(sqwi.toQuery().toString(), "spanDistance(tokens:s:das, tokens:s:Buch, [(w[1:3], ordered, notExcluded)])"); |
| Nils Diewald | 164f8be | 2014-02-13 02:43:16 +0000 | [diff] [blame] | 209 | }; |
| 210 | |
| 211 | @Test |
| 212 | public void queryJSONcosmas4 () { |
| 213 | SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/cosmas4.json").getFile()); |
| 214 | |
| Nils Diewald | a111803 | 2014-02-13 20:50:48 +0000 | [diff] [blame] | 215 | // "das /+w1:3,s1:1 Buch" |
| Nils Diewald | 0f5a279 | 2014-02-13 17:20:36 +0000 | [diff] [blame] | 216 | assertEquals(sqwi.toQuery().toString(), "spanMultipleDistance(tokens:s:das, tokens:s:Buch, [(w[1:3], ordered, notExcluded), (s[1:1], ordered, notExcluded)])"); |
| Nils Diewald | 164f8be | 2014-02-13 02:43:16 +0000 | [diff] [blame] | 217 | }; |
| 218 | |
| 219 | @Test |
| Nils Diewald | a111803 | 2014-02-13 20:50:48 +0000 | [diff] [blame] | 220 | public void queryJSONcosmas4b () { |
| 221 | SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/cosmas4b.json").getFile()); |
| 222 | |
| 223 | // "das /+w1:3,s1 Buch" |
| 224 | assertEquals(sqwi.toQuery().toString(), "spanMultipleDistance(tokens:s:das, tokens:s:Buch, [(w[1:3], ordered, notExcluded), (s[0:1], ordered, notExcluded)])"); |
| 225 | }; |
| 226 | |
| 227 | @Test |
| Nils Diewald | 164f8be | 2014-02-13 02:43:16 +0000 | [diff] [blame] | 228 | public void queryJSONcosmas10 () { |
| 229 | SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/cosmas10.json").getFile()); |
| 230 | |
| 231 | // "Institut für $deutsche Sprache" |
| 232 | assertEquals(sqwi.toQuery().toString(), "spanNext(spanNext(spanNext(tokens:s:Institut, tokens:s:für), tokens:i:deutsche), tokens:s:Sprache)"); |
| 233 | }; |
| 234 | |
| 235 | @Test |
| 236 | public void queryJSONcosmas10b () { |
| 237 | SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/cosmas10b.json").getFile()); |
| 238 | |
| 239 | // "Institut $FÜR $deutsche Sprache" |
| 240 | assertEquals(sqwi.toQuery().toString(), "spanNext(spanNext(spanNext(tokens:s:Institut, tokens:i:für), tokens:i:deutsche), tokens:s:Sprache)"); |
| 241 | }; |
| 242 | |
| 243 | @Test |
| 244 | public void queryJSONcosmas16 () { |
| 245 | SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/cosmas16.json").getFile()); |
| 246 | |
| 247 | // "$wegen #IN(L) <s>" |
| Nils Diewald | 6802acd | 2014-03-18 18:29:30 +0000 | [diff] [blame] | 248 | assertEquals(sqwi.toQuery().toString(), "shrink(1: spanStartsWith(<tokens:s />, {1: tokens:i:wegen}))"); |
| Nils Diewald | 164f8be | 2014-02-13 02:43:16 +0000 | [diff] [blame] | 249 | }; |
| 250 | |
| 251 | @Test |
| 252 | public void queryJSONcosmas17 () { |
| 253 | SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/cosmas17.json").getFile()); |
| 254 | |
| 255 | // "#BED($wegen , +sa)" |
| Nils Diewald | 6802acd | 2014-03-18 18:29:30 +0000 | [diff] [blame] | 256 | assertEquals(sqwi.toQuery().toString(), "spanStartsWith(<tokens:s />, tokens:i:wegen)"); |
| Nils Diewald | 164f8be | 2014-02-13 02:43:16 +0000 | [diff] [blame] | 257 | }; |
| 258 | |
| 259 | @Test |
| 260 | public void queryJSONcosmas20 () { |
| 261 | SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/cosmas20.json").getFile()); |
| 262 | |
| 263 | // "MORPH(V) #IN(R) #ELEM(S)" |
| 264 | // TODO: Uses defaultfoundry! |
| Nils Diewald | 6802acd | 2014-03-18 18:29:30 +0000 | [diff] [blame] | 265 | assertEquals(sqwi.toQuery().toString(), "shrink(1: spanEndsWith(<tokens:s />, {1: tokens:mate/p:V}))"); |
| Nils Diewald | 164f8be | 2014-02-13 02:43:16 +0000 | [diff] [blame] | 266 | }; |
| 267 | |
| Nils Diewald | dc8dc34 | 2014-07-25 13:38:50 +0000 | [diff] [blame] | 268 | |
| 269 | @Test |
| 270 | public void queryJSONrepetition () { |
| 271 | SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/bsp-repetition.jsonld").getFile()); |
| 272 | |
| 273 | // der[cnx/p=A]{0,2}[tt/p=NN] |
| Eliza Margaretha | 7788a98 | 2014-08-29 16:10:52 +0000 | [diff] [blame] | 274 | assertEquals(sqwi.toQuery().toString(), "spanNext(spanOr([tokens:s:der, spanNext(tokens:s:der, spanRepetition(tokens:cnx/p:A{1,2}))]), tokens:tt/p:NN)"); |
| Nils Diewald | dc8dc34 | 2014-07-25 13:38:50 +0000 | [diff] [blame] | 275 | }; |
| 276 | |
| Nils Diewald | 6d50c1f | 2013-12-04 20:14:08 +0000 | [diff] [blame] | 277 | public static String getString (String path) { |
| 278 | StringBuilder contentBuilder = new StringBuilder(); |
| 279 | try { |
| 280 | BufferedReader in = new BufferedReader(new FileReader(path)); |
| 281 | String str; |
| 282 | while ((str = in.readLine()) != null) { |
| 283 | contentBuilder.append(str); |
| 284 | }; |
| 285 | in.close(); |
| 286 | } catch (IOException e) { |
| 287 | fail(e.getMessage()); |
| 288 | } |
| 289 | return contentBuilder.toString(); |
| 290 | }; |
| 291 | |
| 292 | public static SpanQueryWrapperInterface jsonQuery (String jsonFile) { |
| 293 | SpanQueryWrapperInterface sqwi; |
| 294 | |
| 295 | try { |
| 296 | String json = getString(jsonFile); |
| 297 | sqwi = new KorapQuery("tokens").fromJSON(json); |
| 298 | } |
| 299 | catch (QueryException e) { |
| 300 | fail(e.getMessage()); |
| 301 | sqwi = new KorapQuery("tokens").seg("???"); |
| 302 | }; |
| 303 | return sqwi; |
| 304 | }; |
| Nils Diewald | 4d183ea | 2013-12-05 02:51:38 +0000 | [diff] [blame] | 305 | }; |