public HashMap<String, ArrayList<Integer>> getWordList(Result result) {
		String content = parser(result.getUrl());
		String[] wordArr = content.split("\\W+");
		// storing this doc's length
		result.setLength(wordArr.length);

		// now generate the word list
		HashMap<String, ArrayList<Integer>> ret = new HashMap<String, ArrayList<Integer>>();

		String[] wikiIgnores = new String[] { "retrieved", "archived",
				"january", "february", "march", "april", "may", "june", "july",
				"august", "september", "october", "november", "december" };
		HashSet<String> wikipediaIgnore = new HashSet<String>(
				Arrays.asList(wikiIgnores));

		for (int i = 0; i < wordArr.length; i++) {
			String str = wordArr[i].toLowerCase();

			if (result.getUrl().matches("^http://en\\.wikipedia\\.org.*")) {
				if (wikipediaIgnore.contains(str)
						|| str.matches("^19[0-9][0-9]|^20[0-9][0-9]")) {
					/**
					 * ignore the word "retrieved" and "archived" from wikipedia
					 * also ignore all months, this appear in wikipedia's
					 * references every frequently,
					 *  every references in wikipedia
					 * has a word "retrieve" or "archived" also, ignore the
					 * years 19XX and 20XX, they appear in many many references
					 */

					continue;

				}
			}

			// don't care single digit, they might be chapter number etc.
			// don't care single letter either, because they are meaningless

			if (!str.matches("\\d{1,2}|\\w{1}|_*")) {
				if (ret.containsKey(str)) {
					ret.get(str).add(i);
				} else {
					ArrayList<Integer> posList = new ArrayList<Integer>();
					posList.add(i);
					ret.put(str, posList);
				}
			}
		}

		// mark the maximum tf, in order for the calculation of maxTf algorithm
		Iterator<Map.Entry<String, ArrayList<Integer>>> it = ret.entrySet()
				.iterator();
		int maxTf = 0;
		while (it.hasNext()) {
			Map.Entry<String, ArrayList<Integer>> pairs = (Map.Entry<String, ArrayList<Integer>>) it
					.next();
			ArrayList<Integer> posList = pairs.getValue();
			maxTf = Math.max(maxTf, posList.size());
		}
		result.setMaxTf(maxTf);

		return ret;
	}