Revision: 14474
http://gate.svn.sourceforge.net/gate/?rev=14474&view=rev
Author: valyt
Date: 2011-11-01 15:50:56 +0000 (Tue, 01 Nov 2011)
Log Message:
-----------
- if multiple helper implementatons are avaialble, test then against each-other
- test for document features indexing.
Modified Paths:
--------------
mimir/trunk/mimir-test/src/gate/mimir/test/QueryTests.java
Modified: mimir/trunk/mimir-test/src/gate/mimir/test/QueryTests.java
===================================================================
--- mimir/trunk/mimir-test/src/gate/mimir/test/QueryTests.java 2011-11-01
14:55:19 UTC (rev 14473)
+++ mimir/trunk/mimir-test/src/gate/mimir/test/QueryTests.java 2011-11-01
15:50:56 UTC (rev 14474)
@@ -40,9 +40,14 @@
import gate.mimir.search.query.SequenceQuery;
import gate.mimir.search.query.TermQuery;
import gate.mimir.search.query.WithinQuery;
+import gate.mimir.search.query.parser.ParseException;
+import gate.mimir.search.query.parser.QueryParser;
+import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.net.URL;
@@ -270,21 +275,27 @@
}
@Test
- public void annotationQuery() throws IndexException {
- for(File indexDir : indexDirs) {
- QueryEngine engine = new QueryEngine(indexDir);
+ public void annotationQuery() throws IndexException, IOException {
+ String[] qResNames = new String[indexDirs.length];
+ for(int i = 0; i < indexDirs.length; i++) {
+ QueryEngine engine = new QueryEngine(indexDirs[i]);
Map<String, String> constraints = new HashMap<String, String>();
constraints.put("spec", "1 to 32 degF");
AnnotationQuery annQuery = new AnnotationQuery("Measurement",
constraints);
- performQuery("annotation", annQuery, engine);
+ qResNames[i] = "annotation-" + i;
+ performQuery(qResNames[i], annQuery, engine);
engine.close();
}
+ if(qResNames.length > 1) {
+ assertTrue("Got different results from different helpers",
identical(qResNames));
+ }
}
@Test
- public void testStringSequenceQuery() throws IndexException {
- for(File indexDir : indexDirs) {
- QueryEngine engine = new QueryEngine(indexDir);
+ public void testStringSequenceQuery() throws IndexException, IOException {
+ String[] qResNames = new String[indexDirs.length];
+ for(int i = 0; i < indexDirs.length; i++) {
+ QueryEngine engine = new QueryEngine(indexDirs[i]);
String[] terms = new String[] {"up", "to", "the"};
// String[] terms = new String[]{"ability", "of", /*"the", "agent",*/
"to",
// "form", "an", "acid", "or", "base", "upon", "heating", "whereby",
@@ -292,90 +303,124 @@
// "within", "a", "short", "period", "to", "yield", "water", "and",
// "carbon"};
TermQuery[] termQueries = new TermQuery[terms.length];
- for(int i = 0; i < terms.length; i++) {
- termQueries[i] = new TermQuery("string", terms[i]);
+ for(int j = 0; j < terms.length; j++) {
+ termQueries[i] = new TermQuery("string", terms[j]);
}
SequenceQuery.Gap[] gaps = new SequenceQuery.Gap[28];
gaps[1] = SequenceQuery.getGap(2, 3);
SequenceQuery sequenceQuery = new SequenceQuery(null/* gaps */,
termQueries);
- performQuery("termSequence", sequenceQuery, engine);
+ qResNames[i] = "termSequence-" + i;
+ performQuery(qResNames[i], sequenceQuery, engine);
engine.close();
}
+ if(qResNames.length > 1) {
+ assertTrue("Got different results from different helpers",
identical(qResNames));
+ }
}
@Test
- public void testCategorySequenceQuery() throws IndexException {
- for(File indexDir : indexDirs) {
- QueryEngine engine = new QueryEngine(indexDir);
+ public void testCategorySequenceQuery() throws IndexException, IOException {
+ String[] qResNames = new String[indexDirs.length];
+ for(int i = 0; i < indexDirs.length; i++) {
+ QueryEngine engine = new QueryEngine(indexDirs[i]);
String[] terms = new String[]{"NN", "NN", "NN"};
TermQuery[] termQueries = new TermQuery[terms.length];
- for(int i = 0; i < terms.length; i++) {
- termQueries[i] = new TermQuery("category", terms[i]);
+ for(int j = 0; j < terms.length; j++) {
+ termQueries[j] = new TermQuery("category", terms[j]);
}
SequenceQuery.Gap[] gaps = new SequenceQuery.Gap[28];
gaps[1] = SequenceQuery.getGap(2, 3);
SequenceQuery sequenceQuery = new SequenceQuery(null/* gaps */,
termQueries);
- performQuery("categorySequence", sequenceQuery, engine);
+ qResNames[i] = "categorySequence-" + i;
+ performQuery(qResNames[i], sequenceQuery, engine);
engine.close();
}
+ if(qResNames.length > 1) {
+ assertTrue("Got different results from different helpers",
identical(qResNames));
+ }
}
@Test
- public void testAnnotationSequenceQuery() throws IndexException {
- for(File indexDir : indexDirs) {
- QueryEngine engine = new QueryEngine(indexDir);
+ public void testAnnotationSequenceQuery() throws IndexException, IOException
{
+ String[] qResNames = new String[indexDirs.length];
+ for(int i = 0; i < indexDirs.length; i++) {
+ QueryEngine engine = new QueryEngine(indexDirs[i]);
Map<String, String> empty = Collections.emptyMap();
AnnotationQuery annQuery = new AnnotationQuery("Measurement", empty);
SequenceQuery sequenceQuery = new SequenceQuery(null/* gaps */,
annQuery, annQuery, annQuery);
- performQuery("annotationSequence", sequenceQuery, engine);
+ qResNames[i] = "annotationSequence-" + i;
+ performQuery(qResNames[i], sequenceQuery, engine);
engine.close();
}
+ if(qResNames.length > 1) {
+ assertTrue("Got different results from different helpers",
identical(qResNames));
+ }
}
@Test
- public void testRepeatsQuery() throws IndexException {
- for(File indexDir : indexDirs) {
- QueryEngine engine = new QueryEngine(indexDir);
+ public void testRepeatsQuery() throws IndexException, IOException {
+ String[] qResNames = new String[indexDirs.length];
+ for(int i = 0; i < indexDirs.length; i++) {
+ QueryEngine engine = new QueryEngine(indexDirs[i]);
Map<String, String> empty = Collections.emptyMap();
AnnotationQuery annQuery = new AnnotationQuery("Measurement", empty);
RepeatsQuery repeatsQuery = new RepeatsQuery(annQuery, 3, 3);
- performQuery("repeats", repeatsQuery, engine);
+ qResNames[i] = "repeats-" + i;
+ performQuery(qResNames[i], repeatsQuery, engine);
engine.close();
}
+ if(qResNames.length > 1) {
+ assertTrue("Got different results from different helpers",
identical(qResNames));
+ }
}
@Test
- public void testWithinQuery() throws IndexException {
- for(File indexDir : indexDirs) {
- QueryEngine engine = new QueryEngine(indexDir);
+ public void testWithinQuery() throws IndexException, IOException {
+ String[] qResNames = new String[indexDirs.length];
+ for(int i = 0; i < indexDirs.length; i++) {
+ QueryEngine engine = new QueryEngine(indexDirs[i]);
AnnotationQuery intervalQuery = new AnnotationQuery("Measurement",
Collections.singletonMap("type", "interval"));
TermQuery toQuery = new TermQuery("string", "to");
WithinQuery withinQuery = new WithinQuery(toQuery, intervalQuery);
- performQuery("within", withinQuery, engine);
+ qResNames[i] = "within-" + i;
+ performQuery(qResNames[i], withinQuery, engine);
engine.close();
}
+ if(qResNames.length > 1) {
+ assertTrue("Got different results from different helpers",
identical(qResNames));
+ }
}
@Test
- public void testInAndQuery() throws IndexException {
- for(File indexDir : indexDirs) {
- QueryEngine engine = new QueryEngine(indexDir);
+ public void testInAndQuery() throws IndexException, IOException {
+ String[] qResNames = new String[indexDirs.length];
+ for(int i = 0; i < indexDirs.length; i++) {
+ QueryEngine engine = new QueryEngine(indexDirs[i]);
QueryNode inAndQuery = new WithinQuery(new AndQuery(new TermQuery(null,
"London"),
new TermQuery(null, "press")), new AnnotationQuery(
"Reference", new HashMap<String, String>()));
- performQuery("inAnd", inAndQuery, engine);
+ qResNames[i] = "inAnd-" + i;
+ performQuery(qResNames[i], inAndQuery, engine);
engine.close();
}
+ if(qResNames.length > 1) {
+ assertTrue("Got different results from different helpers",
identical(qResNames));
+ }
}
@Test
- public void testMeasurementSpecQuery() throws IndexException {
- for(File indexDir : indexDirs) {
- QueryEngine engine = new QueryEngine(indexDir);
+ public void testMeasurementSpecQuery() throws IndexException, IOException {
+ String[] qResNames = new String[indexDirs.length];
+ for(int i = 0; i < indexDirs.length; i++) {
+ QueryEngine engine = new QueryEngine(indexDirs[i]);
AnnotationQuery specQuery = new AnnotationQuery("Measurement",
Collections.singletonMap("spec", "5 cm"));
- performQuery("measurementSpec", specQuery, engine);
+ qResNames[i] = "measurementSpec-" + i;
+ performQuery(qResNames[i], specQuery, engine);
engine.close();
}
+ if(qResNames.length > 1) {
+ assertTrue("Got different results from different helpers",
identical(qResNames));
+ }
}
@Test
@@ -394,16 +439,42 @@
}
}
- private void performQuery(String name, QueryNode query, QueryEngine engine) {
-
+ /**
+ * Test the semantic annotation helpers used for indexing document features
+ * @throws IndexException
+ * @throws ParseException
+ * @throws IOException
+ */
+ @Test
+ public void testDocumentMode() throws IndexException, ParseException,
IOException {
+ String[] qResNames = new String[indexDirs.length];
+ String[] qResNames2 = new String[indexDirs.length];
+ for(int i = 0; i < indexDirs.length; i++) {
+ QueryEngine engine = new QueryEngine(indexDirs[i]);
+ QueryNode qNode = QueryParser.parse("{Document}");
+ qResNames[i] = "doc-" + i;
+ int hits = performQuery(qResNames[i], qNode, engine);
+
+ qNode = QueryParser.parse("{Document date > 20070000}");
+ qResNames2[i] = "docFeats-" + i;
+ int hits2 = performQuery(qResNames2[i], qNode, engine);
+ assertTrue("Feature filtering does not reduce the result set!",
+ hits2 < hits);
+ engine.close();
+ }
+ if(qResNames.length > 1) {
+ assertTrue("Got different results from different helpers",
identical(qResNames));
+ assertTrue("Got different results from different helpers",
identical(qResNames2));
+ }
+ }
+
+ private int performQuery(String name, QueryNode query, QueryEngine engine) {
QueryExecutor executor = null;
Binding hit = null;
FileWriter queryResult = null;
BufferedWriter writer = null;
int hitCount = 0;
-
try {
-
File resultsDirectory = new File(resultsPath);
if (!resultsDirectory.exists())
resultsDirectory.mkdirs();
@@ -447,8 +518,38 @@
fail(e.getMessage());
}
}
+ return hitCount;
}
+ /**
+ * Compares the files resulting from the execution of two or more queries.
+ * The queris must have been performed previously, by calling
+ * {@link #performQuery(String, QueryNode, QueryEngine)}.
+ * @param queryNames the names of the queries to compare.
+ * @return
+ * @throws IOException
+ */
+ private static boolean identical(String... queryNames) throws IOException {
+ BufferedReader[] readers = new BufferedReader[queryNames.length];
+ for(int i = 0; i < queryNames.length; i++) {
+ readers[i] = new BufferedReader(new FileReader(resultsPath + "/" +
+ queryNames[i] + "QueryResult.xml"));
+ }
+ String line = null;
+ do {
+ line = readers[0].readLine();
+ for(int i = 1; i < readers.length; i++) {
+ String anotherLine = readers[i].readLine();
+ if(line != null) {
+ if(anotherLine == null || !line.equals(anotherLine)) return false;
+ } else {
+ if(anotherLine != null) return false;
+ }
+ }
+ } while(line != null);
+ return true;
+ }
+
private String getHitString(Binding hit, QueryEngine searcher) throws
IndexException
{
StringBuilder sb = new StringBuilder();
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
RSA® Conference 2012
Save $700 by Nov 18
Register now
http://p.sf.net/sfu/rsa-sfdev2dev1
_______________________________________________
GATE-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gate-cvs