blob: 74c8cfef481cb2d257fa21fda276aa5a790e652e [file] [log] [blame]
package de.ids_mannheim.korap.index;
import static org.junit.Assert.assertEquals;
import java.io.IOException;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.spans.SpanTermQuery;
import org.junit.Test;
import de.ids_mannheim.korap.KorapIndex;
import de.ids_mannheim.korap.KorapMatch;
import de.ids_mannheim.korap.KorapResult;
import de.ids_mannheim.korap.query.SpanAttributeQuery;
import de.ids_mannheim.korap.query.SpanElementQuery;
import de.ids_mannheim.korap.query.SpanRelationQuery;
import de.ids_mannheim.korap.query.SpanRelationPartQuery;
import de.ids_mannheim.korap.query.SpanSegmentQuery;
import de.ids_mannheim.korap.query.SpanTermWithIdQuery;
import de.ids_mannheim.korap.query.SpanWithAttributeQuery;
/*
within(x,y)
SpanRelationQuery->
rel("SUBJ", query1, query2)
1. return all words that are subjects of (that are linked by the “SUBJ” relation to) the string “beginnt”
xip/syntax-dep_rel:beginnt >[func=”SUBJ”] xip/syntax-dep_rel:.*
-> rel("SUBJ", highlight(query1), new TermQuery("s:beginnt"))
SUBJ ist modelliert mit offset für den gesamten Bereich
https://de.wikipedia.org/wiki/Dependenzgrammatik
im regiert Wasser
dass die Kinder im Wasser gespielt haben
3. im#16-18$
3. >:COORD#16-25$3,4
4. Wasser#19-25$
4. <:COORD#16-25$3,4
# okay: return all main verbs that have no “SUBJ” relation specified
# Not okay: 5. return all verbs with (at least?) 3 outgoing relations [think of ditransitives such as give]
xip/morph_pos:VERB & xip/token:.* & xip/token:.* & xip/token:.* & xip/token:.* & #1 _=_#2 & #2 >[func=$x] #3 & #2 >[func=$x]#4 & #2 >[func=$x] #5
# Okay: return all verbs that have singular SUBJects and dative OBJects
xip/morph_pos:VERB & mpt/morph_msd:Sg & mpt/morph_msd:Dat & #1 >[func=”SUBJ”] #2 & #1 >[func=”OBJ”] #3
-> [p:VVFIN](>SUBJ[nr:sg] & >OBJ[c:dat])
*/
public class TestRelationIndex {
private KorapIndex ki;
private KorapResult kr;
public TestRelationIndex() throws IOException {
ki = new KorapIndex();
}
private FieldDocument createFieldDoc0(){
FieldDocument fd = new FieldDocument();
fd.addString("ID", "doc-0");
fd.addTV("base",
"text",
"[(0-1)s:c$<s>1|_0#0-1|>:xip/syntax-dep_rel$<i>6<s>1<s>1<s>1]" +
"[(1-2)s:e$<s>1|_1#1-2|<:xip/syntax-dep_rel$<i>9<s>1<s>1<s>1|>:xip/syntax-dep_rel$<i>4<s>1<s>1<s>1]" +
"[(2-3)s:c|_2#2-3]" +
"[(3-4)s:c$<s>1|s:b$<s>2|_3#3-4|<:xip/syntax-dep_rel$<i>9<s>1<s>1<s>1]" +
"[(4-5)s:e$<s>1|s:d$<s>2|_4#4-5|<:xip/syntax-dep_rel$<i>1<s>1<s>1<s>1]" +
"[(5-6)s:c|_5#5-6]" +
"[(6-7)s:d$<s>1|_6#6-7|<:xip/syntax-dep_rel$<i>1<s>1<s>1<s>1]" +
"[(7-8)s:e|_7#7-8]" +
"[(8-9)s:e|s:b|_8#8-9]" +
"[(9-10)s:d$<s>1|_9#9-10|>:xip/syntax-dep_rel$<i>1<s>2<s>1<s>1|>:xip/syntax-dep_rel$<i>3<s>1<s>1<s>1]");
return fd;
}
private FieldDocument createFieldDoc1(){
FieldDocument fd = new FieldDocument();
fd.addString("ID", "doc-1");
fd.addTV("base",
"text",
"[(0-1)s:c$<s>2|<>:p$#0-3$<i>3<s>1|_0#0-1|" +
">:xip/syntax-dep_rel$<i>3<i>6<i>9<s>2<s>1<s>1|" +
">:xip/syntax-dep_rel$<i>6<i>9<s>1<s>2<s>1|" +
"r@:func=subj$<s>2]" +
"[(1-2)s:e|_1#1-2|<>:p#1-3$<i>3<s>1]" +
"[(2-3)s:c|_2#2-3]" +
"[(3-4)s:c|s:b|_3#3-4]" +
"[(4-5)s:e|s:d|_4#4-5]" +
"[(5-6)s:c|_5#5-6]" +
"[(6-7)s:d$<s>2|<>:p$#6-9$<i>9<s>1|_6#6-7|" +
"<:xip/syntax-dep_rel$<i>9<b>0<i>1<s>1<s>1<s>2|" +
">:xip/syntax-dep_rel$<i>9<b>0<i>9<s>3<s>1<s>1|" +
"<:xip/syntax-dep_rel$<i>9<i>1<i>3<s>2<s>1<s>1|" +
"r@:func=obj$<s>2]" +
"[(7-8)s:e|_7#7-8]" +
"[(8-9)s:e|s:b|_8#8-9]" +
"[(9-10)s:d$<s>1|_9#9-10|<:xip/syntax-dep_rel$<i>6<i>9<s>2<s>1<s>1]");
return fd;
}
private FieldDocument createFieldDoc2(){
FieldDocument fd = new FieldDocument();
fd.addString("ID", "doc-2");
fd.addTV("base",
"Ich kaufe die Blümen für meine Mutter.",
"[(0-3)s:Ich|_0#0-3|pos:NN$<s>1|<>:s#0-38$<i>7<s>2|<>:np#0-3$<i>1<s>3|" +
">:child-of$<i>0<i>7<s>1<s>3<s>2|" +
">:child-of$<i>0<i>1<s>6<s>1<s>3|" +
"<:child-of$<i>1<b>0<i>1<s>3<s>3<s>1|" +
"<:child-of$<i>7<i>0<i>1<s>4<s>2<s>3|" +
"<:child-of$<i>7<i>1<i>7<s>5<s>2<s>2|" +
"<:dep$<i>2<s>2<s>1<s>1|" +
"r@:func=sbj$<s>1]" +
"[(1-2)s:kaufe|_1#4-9|pos:V$<s>1|<>:vp#4-38$<i>7<s>2|" +
">:child-of$<i>7<i>0<i>7<s>1<s>2<s>2|" +
">:child-of$<i>1<i>7<s>2<s>1<s>2|" +
"<:child-of$<i>7<b>0<i>2<s>5<s>2<s>1|" +
"<:child-of$<i>7<i>2<i>7<s>6<s>2<s>4|" +
">:dep$<i>1<s>3<s>1<s>1|" +
">:dep$<i>4<s>4<s>1<s>1]" +
"[(2-3)s:die|_2#10-13|pos:ART$<s>1|tt:DET$<s>2|<>:np#10-20$<i>4<s>3|<>:np#10-38$<i>7<s>4|" +
">:child-of$<i>4<i>2<i>7<s>1<s>3<s>4|" +
">:child-of$<i>2<i>4<s>2<s>1<s>3|" +
">:child-of$<i>7<i>1<i>7<s>2<s>4<s>2|" +
"<:child-of$<i>4<b>0<i>3<s>3<s>3<s>1|" +
"<:child-of$<i>4<b>0<i>4<s>4<s>3<s>1|" +
"<:child-of$<i>7<i>2<i>4<s>5<s>4<s>3|" +
"<:child-of$<i>7<i>4<i>7<s>6<s>4<s>2|" +
"<:dep$<i>4<s>3<s>1<s>1|" +
"r@:func=obj$<s>1" +
"]" +
"[(3-4)s:Blümen|_3#14-20|pos:NN$<s>1|" +
">:child-of$<i>2<i>4<s>1<s>1<s>3|" +
"<:dep$<i>2<s>2<s>1<s>2|" +
">:dep$<i>3<s>3<s>1<s>1|" +
">:dep$<i>5<s>4<s>1<s>1|" +
"r@:func=head$<s>2]" +
"[(4-5)s:für|_4#21-24|pos:PREP$<s>1|<>:pp#21-38$<i>7<s>2|" +
">:child-of$<i>4<i>7<s>1<s>1<s>2|" +
">:child-of$<i>7<i>2<i>7<s>2<s>2<s>4|" +
"<:child-of$<i>7<b>0<i>5<s>4<s>2<s>1|" +
"<:child-of$<i>7<i>5<i>7<s>5<s>2<s>2|" +
"<:dep$<i>4<s>1<s>1<s>1|" +
">:dep$<i>7<s>3<s>1<s>1" +
"]" +
"[(5-6)s:meine|_5#25-30|pos:ART$<s>1|<>:np#25-38$<i>7<s>2|" +
">:child-of$<i>5<i>7<s>1<s>1<s>2|" +
">:child-of$<i>7<i>4<i>7<s>2<s>2<s>2|" +
"<:child-of$<i>7<b>0<i>6<s>4<s>2<s>1|" +
"<:child-of$<i>7<b>0<i>7<s>5<s>2<s>1|" +
"<:dep$<i>7<s>3<s>1<s>1" +
"]" +
"[(6-7)s:Mutter.|_6#31-38|pos:NN$<s>1|" +
">:child-of$<i>5<i>7<s>1<s>1<s>2|" +
">:dep$<i>6<s>2<s>1<s>1|" +
"<:dep$<i>5<s>3<s>1<s>1|" +
"r@:func=head$<s>3]");
return fd;
}
/** Relations: token to token, token to span, span to span
* */
@Test
public void testCase1() throws IOException {
ki.addDoc(createFieldDoc0());
ki.addDoc(createFieldDoc1());
ki.commit();
SpanRelationQuery sq = new SpanRelationQuery(
new SpanTermQuery(new Term("base",">:xip/syntax-dep_rel")),true);
kr = ki.search(sq,(short) 10);
assertEquals((long) 7, kr.getTotalResults());
// token to token
assertEquals(0,kr.getMatch(0).getLocalDocID());
assertEquals(0,kr.getMatch(0).getStartPos());
assertEquals(1,kr.getMatch(0).getEndPos());
assertEquals(1,kr.getMatch(1).getStartPos());
assertEquals(2,kr.getMatch(1).getEndPos());
assertEquals(9,kr.getMatch(2).getStartPos());
assertEquals(10,kr.getMatch(2).getEndPos());
assertEquals(9,kr.getMatch(3).getStartPos());
assertEquals(10,kr.getMatch(3).getEndPos());
// token to span
assertEquals(1,kr.getMatch(4).getLocalDocID());
assertEquals(0,kr.getMatch(4).getStartPos());
assertEquals(1,kr.getMatch(4).getEndPos());
assertEquals(0,kr.getMatch(5).getStartPos());
assertEquals(3,kr.getMatch(5).getEndPos());
// span to span
assertEquals(6,kr.getMatch(6).getStartPos());
assertEquals(9,kr.getMatch(6).getEndPos());
// check target
}
/** Relation span to token
* */
@Test
public void testCase2() throws IOException {
ki.addDoc(createFieldDoc0());
ki.addDoc(createFieldDoc1());
ki.commit();
SpanRelationQuery sq = new SpanRelationQuery(
new SpanTermQuery(new Term("base","<:xip/syntax-dep_rel")),true);
kr = ki.search(sq,(short) 10);
assertEquals((long) 7, kr.getTotalResults());
// token to token
assertEquals(0,kr.getMatch(0).getLocalDocID());
assertEquals(1,kr.getMatch(0).getStartPos());
assertEquals(2,kr.getMatch(0).getEndPos());
assertEquals(3,kr.getMatch(1).getStartPos());
assertEquals(4,kr.getMatch(1).getEndPos());
assertEquals(4,kr.getMatch(2).getStartPos());
assertEquals(5,kr.getMatch(2).getEndPos());
assertEquals(6,kr.getMatch(3).getStartPos());
assertEquals(7,kr.getMatch(3).getEndPos());
assertEquals(1,kr.getMatch(4).getLocalDocID());
// span to token
assertEquals(6,kr.getMatch(4).getStartPos());
assertEquals(9,kr.getMatch(4).getEndPos());
assertEquals(6,kr.getMatch(5).getStartPos());
assertEquals(9,kr.getMatch(5).getEndPos());
// span to span
assertEquals(9,kr.getMatch(6).getStartPos());
assertEquals(10,kr.getMatch(6).getEndPos());
}
/** Relations with attributes
* */
@Test
public void testCase3() throws IOException {
ki.addDoc(createFieldDoc2());
ki.commit();
// child-of relations
SpanRelationQuery srq = new SpanRelationQuery(
new SpanTermQuery(new Term("base",">:child-of")),true);
kr = ki.search(srq,(short) 20);
assertEquals((long) 13, kr.getTotalResults());
// child-of with attr func=sbj
SpanWithAttributeQuery wq =
new SpanWithAttributeQuery(srq,
new SpanAttributeQuery(
new SpanTermQuery(new Term("base", "r@:func=sbj")),
true),
true
);
kr = ki.search(wq,(short) 10);
assertEquals((long) 1, kr.getTotalResults());
assertEquals(0,kr.getMatch(0).getStartPos()); // token
assertEquals(1,kr.getMatch(0).getEndPos());
// child-of without attr func=sbj
wq =
new SpanWithAttributeQuery(srq,
new SpanAttributeQuery(
new SpanTermQuery(new Term("base", "r@:func=sbj")),
true, true),
true
);
kr = ki.search(wq,(short) 20);
assertEquals((long) 12, kr.getTotalResults());
// child-of with attr func-obj
wq = new SpanWithAttributeQuery(srq,
new SpanAttributeQuery(
new SpanTermQuery( new Term("base", "r@:func=obj")),
true),
true
);
kr = ki.search(wq,(short) 10);
assertEquals((long) 1, kr.getTotalResults());
assertEquals(2,kr.getMatch(0).getStartPos()); // element
assertEquals(4,kr.getMatch(0).getEndPos());
// target of a dependency relation
srq = new SpanRelationQuery(
new SpanTermQuery(new Term("base","<:dep")),true);
kr = ki.search(srq,(short) 10);
assertEquals((long) 6, kr.getTotalResults());
// target of a dependency relation, which is also a head
wq = new SpanWithAttributeQuery(srq,
new SpanAttributeQuery(
new SpanTermQuery( new Term("base", "r@:func=head")),
true),
true
);
kr = ki.search(wq,(short) 20);
assertEquals((long) 2, kr.getTotalResults());
assertEquals(3,kr.getMatch(0).getStartPos());
assertEquals(4,kr.getMatch(0).getEndPos());
assertEquals(6,kr.getMatch(1).getStartPos());
assertEquals(7,kr.getMatch(1).getEndPos());
}
/** Match left return left
* Match right return right
* */
@Test
public void testCase10() throws IOException {
ki.addDoc(createFieldDoc2());
ki.commit();
// return all children that are NP
SpanRelationPartQuery rv = new SpanRelationPartQuery(
new SpanRelationQuery(
new SpanTermQuery(new Term("base",">:child-of")),true
),
new SpanElementQuery("base","np"),
false, false, true);
kr = ki.search(rv,(short) 10);
assertEquals(4, kr.getTotalResults());
assertEquals(0,kr.getMatch(0).getStartPos());
assertEquals(1,kr.getMatch(0).getEndPos());
assertEquals(2,kr.getMatch(1).getStartPos());
assertEquals(4,kr.getMatch(1).getEndPos());
assertEquals(2,kr.getMatch(2).getStartPos());
assertEquals(7,kr.getMatch(2).getEndPos());
assertEquals(5,kr.getMatch(3).getStartPos());
assertEquals(7,kr.getMatch(3).getEndPos());
// return all parents that are NP
rv = new SpanRelationPartQuery(
new SpanRelationQuery(
new SpanTermQuery(new Term("base",">:child-of")),true
),
new SpanElementQuery("base","np"),
true, true, true);
kr = ki.search(rv,(short) 10);
assertEquals(7, kr.getTotalResults());
assertEquals(0,kr.getMatch(0).getStartPos());
assertEquals(1,kr.getMatch(0).getEndPos());
assertEquals(2,kr.getMatch(1).getStartPos());
assertEquals(4,kr.getMatch(1).getEndPos());
assertEquals(2,kr.getMatch(2).getStartPos());
assertEquals(4,kr.getMatch(2).getEndPos());
assertEquals(2,kr.getMatch(3).getStartPos());
assertEquals(7,kr.getMatch(3).getEndPos());
assertEquals(2,kr.getMatch(4).getStartPos());
assertEquals(7,kr.getMatch(4).getEndPos());
assertEquals(5,kr.getMatch(5).getStartPos());
assertEquals(7,kr.getMatch(5).getEndPos());
assertEquals(5,kr.getMatch(6).getStartPos());
assertEquals(7,kr.getMatch(6).getEndPos());
// for (KorapMatch km : kr.getMatches()){
// System.out.println(km.getStartPos() +","+km.getEndPos()
// // +" "+km.getSnippetBrackets()
// );
// }
}
/** Relation with variable
* match right, return left
* sort by right, then sort by left
* @throws IOException
* */
@Test
public void testCase4() throws IOException {
ki.addDoc(createFieldDoc2());
ki.commit();
//return all children of np
SpanRelationPartQuery rv = new SpanRelationPartQuery(
new SpanRelationQuery(
new SpanTermQuery(new Term("base",">:child-of")),true
),
new SpanElementQuery("base","np"),
true, false, true);
kr = ki.search(rv,(short) 10);
assertEquals((long) 7, kr.getTotalResults());
assertEquals(0,kr.getMatch(0).getStartPos());
assertEquals(1,kr.getMatch(0).getEndPos());
assertEquals(2,kr.getMatch(1).getStartPos());
assertEquals(3,kr.getMatch(1).getEndPos());
assertEquals(2,kr.getMatch(2).getStartPos());
assertEquals(4,kr.getMatch(2).getEndPos());
assertEquals(3,kr.getMatch(3).getStartPos());
assertEquals(4,kr.getMatch(3).getEndPos());
assertEquals(4,kr.getMatch(4).getStartPos());
assertEquals(7,kr.getMatch(4).getEndPos());
assertEquals(5,kr.getMatch(5).getStartPos());
assertEquals(6,kr.getMatch(5).getEndPos());
assertEquals(6,kr.getMatch(6).getStartPos());
assertEquals(7,kr.getMatch(6).getEndPos());
// sorting left problem (solved)
//return all children of np that are articles
SpanSegmentQuery rv2 = new SpanSegmentQuery(rv, new SpanTermQuery(new Term("base","pos:ART")));
kr = ki.search(rv2,(short) 10);
assertEquals((long) 2, kr.getTotalResults());
assertEquals(2,kr.getMatch(0).getStartPos());
assertEquals(3,kr.getMatch(0).getEndPos());
assertEquals(5,kr.getMatch(1).getStartPos());
assertEquals(6,kr.getMatch(1).getEndPos());
// return all nps whose children are articles
SpanRelationPartQuery rv3 =
new SpanRelationPartQuery(rv,
new SpanTermWithIdQuery(new Term("base","pos:ART"), true),
false, true, true);
kr = ki.search(rv3,(short) 10);
/*for (KorapMatch km : kr.getMatches()){
System.out.println(km.getStartPos() +","+km.getEndPos()+" "
+km.getSnippetBrackets()
);
} */
assertEquals((long) 2, kr.getTotalResults());
assertEquals(2,kr.getMatch(0).getStartPos());
assertEquals(4,kr.getMatch(0).getEndPos());
assertEquals(5,kr.getMatch(1).getStartPos());
assertEquals(7,kr.getMatch(1).getEndPos());
}
/** Using the opposite relation
* match left, return right
* sort by left, then sort by right
* */
@Test
public void testCase5() throws IOException {
ki.addDoc(createFieldDoc2());
ki.commit();
SpanRelationQuery spanRelationQuery =new SpanRelationQuery(
new SpanTermQuery(new Term("base","<:child-of")),true
);
//return all children of np
SpanRelationPartQuery rv =new SpanRelationPartQuery(
spanRelationQuery,
new SpanElementQuery("base","np"),
false, true, true);
kr = ki.search(rv,(short) 10);
/*for (KorapMatch km : kr.getMatches()){
System.out.println(km.getStartPos() +","+km.getEndPos()+" "
+km.getSnippetBrackets());
}*/
assertEquals((long) 7, kr.getTotalResults());
assertEquals(0,kr.getMatch(0).getStartPos());
assertEquals(1,kr.getMatch(0).getEndPos());
assertEquals(2,kr.getMatch(1).getStartPos());
assertEquals(3,kr.getMatch(1).getEndPos());
assertEquals(2,kr.getMatch(2).getStartPos());
assertEquals(4,kr.getMatch(2).getEndPos());
assertEquals(3,kr.getMatch(3).getStartPos());
assertEquals(4,kr.getMatch(3).getEndPos());
assertEquals(4,kr.getMatch(4).getStartPos());
assertEquals(7,kr.getMatch(4).getEndPos());
assertEquals(5,kr.getMatch(5).getStartPos());
assertEquals(6,kr.getMatch(5).getEndPos());
assertEquals(6,kr.getMatch(6).getStartPos());
assertEquals(7,kr.getMatch(6).getEndPos());
}
/** Match right, return left
* sort by right, then sort by left
* */
@Test
public void testCase6() throws IOException {
ki.addDoc(createFieldDoc2());
ki.commit();
SpanRelationQuery spanRelationQuery =new SpanRelationQuery(
new SpanTermQuery(new Term("base","<:child-of")),true
);
//return all parents of np
SpanRelationPartQuery rv =new SpanRelationPartQuery(
spanRelationQuery,
new SpanElementQuery("base","np"),
true, false, true);
kr = ki.search(rv,(short) 10);
/*for (KorapMatch km : kr.getMatches()){
System.out.println(km.getStartPos() +","+km.getEndPos()+" "
+km.getSnippetBrackets());
}*/
assertEquals((long) 4, kr.getTotalResults());
assertEquals(0,kr.getMatch(0).getStartPos());
assertEquals(7,kr.getMatch(0).getEndPos());
assertEquals(1,kr.getMatch(1).getStartPos());
assertEquals(7,kr.getMatch(1).getEndPos());
assertEquals(2,kr.getMatch(2).getStartPos());
assertEquals(7,kr.getMatch(2).getEndPos());
assertEquals(4,kr.getMatch(3).getStartPos());
assertEquals(7,kr.getMatch(3).getEndPos());
// id problem same like testcase7 (solved)
}
/** Match left, return right
* sort by left, then sort by right
* */
@Test
public void testCase7() throws IOException {
ki.addDoc(createFieldDoc2());
ki.commit();
//return all parents of np
SpanRelationPartQuery rv =new SpanRelationPartQuery(
new SpanRelationQuery(
new SpanTermQuery(new Term("base",">:child-of")),true
),
new SpanElementQuery("base","np"),
false, true, true);
kr = ki.search(rv,(short) 10);
/*for (KorapMatch km : kr.getMatches()){
System.out.println(km.getStartPos() +","+km.getEndPos()+" "
+km.getSnippetBrackets());
}*/
assertEquals((long) 4, kr.getTotalResults());
assertEquals(0,kr.getMatch(0).getStartPos());
assertEquals(7,kr.getMatch(0).getEndPos());
assertEquals(1,kr.getMatch(1).getStartPos());
assertEquals(7,kr.getMatch(1).getEndPos());
assertEquals(2,kr.getMatch(2).getStartPos());
assertEquals(7,kr.getMatch(2).getEndPos());
assertEquals(4,kr.getMatch(3).getStartPos());
assertEquals(7,kr.getMatch(3).getEndPos());
// id problem (solved)
// return all children of relation targets/ right side
SpanRelationPartQuery rv3 = new SpanRelationPartQuery(
new SpanRelationQuery(
new SpanTermQuery(new Term("base",">:child-of")),true
),
rv, true, false, true);
kr = ki.search(rv3,(short) 10);
/*for (KorapMatch km : kr.getMatches()){
System.out.println(km.getStartPos() +","+km.getEndPos()+" "
+km.getSnippetBrackets());
}*/
assertEquals((long) 8, kr.getTotalResults());
}
/** Relations whose source/target do not embed
* its counterparts.
* */
@Test
public void testCase8() throws IOException {
ki.addDoc(createFieldDoc2());
ki.commit();
// match right
//return source of dep relations to pos:NN
SpanRelationPartQuery rv =new SpanRelationPartQuery(
new SpanRelationQuery(
new SpanTermQuery(new Term("base",">:dep")),true
),
new SpanTermWithIdQuery(new Term("base","pos:NN"), true),
true, false, true);
kr = ki.search(rv,(short) 10);
assertEquals((long) 3, kr.getTotalResults());
assertEquals(1,kr.getMatch(0).getStartPos());
assertEquals(2,kr.getMatch(0).getEndPos());
assertEquals(1,kr.getMatch(1).getStartPos());
assertEquals(2,kr.getMatch(1).getEndPos());
assertEquals(4,kr.getMatch(2).getStartPos());
assertEquals(5,kr.getMatch(2).getEndPos());
//return target of dep relations from pos:NN
rv =new SpanRelationPartQuery(
new SpanRelationQuery(
new SpanTermQuery(new Term("base","<:dep")),true
),
new SpanTermWithIdQuery(new Term("base","pos:NN"),true),
true, false, true);
kr = ki.search(rv,(short) 10);
assertEquals((long) 3, kr.getTotalResults());
assertEquals(2,kr.getMatch(0).getStartPos());
assertEquals(3,kr.getMatch(0).getEndPos());
assertEquals(4,kr.getMatch(1).getStartPos());
assertEquals(5,kr.getMatch(1).getEndPos());
assertEquals(5,kr.getMatch(2).getStartPos());
assertEquals(6,kr.getMatch(2).getEndPos());
// matchleft
//return target of dep relations from pos:NN
rv =new SpanRelationPartQuery(
new SpanRelationQuery(
new SpanTermQuery(new Term("base",">:dep")),true
),
new SpanTermWithIdQuery(new Term("base","pos:NN"),true),
false, true, true);
kr = ki.search(rv,(short) 10);
assertEquals((long) 3, kr.getTotalResults());
assertEquals(2,kr.getMatch(0).getStartPos());
assertEquals(3,kr.getMatch(0).getEndPos());
assertEquals(4,kr.getMatch(1).getStartPos());
assertEquals(5,kr.getMatch(1).getEndPos());
assertEquals(5,kr.getMatch(2).getStartPos());
assertEquals(6,kr.getMatch(2).getEndPos());
//return source of dep relations to pos:NN
rv =new SpanRelationPartQuery(
new SpanRelationQuery(
new SpanTermQuery(new Term("base","<:dep")),true
),
new SpanTermWithIdQuery(new Term("base","pos:NN"),true),
false, true, true);
kr = ki.search(rv,(short) 10);
/*for (KorapMatch km : kr.getMatches()){
System.out.println(km.getStartPos() +","+km.getEndPos()+" "
+km.getSnippetBrackets());
}*/
assertEquals((long) 3, kr.getTotalResults());
assertEquals(1,kr.getMatch(0).getStartPos());
assertEquals(2,kr.getMatch(0).getEndPos());
assertEquals(1,kr.getMatch(1).getStartPos());
assertEquals(2,kr.getMatch(1).getEndPos());
assertEquals(4,kr.getMatch(2).getStartPos());
assertEquals(5,kr.getMatch(2).getEndPos());
}
/** Window
* */
@Test
public void testCase9() throws IOException {
ki.addDoc(createFieldDoc2());
ki.commit();
SpanRelationPartQuery rv = new SpanRelationPartQuery(
new SpanRelationQuery(
new SpanTermQuery(new Term("base",">:child-of")),true
),
new SpanElementQuery("base","np"),
6, true, false, true);
kr = ki.search(rv,(short) 10);
assertEquals((long) 7, kr.getTotalResults());
rv =new SpanRelationPartQuery(
new SpanRelationQuery(
new SpanTermQuery(new Term("base","<:dep")),true
),
new SpanTermWithIdQuery(new Term("base","pos:NN"),true),
3, false, true, true);
kr = ki.search(rv,(short) 10);
/*for (KorapMatch km : kr.getMatches()){
System.out.println(km.getStartPos() +","+km.getEndPos()
+" "+km.getSnippetBrackets()
);
}*/
assertEquals((long) 3, kr.getTotalResults());
assertEquals(1,kr.getMatch(0).getStartPos());
assertEquals(2,kr.getMatch(0).getEndPos());
assertEquals(1,kr.getMatch(1).getStartPos());
assertEquals(2,kr.getMatch(1).getEndPos());
assertEquals(4,kr.getMatch(2).getStartPos());
assertEquals(5,kr.getMatch(2).getEndPos());
}
}