@Override
  /**
   *  get content of annotation sentence and use NER gene model to classify the sentence in each annotation, 
   *  obtain start index and end index of filtered words and
   *  revise by subtracting the number of blanks. the gene annotation also stored the ID and words. 
   * 
   * @param aCas 
   *          A JCas object provides the starting point for working with the CAS using Java Cover Classes for each  type, generated by the utility JCasGen. 
   *
   * @throws ClassNotFoundException   
   *           Description of ClassNotFoundException found no such model
   * @throws IOException 
   *            Description of IOException fail to visit model
   */
  public synchronized void process(JCas aCas) throws AnalysisEngineProcessException {
    FSIterator<Annotation> it = aCas.getAnnotationIndex(Sentence.type).iterator();
    try {
      chunker = (ConfidenceChunker) AbstractExternalizable.readObject(modelFile);
    } catch (ClassNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    while (it.hasNext()) {
      Sentence annot = (Sentence) it.next();
      String temp = annot.getWords();
      char[] cs = temp.toCharArray();
      Iterator<Chunk> gene_it = chunker.nBestChunks(cs, 0, cs.length, MAX_N_BEST_CHUNKS);
      while (gene_it.hasNext()) {
        Chunk chunk = gene_it.next();
        double conf = Math.pow(2.0, chunk.score());
        if (conf < 0.65) {
          break;
        }
        int start = chunk.start();
        int end = chunk.end();
        String phrase = temp.substring(start, end);
        int outshift = 0, innershift = 0;
        outshift = countBlanks(temp, 0, start);
        innershift = countBlanks(temp, start, end);
        Gene gene = new Gene(aCas);
        gene.setBegin(start);
        gene.setEnd(end);
        gene.setID(annot.getID());
        gene.setWords(phrase);
        gene.setConfidence(conf);
        gene.setOutershift(outshift);
        gene.setInnershift(innershift);
        gene.addToIndexes(aCas);
      }
    }
  }