Mercurial > hg > Members > nobuyasu > TPPageRank
diff src/pagerank/LinkToVertex.java @ 2:1744340f8be6 draft
add some java files
author | one |
---|---|
date | Wed, 05 Sep 2012 11:56:21 +0900 |
parents | |
children | dcd59917a2dd |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/pagerank/LinkToVertex.java Wed Sep 05 11:56:21 2012 +0900 @@ -0,0 +1,231 @@ +package pagerank; + +import java.util.HashMap; + +import com.tinkerpop.blueprints.Direction; +import com.tinkerpop.blueprints.Edge; +import com.tinkerpop.blueprints.Graph; +import com.tinkerpop.blueprints.Vertex; + +import pagerank.WikiPage; + +public class LinkToVertex { + + Graph graph; + public final static String PAGE_TITLE = "pageTitle"; + public final static String PAGE_RANK = "pageRank"; + private HashMap<String, Long> pageIdTable = new HashMap<String, Long>(); + + private HashMap<String, WikiPage> wikiPageHash = new HashMap<String, WikiPage>(); + private long AllNodeNumber; + + private final double weight1 = 0.85; + private final double weight2 = 0.15; + + public static final String HAS_LINK = "HasLink"; + + LinkToVertex(Graph graph) { + this.graph = graph; + AllNodeNumber = 0; + } + + Long getId(String pageTitle) { + return pageIdTable.get(pageTitle); + } + + boolean isHasLink(String label) { + return label.equals(HAS_LINK); + } + + private Vertex createVertex() { + return graph.addVertex(null); + } + + private Vertex createVertex(Object id) { + return graph.addVertex(id); + } + + private Vertex createVertexWithProperty(String key, Object value) { + Vertex v = graph.addVertex(null); + v.setProperty(key,value); + return v; + } + + String getPageTitle(Vertex v) { + return (String) v.getProperty(PAGE_TITLE); + } + + Double getPageRank(Vertex v) { + return (Double) v.getProperty(PAGE_RANK); + } + + Vertex createVertexWithPageTitle(String pageTitle) { + Vertex v = createVertexWithProperty(PAGE_TITLE, pageTitle); + pageIdTable.put(pageTitle, (Long) v.getId()); + return v; + } + + Vertex setPageRank(Vertex v, Double rank) { + v.setProperty(PAGE_RANK, rank); + return v; + } + + Vertex getVertex(String name) { + long id = pageIdTable.get(name); + return graph.getVertex(id); + } + + Vertex getNode(int nodeId) { + return graph.getVertex(nodeId); + } + + Edge setRelationship(Vertex v1, Vertex v2, String label) { + Edge e = graph.addEdge(null, v1, v2, label); + return e; + } + + Edge setHasLink(Vertex v1, Vertex v2) { + return setRelationship(v1, v2, HAS_LINK); + } + + long searchAllNodes() { + AllNodeNumber = 0; + for (Vertex v : graph.getVertices()) { + if ( (v.getProperty(PAGE_TITLE) != null) && + (v.getProperty(PAGE_RANK)) != null ) { + WikiPage wiki = new WikiPage(v); + pageIdTable.put((String) v.getProperty(PAGE_TITLE), (Long) v.getId()); + wiki.setInHasLink(computeInHasLink(v)); + wiki.setOutHasLink(computeOutHasLink(v)); + wikiPageHash.put((String) v.getProperty(PAGE_TITLE), wiki); + AllNodeNumber++; + } + } + return AllNodeNumber; + } + + void searchRegiNodes(Vertex v) { + + if ( (v.getProperty(PAGE_TITLE) != null) && + (v.getProperty(PAGE_RANK) != null)) { + WikiPage wiki = new WikiPage(v); + pageIdTable.put((String) v.getProperty(PAGE_TITLE), (Long) v.getId()); + wiki.setInHasLink(computeInHasLink(v)); + wiki.setOutHasLink(computeOutHasLink(v)); + wikiPageHash.put((String) v.getProperty(PAGE_TITLE), wiki); + AllNodeNumber++; + } + } + + HashMap<String, WikiPage> getWikiPageHash() { + return wikiPageHash; + } + + HashMap<String, Long> getPageIdTable() { + return pageIdTable; + } + + public Iterable<Vertex> getAllNodes() { + return graph.getVertices(); + } + + public void printAllNodes() { + for (Vertex v : graph.getVertices() ) { + System.out.println("ID = "+ v.getId()); + for (String key: v.getPropertyKeys()) { + System.out.println(key + "=" + v.getProperty(key)); + } +/* + for (Edge e : v.getEdges(Direction.IN, HAS_LINK) ) { + System.out.println(); + } +*/ + } + System.out.println("--"); + + } + + public long computeOutHasLink(Vertex v) { + long count = 0; + for (Edge edge : v.getEdges(Direction.OUT, HAS_LINK)) { + count++; + } + return count; + } + + public long computeInHasLink(Vertex v) { + long count = 0; + for (Edge edge : v.getEdges(Direction.IN, HAS_LINK)) { + count++; + } + return count; + } + + public void printOutHasLink(Vertex v, int depth) { + int numberOfLinkPages = 0; + String output = v.getProperty(PAGE_TITLE) + " outHasLink pages:"; + System.out.println(output); + for (Edge edge : v.getEdges(Direction.OUT, HAS_LINK)) { + Vertex outV = edge.getVertex(Direction.IN); + String str = (String) outV.getProperty(PAGE_TITLE); + System.out.println(str); + numberOfLinkPages++; + } + String numOutput = "Number of outHaslink pages: " + numberOfLinkPages; + System.out.println(numOutput); + } + + public void printInHasLink(Vertex v, int depth) { + int numberOfLinkPages = 0; + String output = v.getProperty(PAGE_TITLE) + " inHasLink pages:"; + System.out.println(output); + for (Edge edge : v.getEdges(Direction.IN, HAS_LINK)) { + Vertex outV = edge.getVertex(Direction.OUT); + String str = (String) outV.getProperty(PAGE_TITLE); + System.out.println(str); + numberOfLinkPages++; + } + String numOutput = "Number of inHaslink pages: " + numberOfLinkPages + "\n"; + System.out.println(numOutput); + } + + public double computePageRank(Vertex v) { + double sum = 0; + double pageRank = 0; + String title = getPageTitle(v); + WikiPage wiki = wikiPageHash.get(title); + + for (Edge edge : v.getEdges(Direction.IN, HAS_LINK) ) { + Vertex linkV = edge.getVertex(Direction.OUT); + sum += (double) ((Double) linkV.getProperty(PAGE_RANK)) / computeInHasLink(linkV) ; + } + + if (computeOutHasLink(v) == 0) { + pageRank = (double) sum * weight1 + + (double) ((double) 1 / AllNodeNumber * weight2); + } else { + pageRank = (double) ((double)sum / computeOutHasLink(v) * weight1) + + (double) ((double) 1 / AllNodeNumber * weight2); + } + wiki.setRank(pageRank); + v.setProperty(PAGE_RANK, pageRank); + return pageRank; + } + + public void printNodeInfo(int nodeId) { + Vertex v = graph.getVertex(nodeId); + printInHasLink(v, 1); + printOutHasLink(v, 1); + + String title = getPageTitle(v); + double rank = getPageRank(v); + long inHasLink = computeInHasLink(v); + long outHasLink = computeOutHasLink(v); + + System.out.println("id:"+nodeId+" title:"+title+" rank:"+rank); + System.out.println("inHasLink:"+inHasLink+" outHasLink:"+outHasLink); + + + } + +}