# HG changeset patch # User one # Date 1346135255 -32400 # Node ID 71fe482aaf32b1ed36299ba4e16e9871b090c071 # Parent 21902773e5301bec03fd452c7f6bceffe34b28a4 fix LinkToNode.java diff -r 21902773e530 -r 71fe482aaf32 src/wikigraph/LinkToNode.java --- a/src/wikigraph/LinkToNode.java Tue Aug 28 14:38:13 2012 +0900 +++ b/src/wikigraph/LinkToNode.java Tue Aug 28 15:27:35 2012 +0900 @@ -28,6 +28,7 @@ private HashMap pageRankTable = new HashMap(); private HashMap wikiPageHash = new HashMap(); + private long AllNodeNumber; public enum RelTypes implements RelationshipType { HAS_LINK @@ -36,16 +37,19 @@ LinkToNode(GraphDatabaseService graphDb) { this.graphDb = graphDb; this.graphOpe = GlobalGraphOperations.at(graphDb); + AllNodeNumber = 0; } LinkToNode(GraphDatabaseService graphDb, GlobalGraphOperations graphOpe) { this.graphDb = graphDb; this.graphOpe = graphOpe; + AllNodeNumber = 0; } void setGraphDb(GraphDatabaseService graphDb) { this.graphDb = graphDb; this.graphOpe = GlobalGraphOperations.at(graphDb); + AllNodeNumber = 0; } Long getId(String pageTitle) { @@ -92,7 +96,6 @@ return node; } - Node getNode(String name) { long id = pageIdTable.get(name); return graphDb.getNodeById(id); @@ -106,28 +109,25 @@ setRelationship(node1, node2, RelTypes.HAS_LINK); } - long searchPageTitleAllNodes() { - long AllNodeNumber = 0; + long searchAllNodes() { + AllNodeNumber = 0; for (Node n: graphOpe.getAllNodes()) { if (n.hasProperty(PAGE_TITLE)) { + WikiPage wiki = new WikiPage(n); + wikiPageHash.put((String)n.getProperty(PAGE_TITLE), wiki); pageIdTable.put((String)n.getProperty(PAGE_TITLE), n.getId()); pageRankTable.put((String)n.getProperty(PAGE_TITLE), (Long) n.getProperty(PAGE_RANK)); + wiki.setInLink(computeInHasLink(n)); + wiki.setOutLink(computeOutHasLink(n)); + AllNodeNumber++; } } return AllNodeNumber; } - long searchAllNodes() { - long AllNodeNumber = 0; - for (Node n: graphOpe.getAllNodes()) { - if (n.hasProperty(PAGE_TITLE)) { - WikiPage wiki = new WikiPage(n); - wikiPageHash.put((String)n.getProperty(PAGE_TITLE), wiki); - AllNodeNumber++; - } - } - return AllNodeNumber; + HashMap getWikiPageHash() { + return wikiPageHash; } HashMap getPageIdTable() { @@ -138,10 +138,6 @@ return pageRankTable; } - HashMap getWikiPageHash() { - return wikiPageHash; - } - public void printAllNodes() { for (Node n: graphOpe.getAllNodes()) { System.out.println("ID="+ n.getId()); @@ -157,28 +153,48 @@ } - public Traverser getInHasLink( final Node person) { + private Traverser getTraverser(final Node node, final Direction rel) { TraversalDescription td = Traversal.description() .breadthFirst() - .relationships( RelTypes.HAS_LINK, Direction.INCOMING ) + .relationships( RelTypes.HAS_LINK, rel ) .evaluator( Evaluators.excludeStartPosition()); - return td.traverse( person ); + return td.traverse( node ); + + } + + public Traverser getOutHasLinkTraverser( final Node node) { + return getTraverser(node, Direction.OUTGOING); + } + + public Traverser getInHasLinkTraverser( final Node node) { + return getTraverser(node, Direction.INCOMING); + } + + public long computeOutHasLink(final Node node) { + long count = 0; + Traverser hasLinkTraverser = getOutHasLinkTraverser(node); + for (Path hasLinkPath : hasLinkTraverser) { + if (hasLinkPath.length() > 1) break; + count++; + } + return count; } - public Traverser getOutHasLink( final Node person) { - TraversalDescription td = Traversal.description() - .breadthFirst() - .relationships( RelTypes.HAS_LINK, Direction.OUTGOING ) - .evaluator( Evaluators.excludeStartPosition()); - return td.traverse( person ); + public long computeInHasLink(final Node node) { + long count = 0; + Traverser hasLinkTraverser = getInHasLinkTraverser(node); + for (Path hasLinkPath : hasLinkTraverser) { + if (hasLinkPath.length() > 1) break; + count++; + } + return count; } - - + public void searchHasLinkOut(final Node node) { int numberOfLinkPages = 0; String output = node.getProperty(PAGE_TITLE) + " have link pages:\n"; - Traverser hasLinkTraverser = getOutHasLink( node ); + Traverser hasLinkTraverser = getOutHasLinkTraverser( node ); for ( Path hasLinkPath : hasLinkTraverser) { output += "At depth " + hasLinkPath.length() + " => " + hasLinkPath.endNode() @@ -188,5 +204,26 @@ output += "Number of link pages: " + numberOfLinkPages + "\n"; System.out.println(output); } + + public long computePageRank(Node node) { + long sum = 0; + long pageRank = 0; + String title = getPageTitle(node); + WikiPage wiki = wikiPageHash.get(title); + + Traverser hasLinkTraverser = getInHasLinkTraverser(node); + for (Path hasLinkPath: hasLinkTraverser) { + if (hasLinkPath.length() > 1) break; + Node n = hasLinkPath.endNode(); + sum += (Long)n.getProperty(PAGE_RANK); + } + pageRank = (long) (sum/wiki.getInLink() * 0.85 + + 1 / AllNodeNumber * 0.15); + + wiki.setRank(pageRank); + node.setProperty(PAGE_RANK, pageRank); + return pageRank; + } + } diff -r 21902773e530 -r 71fe482aaf32 src/wikigraph/ReadWikiLink.java --- a/src/wikigraph/ReadWikiLink.java Tue Aug 28 14:38:13 2012 +0900 +++ b/src/wikigraph/ReadWikiLink.java Tue Aug 28 15:27:35 2012 +0900 @@ -25,7 +25,6 @@ try { -// final long AllNodeNumber = ltn.searchPageTitleAllNodes(); final long AllNodeNumber = ltn.searchAllNodes(); long maxRelCount = 0; @@ -53,8 +52,6 @@ if (ltn.isHasLink(rel)) count++; } - w.setOutLink(count); - relHash.put(title, count); if (maxRelCount < count) { @@ -63,17 +60,25 @@ } relKeyHash.put(count, id); } - + + /* + System.out.println("title: id: rank: inLink: outLink"); for (String title: wikiHash.keySet()) { - System.out.println(title); + WikiPage w = wikiHash.get(title); + long id = w.getId(); + long rank = w.getRank(); + long inLink = w.getInLink(); + long outLink = w.getOutLink(); + System.out.println(title + ": "+ id + ": "+ rank +": "+ inLink +": "+outLink); } + */ System.out.println("AllNodeNumber = " + AllNodeNumber); System.out.println("Most :\n" + tmpKey + ":" + maxRelCount); String output = ""; - Node n = graphDb.getNodeById(1); - Traverser hasLinkTraverser = ltn.getInHasLink(n); + Node n = graphDb.getNodeById(32868); + Traverser hasLinkTraverser = ltn.getOutHasLinkTraverser(n); System.out.println(n.getProperty(LinkToNode.PAGE_TITLE)); for (Path hasLinkPath : hasLinkTraverser) { if (hasLinkPath.length() > 1) break; @@ -85,7 +90,13 @@ System.out.println(output); } - System.out.println(output); + System.out.println("in = "+ltn.computeInHasLink(n)); + System.out.println("out = " +ltn.computeOutHasLink(n)); + + + + + } catch (Exception e) { e.printStackTrace();