docs: public HashSparseVector getFeatures() {
  		if (isFinalState())
  			return null;
  		
  		IFeatureAlphabet features = factory.DefaultFeatureAlphabet();
  
  		int rightFocus = leftFocus + 1;
  
  		HashSparseVector vec = new HashSparseVector();
  
  		// 设定上下文窗口大小
  		int l = 2;
  		int r = 2;
  		for (int i = 0; i <= l; i++) {
  			// 词性特征前缀
  			String posFeature = "-" + new Integer(i).toString() + "/pos/";
  			String lexFeature = "-" + new Integer(i).toString() + "/lex/";
  
  			String lcLexFeature = "-" + new Integer(i).toString()
  					+ "/ch-L-lex/";
  			String lcPosFeature = "-" + new Integer(i).toString()
  					+ "/ch-L-pos/";
  			String rcLexFeature = "-" + new Integer(i).toString()
  					+ "/ch-R-lex/";
  			String rcPosFeature = "-" + new Integer(i).toString()
  					+ "/ch-R-pos/";
  
  			if (leftFocus - i < 0) {
  				addFeature(features, vec,
  						lexFeature + "START" + String.valueOf(i - leftFocus));
  				addFeature(features, vec,
  						posFeature + "START" + String.valueOf(i - leftFocus));
  			} else {
  				addFeature(
  						features,
  						vec,
  						lexFeature
  								+ instance.words[trees.get(leftFocus - i).id]);
  				addFeature(features, vec, posFeature
  						+ instance.tags[trees.get(leftFocus - i).id]);
  
  				if (trees.get(leftFocus - i).leftChilds.size() != 0) {
  					for (int j = 0; j < trees.get(leftFocus - i).leftChilds
  							.size(); j++) {
  						int leftChildIndex = trees.get(leftFocus - i).leftChilds
  								.get(j).id;
  						addFeature(features, vec, lcLexFeature
  								+ instance.words[leftChildIndex]);
  						addFeature(features, vec, lcPosFeature
  								+ instance.tags[leftChildIndex]);
  					}
  				}
  
  				if (trees.get(leftFocus - i).rightChilds.size() != 0) {
  					for (int j = 0; j < trees.get(leftFocus - i).rightChilds
  							.size(); j++) {
  						int rightChildIndex = trees.get(leftFocus - i).rightChilds
  								.get(j).id;
  						addFeature(features, vec, rcLexFeature
  								+ instance.words[rightChildIndex]);
  						addFeature(features, vec, rcPosFeature
  								+ instance.tags[rightChildIndex]);
  					}
  				}
  			}
  		}
  
  		for (int i = 0; i <= r; i++) {
  			String posFeature = "+" + new Integer(i).toString() + "/pos/";
  			String lexFeature = "+" + new Integer(i).toString() + "/lex/";
  
  			String lcLexFeature = "+" + new Integer(i).toString()
  					+ "/ch-L-lex/";
  			String lcPosFeature = "+" + new Integer(i).toString()
  					+ "/ch-L-pos/";
  			String rcLexFeature = "+" + new Integer(i).toString()
  					+ "/ch-R-lex/";
  			String rcPosFeature = "+" + new Integer(i).toString()
  					+ "/ch-R-pos/";
  
  			if (rightFocus + i >= trees.size()) {
  				addFeature(
  						features,
  						vec,
  						lexFeature
  								+ "END"
  								+ String.valueOf(rightFocus + i
  										- trees.size() + 3));
  				addFeature(
  						features,
  						vec,
  						posFeature
  								+ "END"
  								+ String.valueOf(rightFocus + i
  										- trees.size() + 3));
  			} else {
  				addFeature(
  						features,
  						vec,
  						lexFeature
  								+ instance.words[trees.get(rightFocus + i).id]);
  				addFeature(features, vec, posFeature
  						+ instance.tags[trees.get(rightFocus + i).id]);
  
  				if (trees.get(rightFocus + i).leftChilds.size() != 0) {
  					for (int j = 0; j < trees.get(rightFocus + i).leftChilds
  							.size(); j++) {
  						int leftChildIndex = trees.get(rightFocus + i).leftChilds
  								.get(j).id;
  						addFeature(features, vec, lcLexFeature
  								+ instance.words[leftChildIndex]);
  						addFeature(features, vec, lcPosFeature
  								+ instance.tags[leftChildIndex]);
  					}
  				}
  
  				if (trees.get(rightFocus + i).rightChilds.size() != 0) {
  					for (int j = 0; j < trees.get(rightFocus + i).rightChilds
  							.size(); j++) {
  						int rightChildIndex = trees.get(rightFocus + i).rightChilds
  								.get(j).id;
  						addFeature(features, vec, rcLexFeature
  								+ instance.words[rightChildIndex]);
  						addFeature(features, vec, rcPosFeature
  								+ instance.tags[rightChildIndex]);
  					}
  				}
  			}
  		}
  
  		return vec;
  	}