view src/pagerank/TPReadWikiLink.java @ 9:9787663edb54 draft

delete if expression in computePageRank method.
author one
date Wed, 05 Sep 2012 18:44:03 +0900
parents 4d1885a2fa36
children c7a7c53702dd
line wrap: on
line source

package pagerank;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedList;

import com.tinkerpop.blueprints.Graph;
import com.tinkerpop.blueprints.Vertex;
import com.tinkerpop.blueprints.impls.tg.TinkerGraph;
import com.tinkerpop.blueprints.util.io.graphml.GraphMLReader;
import com.tinkerpop.blueprints.util.io.graphml.GraphMLWriter;

import pagerank.WikiPage;

public class TPReadWikiLink {

	public static void main(String[] args) {

		final String fileDB = "./resources/tinkerpopDB";
		
		
		try {
			Graph graph = new TinkerGraph();
			FileInputStream in = new FileInputStream(new File(fileDB));
			GraphMLReader.inputGraph(graph, in);
			in.close();
			LinkToVertex ltv = new LinkToVertex(graph);

//			ltv.initPageRankAllVertex();
			final long AllVertexNumber = ltv.searchAllVertices();
			HashMap<String, WikiPage> wikiHash = ltv.getWikiPageHash();
			System.out.println("AllVertexNumber = "+AllVertexNumber);

/*
			String nodeIds[] = {"80", "290", "21", "164"};
			writeComputeTransition(ltv, nodeIds, 50);

*/
			FileOutputStream fos = new FileOutputStream(new File("./resources/wikiPageRank.log"));
			descendingOrder(wikiHash, fos);			


			FileOutputStream out = new FileOutputStream(new File(fileDB));
			GraphMLWriter.outputGraph(graph, out);
			out.close();

			
//			loop(ltv);
			
		} catch (NumberFormatException e){
			System.out.println("Program exit");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {

		}

	}

	public static void loop(LinkToVertex ltv) throws IOException {
		BufferedReader r = new BufferedReader( new InputStreamReader(System.in), 1);
		System.out.print("\nPlease enter Node Id...>");
		System.out.flush();
		String s;
		while ((s = r.readLine()) != null ) {
			int nodeId = Integer.parseInt(s);
			ltv.printVertexInfo(nodeId);
			System.out.print("\nPlease enter Node Id...>");
			System.out.flush();
		}
	}

	public static void writeComputeTransition(LinkToVertex ltv,final String nodeIds[], int count) throws IOException {
		LinkedList<FileOutputStream> fosList = new LinkedList<FileOutputStream>();
		for (String id: nodeIds) {
			String filename = "./resources/NodeId_"+id+".dat";
			FileOutputStream fos = null;
			fos = new FileOutputStream(filename);

			Vertex v = ltv.getVertexById(id);
			fos.write( ("# Node ID "+id+" "+ ltv.getPageTitle(v)+"\n").getBytes());
			fosList.add(fos);
		}
		
		for (int i=0; i<count; i++) {
			for (Vertex v : ltv.getAllVertices() ) {
				ltv.computePageRank(v);
			}

			for (int index=0; index<nodeIds.length; index++){
				FileOutputStream fos = fosList.get(index);
				printPageRankLog(fos, ltv, nodeIds[index], i);
			}
		}
		for (FileOutputStream fos: fosList) {
			fos.close();
		}
		
	}
	
	// Write PageRank in descending order to fos.
	public static void descendingOrder(HashMap<String, WikiPage> wikiHash , FileOutputStream fos) throws IOException {
		ArrayList<WikiPage> list = new ArrayList<WikiPage>();
		for (String title : wikiHash.keySet()) {
			WikiPage w = wikiHash.get(title);
			list.add(w);
		}
		Collections.sort(list, new Comparator<WikiPage>(){
				public int compare(WikiPage w1, WikiPage w2) {
				return (int)(w2.getRank()*Math.pow(10, 10)) - (int)(w1.getRank()*Math.pow(10,10));
				}
		});
		
		for (WikiPage w : list) {
			w.printInfo(fos);
		}
		fos.close();
		
	}
	
	public static void printPageRankLog(FileOutputStream fos, int x, double rank) throws IOException {
		fos.write( (x+" "+ rank+"\n").getBytes() );		
		fos.flush();
	}
	
	public static void printPageRankLog(FileOutputStream fos, LinkToVertex ltv, String id, int x) throws IOException {
		double rank = ltv.getPageRank(ltv.getVertexById(id));
		fos.write( (x+" "+ rank+"\n").getBytes() );		
		fos.flush();
	}

}