private Hashtable<String, Double> evaluateObjectRank(Digraph digraph, JSONObject jsonObj,
			String word) {
		double d = 0.2;
		double transferRate = 0.2;
		Hashtable<String, Double> objectRankHT = new Hashtable<String, Double>();
		String matchNodesStr = this.searchIndex.get(word);
		List<String> matchNodesList = new ArrayList<String>();
		if( matchNodesStr != null ) {
			StringTokenizer tokenizer = new StringTokenizer(matchNodesStr);
			while( tokenizer.hasMoreTokens() ) {
				String token = tokenizer.nextToken();
				matchNodesList.add(token);
				//System.out.println("Match node: " + token);
			}
		}
		JSONArray topSortedNodesArray = null;
		double base = 1.0/ digraph.nVertices();
		double val = 0.0;
		if( matchNodesList.size() > 0 )
			val = (1.0-d) / matchNodesList.size();
		//System.out.println("val: " + val);
		//System.out.println("base: " + base);
		try {
			topSortedNodesArray = jsonObj.getJSONArray("nodes");
			for( int i = 0; i < topSortedNodesArray.length(); i++ ) {
				JSONObject nodeObj = topSortedNodesArray.getJSONObject(i);
				String nodeId = nodeObj.getString("nodeId");
				if( matchNodesList.contains(nodeId) )
					objectRankHT.put(nodeId, d * base + val);
				else
					objectRankHT.put(nodeId, d * base);
			}
			for( int i = 0; i < topSortedNodesArray.length(); i++ ) {
				JSONObject nodeObj = topSortedNodesArray.getJSONObject(i);
				String nodeId = nodeObj.getString("nodeId");
				//System.out.println(nodeId);
				double nodeOR = objectRankHT.get(nodeId);
				List<String> adjList = digraph.getAdjList(nodeId);
				double alpha = 0.0;
				if( adjList.size() > 0 )
					alpha = transferRate / adjList.size();
				for( String adjNode : adjList ) {
					double adjNodeOR = objectRankHT.get(adjNode);
					objectRankHT.put(adjNode, adjNodeOR + nodeOR * alpha );
				}
			}
		}
		catch (JSONException e) {
			e.printStackTrace();
		}
		return objectRankHT;
	}