Mercurial > hg > Members > nobuyasu > TestNeo4j
comparison src/wikigraph/LinkToNode.java @ 24:71fe482aaf32 draft
fix LinkToNode.java
author | one |
---|---|
date | Tue, 28 Aug 2012 15:27:35 +0900 |
parents | 21902773e530 |
children | fbf0cf550b06 |
comparison
equal
deleted
inserted
replaced
23:21902773e530 | 24:71fe482aaf32 |
---|---|
26 public final static String PAGE_RANK = "page_rank"; | 26 public final static String PAGE_RANK = "page_rank"; |
27 private HashMap<String,Long> pageIdTable = new HashMap<String,Long>(); | 27 private HashMap<String,Long> pageIdTable = new HashMap<String,Long>(); |
28 private HashMap<String,Long> pageRankTable = new HashMap<String,Long>(); | 28 private HashMap<String,Long> pageRankTable = new HashMap<String,Long>(); |
29 | 29 |
30 private HashMap<String,WikiPage> wikiPageHash = new HashMap<String,WikiPage>(); | 30 private HashMap<String,WikiPage> wikiPageHash = new HashMap<String,WikiPage>(); |
31 private long AllNodeNumber; | |
31 | 32 |
32 public enum RelTypes implements RelationshipType { | 33 public enum RelTypes implements RelationshipType { |
33 HAS_LINK | 34 HAS_LINK |
34 } | 35 } |
35 | 36 |
36 LinkToNode(GraphDatabaseService graphDb) { | 37 LinkToNode(GraphDatabaseService graphDb) { |
37 this.graphDb = graphDb; | 38 this.graphDb = graphDb; |
38 this.graphOpe = GlobalGraphOperations.at(graphDb); | 39 this.graphOpe = GlobalGraphOperations.at(graphDb); |
40 AllNodeNumber = 0; | |
39 } | 41 } |
40 | 42 |
41 LinkToNode(GraphDatabaseService graphDb, GlobalGraphOperations graphOpe) { | 43 LinkToNode(GraphDatabaseService graphDb, GlobalGraphOperations graphOpe) { |
42 this.graphDb = graphDb; | 44 this.graphDb = graphDb; |
43 this.graphOpe = graphOpe; | 45 this.graphOpe = graphOpe; |
46 AllNodeNumber = 0; | |
44 } | 47 } |
45 | 48 |
46 void setGraphDb(GraphDatabaseService graphDb) { | 49 void setGraphDb(GraphDatabaseService graphDb) { |
47 this.graphDb = graphDb; | 50 this.graphDb = graphDb; |
48 this.graphOpe = GlobalGraphOperations.at(graphDb); | 51 this.graphOpe = GlobalGraphOperations.at(graphDb); |
52 AllNodeNumber = 0; | |
49 } | 53 } |
50 | 54 |
51 Long getId(String pageTitle) { | 55 Long getId(String pageTitle) { |
52 return pageIdTable.get(pageTitle); | 56 return pageIdTable.get(pageTitle); |
53 } | 57 } |
90 Node setPageRank(Node node, long rank) { | 94 Node setPageRank(Node node, long rank) { |
91 node.setProperty(PAGE_RANK, rank); | 95 node.setProperty(PAGE_RANK, rank); |
92 return node; | 96 return node; |
93 } | 97 } |
94 | 98 |
95 | |
96 Node getNode(String name) { | 99 Node getNode(String name) { |
97 long id = pageIdTable.get(name); | 100 long id = pageIdTable.get(name); |
98 return graphDb.getNodeById(id); | 101 return graphDb.getNodeById(id); |
99 } | 102 } |
100 | 103 |
104 | 107 |
105 void setHasLink(Node node1, Node node2) { | 108 void setHasLink(Node node1, Node node2) { |
106 setRelationship(node1, node2, RelTypes.HAS_LINK); | 109 setRelationship(node1, node2, RelTypes.HAS_LINK); |
107 } | 110 } |
108 | 111 |
109 long searchPageTitleAllNodes() { | |
110 long AllNodeNumber = 0; | |
111 for (Node n: graphOpe.getAllNodes()) { | |
112 if (n.hasProperty(PAGE_TITLE)) { | |
113 pageIdTable.put((String)n.getProperty(PAGE_TITLE), n.getId()); | |
114 pageRankTable.put((String)n.getProperty(PAGE_TITLE), (Long) n.getProperty(PAGE_RANK)); | |
115 AllNodeNumber++; | |
116 } | |
117 } | |
118 return AllNodeNumber; | |
119 } | |
120 | |
121 long searchAllNodes() { | 112 long searchAllNodes() { |
122 long AllNodeNumber = 0; | 113 AllNodeNumber = 0; |
123 for (Node n: graphOpe.getAllNodes()) { | 114 for (Node n: graphOpe.getAllNodes()) { |
124 if (n.hasProperty(PAGE_TITLE)) { | 115 if (n.hasProperty(PAGE_TITLE)) { |
125 WikiPage wiki = new WikiPage(n); | 116 WikiPage wiki = new WikiPage(n); |
126 wikiPageHash.put((String)n.getProperty(PAGE_TITLE), wiki); | 117 wikiPageHash.put((String)n.getProperty(PAGE_TITLE), wiki); |
118 pageIdTable.put((String)n.getProperty(PAGE_TITLE), n.getId()); | |
119 pageRankTable.put((String)n.getProperty(PAGE_TITLE), (Long) n.getProperty(PAGE_RANK)); | |
120 wiki.setInLink(computeInHasLink(n)); | |
121 wiki.setOutLink(computeOutHasLink(n)); | |
122 | |
127 AllNodeNumber++; | 123 AllNodeNumber++; |
128 } | 124 } |
129 } | 125 } |
130 return AllNodeNumber; | 126 return AllNodeNumber; |
127 } | |
128 | |
129 HashMap<String,WikiPage> getWikiPageHash() { | |
130 return wikiPageHash; | |
131 } | 131 } |
132 | 132 |
133 HashMap<String,Long> getPageIdTable() { | 133 HashMap<String,Long> getPageIdTable() { |
134 return pageIdTable; | 134 return pageIdTable; |
135 } | 135 } |
136 | 136 |
137 HashMap<String,Long> getPageRankTable() { | 137 HashMap<String,Long> getPageRankTable() { |
138 return pageRankTable; | 138 return pageRankTable; |
139 } | 139 } |
140 | |
141 HashMap<String,WikiPage> getWikiPageHash() { | |
142 return wikiPageHash; | |
143 } | |
144 | 140 |
145 public void printAllNodes() { | 141 public void printAllNodes() { |
146 for (Node n: graphOpe.getAllNodes()) { | 142 for (Node n: graphOpe.getAllNodes()) { |
147 System.out.println("ID="+ n.getId()); | 143 System.out.println("ID="+ n.getId()); |
148 for (String key: n.getPropertyKeys()) { | 144 for (String key: n.getPropertyKeys()) { |
155 System.out.println("--"); | 151 System.out.println("--"); |
156 } | 152 } |
157 | 153 |
158 } | 154 } |
159 | 155 |
160 public Traverser getInHasLink( final Node person) { | 156 private Traverser getTraverser(final Node node, final Direction rel) { |
161 TraversalDescription td = Traversal.description() | 157 TraversalDescription td = Traversal.description() |
162 .breadthFirst() | 158 .breadthFirst() |
163 .relationships( RelTypes.HAS_LINK, Direction.INCOMING ) | 159 .relationships( RelTypes.HAS_LINK, rel ) |
164 .evaluator( Evaluators.excludeStartPosition()); | 160 .evaluator( Evaluators.excludeStartPosition()); |
165 return td.traverse( person ); | 161 return td.traverse( node ); |
166 } | 162 |
167 | 163 } |
168 public Traverser getOutHasLink( final Node person) { | 164 |
169 TraversalDescription td = Traversal.description() | 165 public Traverser getOutHasLinkTraverser( final Node node) { |
170 .breadthFirst() | 166 return getTraverser(node, Direction.OUTGOING); |
171 .relationships( RelTypes.HAS_LINK, Direction.OUTGOING ) | 167 } |
172 .evaluator( Evaluators.excludeStartPosition()); | 168 |
173 return td.traverse( person ); | 169 public Traverser getInHasLinkTraverser( final Node node) { |
174 } | 170 return getTraverser(node, Direction.INCOMING); |
175 | 171 } |
176 | 172 |
173 public long computeOutHasLink(final Node node) { | |
174 long count = 0; | |
175 Traverser hasLinkTraverser = getOutHasLinkTraverser(node); | |
176 for (Path hasLinkPath : hasLinkTraverser) { | |
177 if (hasLinkPath.length() > 1) break; | |
178 count++; | |
179 } | |
180 return count; | |
181 } | |
182 | |
183 public long computeInHasLink(final Node node) { | |
184 long count = 0; | |
185 Traverser hasLinkTraverser = getInHasLinkTraverser(node); | |
186 for (Path hasLinkPath : hasLinkTraverser) { | |
187 if (hasLinkPath.length() > 1) break; | |
188 count++; | |
189 } | |
190 return count; | |
191 } | |
192 | |
177 | 193 |
178 public void searchHasLinkOut(final Node node) { | 194 public void searchHasLinkOut(final Node node) { |
179 int numberOfLinkPages = 0; | 195 int numberOfLinkPages = 0; |
180 String output = node.getProperty(PAGE_TITLE) + " have link pages:\n"; | 196 String output = node.getProperty(PAGE_TITLE) + " have link pages:\n"; |
181 Traverser hasLinkTraverser = getOutHasLink( node ); | 197 Traverser hasLinkTraverser = getOutHasLinkTraverser( node ); |
182 for ( Path hasLinkPath : hasLinkTraverser) { | 198 for ( Path hasLinkPath : hasLinkTraverser) { |
183 output += "At depth " + hasLinkPath.length() + " => " | 199 output += "At depth " + hasLinkPath.length() + " => " |
184 + hasLinkPath.endNode() | 200 + hasLinkPath.endNode() |
185 .getProperty(PAGE_TITLE) + "\n"; | 201 .getProperty(PAGE_TITLE) + "\n"; |
186 numberOfLinkPages++; | 202 numberOfLinkPages++; |
187 } | 203 } |
188 output += "Number of link pages: " + numberOfLinkPages + "\n"; | 204 output += "Number of link pages: " + numberOfLinkPages + "\n"; |
189 System.out.println(output); | 205 System.out.println(output); |
190 } | 206 } |
207 | |
208 public long computePageRank(Node node) { | |
209 long sum = 0; | |
210 long pageRank = 0; | |
211 String title = getPageTitle(node); | |
212 WikiPage wiki = wikiPageHash.get(title); | |
213 | |
214 Traverser hasLinkTraverser = getInHasLinkTraverser(node); | |
215 for (Path hasLinkPath: hasLinkTraverser) { | |
216 if (hasLinkPath.length() > 1) break; | |
217 Node n = hasLinkPath.endNode(); | |
218 sum += (Long)n.getProperty(PAGE_RANK); | |
219 } | |
220 pageRank = (long) (sum/wiki.getInLink() * 0.85 | |
221 + 1 / AllNodeNumber * 0.15); | |
222 | |
223 wiki.setRank(pageRank); | |
224 node.setProperty(PAGE_RANK, pageRank); | |
225 return pageRank; | |
226 } | |
227 | |
191 | 228 |
192 } | 229 } |