public void extractFeature(List<Article> artList, boolean isTraining) {
		final int SENT_LEN_MAX_CUTOFF = 10;
		final int SENT_LEN_MIN_CUTTOFF = 3;
		String fileName = new Date().getTime()
				+ "-pos-tag-compare-feature.data";
		PrintWriter out = null;
		try {
			out = new PrintWriter(new FileWriter("features/" + fileName));
			for (Article art : artList) {
				double maxDiffRate = 0;
				int sentLen = 0;
				for (String sent : art.getSentences()) {
					sent = sent.replaceAll("<[/]?s>", "").trim().toLowerCase();
					// Lingpipe tagging
					char[] cs = sent.toCharArray();
					Tokenizer tokenizer = TOKENIZER_FACTORY.tokenizer(cs, 0,
							cs.length);
					String[] tokens = tokenizer.tokenize();
					if (tokens.length > SENT_LEN_MAX_CUTOFF
							|| tokens.length < SENT_LEN_MIN_CUTTOFF) {
						continue;
					}
					List<String> tokenList = Arrays.asList(tokens);
					LinkedList<String> lingpipeTags = new LinkedList<String>();
					Tagging<String> tagging = decoder.tag(tokenList);
					for (int i = 0; i < tagging.size(); ++i) {
						// System.out.print(tagging.tag(i) + "\t");
						lingpipeTags.add(tagging.tag(i));
					}
					// System.out.println();

					// Stanford tagging
					LinkedList<String> stanfordTags = new LinkedList<String>();
					String taggedString = stanfordTagger
							.tagTokenizedString(prepareWhitespaceSentence(tokens));
					stanfordTags = extractTags(taggedString);

					// compare difference
					if (stanfordTags.size() != lingpipeTags.size()) {
						System.out.println("different length! " + art.getId());
					}

					int tokenCount = Math.max(stanfordTags.size(),
							lingpipeTags.size());
					double diffRate = ((double) countTaggingDifference(
							stanfordTags, lingpipeTags)) / tokenCount;
					if (maxDiffRate < diffRate) {
						maxDiffRate = diffRate;
						sentLen = tokenCount;
					}

					// int tokenCount = Math.max(stanfordTags.size(),
					// lingpipeTags.size());
					//
					// double diffCount = countTaggingDifference(stanfordTags,
					// lingpipeTags);
					// double avgdiff = ((double) diffCount) / tokenCount;
					// out.println(avgdiff + "\t" + tokenCount + "\t"
					// + art.getLabel() + "\t" + art.getId());
				}
				// System.out.println(art.getId());
				System.out.println(maxDiffRate + "\t" + sentLen + "\t"
						+ art.getLabel() + "\t" + art.getId());
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (out != null) {
				out.flush();
				out.close();
			}
		}
	}