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

Reply via email to