# HG changeset patch # User one # Date 1346130255 -32400 # Node ID f9ef906676ebd0e7c81e8f0719fad450954bcef0 # Parent 2c3a10047ec6c60f032276e5a1d97d2f6fdc5d93 modify LinkToNode.java diff -r 2c3a10047ec6 -r f9ef906676eb src/wikigraph/LinkConvertGraph.java --- a/src/wikigraph/LinkConvertGraph.java Mon Aug 27 04:30:53 2012 +0900 +++ b/src/wikigraph/LinkConvertGraph.java Tue Aug 28 14:04:15 2012 +0900 @@ -94,7 +94,7 @@ try { - + lcg = new LinkConvertGraph(filename); lcg.parseXml(); @@ -105,10 +105,13 @@ HashMap> hash = lcg.getHash(); - GraphDatabaseService graphDb = new EmbeddedGraphDatabase("wikiLinkDB_"); + GraphDatabaseService graphDb = new EmbeddedGraphDatabase("wikiLinkDB"); LinkToNode ltn = new LinkToNode(graphDb); Transaction tx = graphDb. beginTx(); + + Node delNode = graphDb.getNodeById(0); + delNode.delete(); for (Map.Entry> map : hash.entrySet()) { String pageTitle = map.getKey(); @@ -124,6 +127,7 @@ Node linkNode; if ( ltn.getId(linkPageTitle) == null) { linkNode = ltn.createNodeWithPageTitle(linkPageTitle); + ltn.setPageRank(linkNode, 0); } else { linkNode = ltn.getNode(linkPageTitle); } diff -r 2c3a10047ec6 -r f9ef906676eb src/wikigraph/LinkToNode.java --- a/src/wikigraph/LinkToNode.java Mon Aug 27 04:30:53 2012 +0900 +++ b/src/wikigraph/LinkToNode.java Tue Aug 28 14:04:15 2012 +0900 @@ -14,15 +14,19 @@ import org.neo4j.kernel.Traversal; import org.neo4j.tooling.GlobalGraphOperations; +import wikigraph.Neo4jTest.RelTypes; + public class LinkToNode { GraphDatabaseService graphDb; GlobalGraphOperations graphOpe; - public final String PAGE_TITLE = "page_title"; + public final static String PAGE_TITLE = "page_title"; + public final static String PAGE_RANK = "page_rank"; // private HashSet names = new HashSet(); - private HashMap namesTable = new HashMap(); + private HashMap pageIdTable = new HashMap(); + private HashMap pageRankTable = new HashMap(); public enum RelTypes implements RelationshipType { HAS_LINK @@ -33,13 +37,22 @@ this.graphOpe = GlobalGraphOperations.at(graphDb); } + LinkToNode(GraphDatabaseService graphDb, GlobalGraphOperations graphOpe) { + this.graphDb = graphDb; + this.graphOpe = graphOpe; + } + void setGraphDb(GraphDatabaseService graphDb) { this.graphDb = graphDb; this.graphOpe = GlobalGraphOperations.at(graphDb); } Long getId(String pageTitle) { - return namesTable.get(pageTitle); + return pageIdTable.get(pageTitle); + } + + boolean isHasLink(Relationship rel) { + return rel.isType(RelTypes.HAS_LINK); } private Node createNode() { @@ -52,14 +65,35 @@ return node; } + void initAllNodePageRank() { + for (Node node : graphOpe.getAllNodes()) { + setPageRank(node, 0); + } + } + + + String getPageTitle(Node node) { + return (String) node.getProperty(PAGE_TITLE); + } + + Long getPageRank(Node node) { + return (Long) node.getProperty(PAGE_RANK); + } + Node createNodeWithPageTitle(String pageTitle){ Node node = createNodeWithProperty(PAGE_TITLE, pageTitle); - namesTable.put(pageTitle, node.getId()); + pageIdTable.put(pageTitle, node.getId()); return node; } + + Node setPageRank(Node node, long rank) { + node.setProperty(PAGE_RANK, rank); + return node; + } + Node getNode(String name) { - long id = namesTable.get(name); + long id = pageIdTable.get(name); return graphDb.getNodeById(id); } @@ -71,16 +105,25 @@ setRelationship(node1, node2, RelTypes.HAS_LINK); } - void searchPageTitleAllNodes() { + long searchPageTitleAllNodes() { + long AllNodeNumber = 0; for (Node n: graphOpe.getAllNodes()) { - if (n.hasProperty(PAGE_TITLE)) - namesTable.put((String)n.getProperty(PAGE_TITLE), n.getId()); + if (n.hasProperty(PAGE_TITLE)) { + pageIdTable.put((String)n.getProperty(PAGE_TITLE), n.getId()); + pageRankTable.put((String)n.getProperty(PAGE_TITLE), (Long) n.getProperty(PAGE_RANK)); + AllNodeNumber++; + } } + return AllNodeNumber; } - HashMap getNamesTable() { - return namesTable; + HashMap getPageIdTable() { + return pageIdTable; } + + HashMap getPageRankTable() { + return pageRankTable; + } public void printAllNodes() { for (Node n: graphOpe.getAllNodes()) { @@ -97,18 +140,28 @@ } - public Traverser getHasLink( final Node person) { + public Traverser getInHasLink( final Node person) { + TraversalDescription td = Traversal.description() + .breadthFirst() + .relationships( RelTypes.HAS_LINK, Direction.INCOMING ) + .evaluator( Evaluators.excludeStartPosition()); + return td.traverse( person ); + } + + 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 void searchHasLink(final Node node) { + public void searchHasLinkOut(final Node node) { int numberOfLinkPages = 0; String output = node.getProperty(PAGE_TITLE) + " have link pages:\n"; - Traverser hasLinkTraverser = getHasLink( node ); + Traverser hasLinkTraverser = getOutHasLink( node ); for ( Path hasLinkPath : hasLinkTraverser) { output += "At depth " + hasLinkPath.length() + " => " + hasLinkPath.endNode() diff -r 2c3a10047ec6 -r f9ef906676eb src/wikigraph/ReadWikiLink.java --- a/src/wikigraph/ReadWikiLink.java Mon Aug 27 04:30:53 2012 +0900 +++ b/src/wikigraph/ReadWikiLink.java Tue Aug 28 14:04:15 2012 +0900 @@ -1,12 +1,18 @@ package wikigraph; import java.util.HashMap; +import java.util.Map; import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.graphdb.Node; +import org.neo4j.graphdb.Path; import org.neo4j.graphdb.Relationship; import org.neo4j.graphdb.Transaction; +import org.neo4j.graphdb.traversal.Traverser; import org.neo4j.kernel.EmbeddedGraphDatabase; +import org.neo4j.tooling.GlobalGraphOperations; + +import wikigraph.LinkToNode.RelTypes; public class ReadWikiLink { @@ -15,23 +21,19 @@ GraphDatabaseService graphDb = new EmbeddedGraphDatabase("wikiLinkDB"); - LinkToNode ltn = new LinkToNode(graphDb); + GlobalGraphOperations graphOpe = GlobalGraphOperations.at(graphDb); + LinkToNode ltn = new LinkToNode(graphDb, graphOpe); Transaction tx = graphDb. beginTx(); - -// ltn.printAllNodes(); - - ltn.searchPageTitleAllNodes(); - HashMap hash = ltn.getNamesTable(); - + + try { + + final long AllNodeNumber = ltn.searchPageTitleAllNodes(); - long lastNodeId = 0; - // Print out page title and ID of All Node. - for (String key : hash.keySet()) { -// System.out.println("page title = "+key + "\nID = " + hash.get(key)); - lastNodeId = Math.max(hash.get(key), lastNodeId); - } + // Key: page_title value: Node ID + HashMap pageIdHash = ltn.getPageIdTable(); + HashMap pageRankHash = ltn.getPageRankTable(); - long relCount = 0; + long maxRelCount = 0; String tmpKey=""; // relHash record number of relationships of each node. // Key: page_title value: number of relationships @@ -41,41 +43,49 @@ // key: number of relationships value: ID HashMap relKeyHash = new HashMap(); - for (String key : hash.keySet()) { - long id = hash.get(key); + for (String key : pageIdHash.keySet()) { + long id = pageIdHash.get(key); Node node = graphDb.getNodeById(id); Iterable relIter = node.getRelationships(); long count = 0; for (Relationship rel : relIter) { - count++; + if ( ltn.isHasLink(rel)) + count++; } relHash.put(key, count); - if (relCount < count ) { - relCount = count; + if (maxRelCount < count ) { + maxRelCount = count; tmpKey = key; } relKeyHash.put(count, id); } - for (String key : relHash.keySet()) { -// System.out.println(key + ":"+relHash.get(key)); - } - System.out.println("lastNodeId = "+ lastNodeId); - System.out.println("Most :\n"+tmpKey+":"+relCount); + System.out.println("AllNodeNumber = "+ AllNodeNumber); + System.out.println("Most :\n"+tmpKey+":"+maxRelCount); - for (long i = relKeyHash.size()-1 ; i>0 ; i-- ) { - long id = relKeyHash.get(i); - Node node = graphDb.getNodeById(id); - System.out.prinln(); + + String output = ""; + Node n = graphDb.getNodeById(1); + Traverser hasLinkTraverser = ltn.getInHasLink( n ); + System.out.println(n.getProperty(LinkToNode.PAGE_TITLE)); + for (Path hasLinkPath : hasLinkTraverser) { + output = "At depth" + hasLinkPath.length() + " => " + + hasLinkPath.endNode().getProperty(LinkToNode.PAGE_TITLE) + "\n"; + System.out.println(output); } - - tx.success(); - tx.finish(); - graphDb.shutdown(); + System.out.println(output); + + } catch (Exception e) { + e.printStackTrace(); + } finally { + tx.success(); + tx.finish(); + graphDb.shutdown(); + } }