Revision: 14446
http://gate.svn.sourceforge.net/gate/?rev=14446&view=rev
Author: valyt
Date: 2011-10-27 13:13:28 +0000 (Thu, 27 Oct 2011)
Log Message:
-----------
More work in support of document metadata.
Modified Paths:
--------------
mimir/trunk/mimir-core/src/gate/mimir/AbstractSemanticAnnotationHelper.java
mimir/trunk/mimir-core/src/gate/mimir/index/Mention.java
mimir/trunk/mimir-core/src/gate/mimir/index/mg4j/MentionsIndexBuilder.java
mimir/trunk/mimir-core/src/gate/mimir/search/QueryEngine.java
mimir/trunk/mimir-core/src/gate/mimir/search/query/AnnotationQuery.java
Modified:
mimir/trunk/mimir-core/src/gate/mimir/AbstractSemanticAnnotationHelper.java
===================================================================
--- mimir/trunk/mimir-core/src/gate/mimir/AbstractSemanticAnnotationHelper.java
2011-10-27 12:26:57 UTC (rev 14445)
+++ mimir/trunk/mimir-core/src/gate/mimir/AbstractSemanticAnnotationHelper.java
2011-10-27 13:13:28 UTC (rev 14446)
@@ -174,7 +174,7 @@
*/
protected String annotationType;
- private boolean isDocumentHelper = false;
+ private boolean isInDocumentMode = false;
public String getAnnotationType() {
return annotationType;
@@ -251,7 +251,7 @@
@Override
public boolean isInDocumentMode() {
- return isDocumentHelper;
+ return isInDocumentMode;
}
/**
@@ -260,7 +260,7 @@
* as a document helper.
*/
public SemanticAnnotationHelper asDocumentHelper() {
- isDocumentHelper = true;
+ isInDocumentMode = true;
return this;
}
Modified: mimir/trunk/mimir-core/src/gate/mimir/index/Mention.java
===================================================================
--- mimir/trunk/mimir-core/src/gate/mimir/index/Mention.java 2011-10-27
12:26:57 UTC (rev 14445)
+++ mimir/trunk/mimir-core/src/gate/mimir/index/Mention.java 2011-10-27
13:13:28 UTC (rev 14446)
@@ -23,6 +23,13 @@
* Simple holder class holding the URI and length of a mention.
*/
public class Mention {
+
+ /**
+ * Special value used when the mention has no length information (e.g. if it
+ * refers to document metadata hit).
+ */
+ public static final int NO_LENGTH = -1;
+
private int length;
private String uri;
Modified:
mimir/trunk/mimir-core/src/gate/mimir/index/mg4j/MentionsIndexBuilder.java
===================================================================
--- mimir/trunk/mimir-core/src/gate/mimir/index/mg4j/MentionsIndexBuilder.java
2011-10-27 12:26:57 UTC (rev 14445)
+++ mimir/trunk/mimir-core/src/gate/mimir/index/mg4j/MentionsIndexBuilder.java
2011-10-27 13:13:28 UTC (rev 14446)
@@ -26,6 +26,7 @@
import gate.mimir.IndexConfig.SemanticIndexerConfig;
import gate.mimir.index.IndexException;
import gate.mimir.index.Indexer;
+import gate.mimir.index.Mention;
import gate.util.OffsetComparator;
import java.util.Arrays;
@@ -189,7 +190,7 @@
// obtain the URIs to be indexed for the *document* metadata
List<String> terms = new LinkedList<String>();
for(SemanticAnnotationHelper aHelper : documentHelpers) {
- String[] someTerms = aHelper.getMentionUris(null, -1, indexer);
+ String[] someTerms = aHelper.getMentionUris(null, Mention.NO_LENGTH,
indexer);
if(someTerms != null) {
for(String aTerm : someTerms) {
terms.add(aTerm);
Modified: mimir/trunk/mimir-core/src/gate/mimir/search/QueryEngine.java
===================================================================
--- mimir/trunk/mimir-core/src/gate/mimir/search/QueryEngine.java
2011-10-27 12:26:57 UTC (rev 14445)
+++ mimir/trunk/mimir-core/src/gate/mimir/search/QueryEngine.java
2011-10-27 13:13:28 UTC (rev 14446)
@@ -33,6 +33,7 @@
import gate.mimir.search.query.*;
import gate.mimir.search.query.parser.ParseException;
import gate.mimir.search.query.parser.QueryParser;
+import it.unimi.dsi.fastutil.ints.IntList;
import it.unimi.dsi.mg4j.index.DiskBasedIndex;
import it.unimi.dsi.mg4j.index.Index;
import it.unimi.dsi.mg4j.index.Index.UriKeys;
@@ -126,6 +127,12 @@
private volatile transient WriteDeletedDocsTask writeDeletedDocsTask;
/**
+ * The document sizes used during search time (if running in document mode)
to
+ * simulate document-spanning annotations.
+ */
+ private transient IntList documentSizes;
+
+ /**
* The name for the file (stored in the root index directory) containing
* the serialised version of the {@link #deletedDocumentIds}.
*/
@@ -250,6 +257,15 @@
}
/**
+ * Gets the list of document sizes from one underlying MG4J index (all
+ * sub-indexes should have the same sizes).
+ * @return
+ */
+ public IntList getDocumentSizes() {
+ return documentSizes;
+ }
+
+ /**
* Returns the index that stores the data for a particular feature of token
* annotations.
*
@@ -315,6 +331,10 @@
for(SemanticIndexerConfig sic : indexConfig.getSemanticIndexers()){
for(SemanticAnnotationHelper sah : sic.getHelpers()){
sah.init(this);
+ if(sah.isInDocumentMode() && documentSizes == null) {
+ documentSizes =
+
getAnnotationIndex(sic.getAnnotationTypes()[0]).getIndex().sizes;
+ }
}
}
}
Modified:
mimir/trunk/mimir-core/src/gate/mimir/search/query/AnnotationQuery.java
===================================================================
--- mimir/trunk/mimir-core/src/gate/mimir/search/query/AnnotationQuery.java
2011-10-27 12:26:57 UTC (rev 14445)
+++ mimir/trunk/mimir-core/src/gate/mimir/search/query/AnnotationQuery.java
2011-10-27 13:13:28 UTC (rev 14446)
@@ -23,12 +23,11 @@
import gate.mimir.Constraint;
import gate.mimir.ConstraintType;
import gate.mimir.IndexConfig;
+import gate.mimir.IndexConfig.SemanticIndexerConfig;
import gate.mimir.SemanticAnnotationHelper;
-import gate.mimir.IndexConfig.SemanticIndexerConfig;
import gate.mimir.index.Mention;
-import gate.mimir.index.mg4j.MentionsIndexBuilder;
import gate.mimir.search.QueryEngine;
-
+import it.unimi.dsi.fastutil.ints.IntList;
import it.unimi.dsi.fastutil.objects.ReferenceSet;
import it.unimi.dsi.mg4j.index.Index;
import it.unimi.dsi.mg4j.search.visitor.DocumentIteratorVisitor;
@@ -78,12 +77,15 @@
*/
private QueryExecutor underlyingExecutor;
+ private transient boolean isInDocumentMode;
+
/**
* Build the underlying OrQuery executor that this annotation query uses.
*/
protected void buildQuery() throws IOException {
// find the semantic annotation helper for the right annotation type
SemanticAnnotationHelper helper =
getAnnotationHelper(engine.getIndexConfig());
+ isInDocumentMode = helper.isInDocumentMode();
// ask the helper for the mentions that correspond to this query
long start = System.currentTimeMillis();
List<Mention> mentions =
helper.getMentions(query.getAnnotationType(),
@@ -157,11 +159,18 @@
if(closed) return null;
Binding underlyingHit = underlyingExecutor.nextHit();
if(underlyingHit == null) return null;
-
- return new Binding(query, underlyingHit.getDocumentId(),
- underlyingHit.getTermPosition(),
- underlyingHit.getLength(),
- underlyingHit.getContainedBindings());
+ int doc = underlyingHit.getDocumentId();
+ if(isInDocumentMode) {
+ return new Binding(query, doc, 0,
+ engine.getDocumentSizes().getInt(doc),
+ underlyingHit.getContainedBindings());
+ } else {
+ return new Binding(query, doc,
+ underlyingHit.getTermPosition(),
+ underlyingHit.getLength(),
+ underlyingHit.getContainedBindings());
+ }
+
}
@Override
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
The demand for IT networking professionals continues to grow, and the
demand for specialized networking skills is growing even more rapidly.
Take a complimentary Learning@Cisco Self-Assessment and learn
about Cisco certifications, training, and career opportunities.
http://p.sf.net/sfu/cisco-dev2dev
_______________________________________________
GATE-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gate-cvs