Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package webcrawler;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Map;
- import Jama.Matrix;
- import java.util.Set;
- public class Ranking {
- private final double DAMPING_FACTOR = 0.85;
- private Map<String, String[]> mapInbound = new HashMap();
- private Map<String, String[]> mapOutbound = new HashMap();
- private List params = new ArrayList();
- DB db = new DB("jdbc:mysql://localhost:3306/webcrawlerdb","root",""); // set server address, username and password
- public void start() {
- InboundLinks();
- OutboundLinks();
- Set urls = db.getLinks();
- Iterator it = urls.iterator();
- double sum = 0;
- while(it.hasNext()){
- Object url = it.next();
- db.insertRank(url.toString(), rank(url.toString()));
- sum += (rank(url.toString()));
- }
- System.out.println("PageRank finnished");
- }
- /*public static void main(String[] args) {
- Ranking ranking = new Ranking();
- }*/
- private void InboundLinks() {
- mapInbound = db.generateInboundLinks();
- /*for (Map.Entry entry : mapInbound.entrySet()) {
- String[] inboundsArray = (String[]) entry.getValue();
- System.out.println(entry.getKey() + "|||" + Arrays.toString(inboundsArray));
- }*/
- }
- private void OutboundLinks() {
- mapOutbound = db.generateOutboundLinks();
- }
- public double rank(String pageId) {
- generateParamList(pageId);
- Matrix a = new Matrix(generateMatrix());
- double[][] arrB = new double[params.size()][1];
- for (int i = 0; i < params.size(); i++) {
- arrB[i][0] = 1 - DAMPING_FACTOR;
- }
- Matrix b = new Matrix(arrB);
- // Solve the equation and get the page ranks
- Matrix x = a.solve(b);
- int ind = 0;
- int cnt = 0;
- for (Iterator it = params.iterator(); it.hasNext();) {
- String curPage = (String) it.next();
- if (curPage.equals(pageId))
- ind = cnt;
- cnt++;
- }
- return x.getArray()[ind][0];
- }
- private double[][] generateMatrix() {
- double[][] arr = new double[params.size()][params.size()];
- for (int i = 0; i < params.size(); i++) {
- for (int j = 0; j < params.size(); j++) {
- arr[i][j] = getMultiFactor((String) params.get(i),
- (String) params.get(j));
- }
- }
- return arr;
- }
- private double getMultiFactor(String sourceId, String linkId) {
- if (sourceId.equals(linkId))
- return 1;
- else {
- String[] inc = getInboundLinks(sourceId);
- for (int i = 0; i < inc.length; i++) {
- if (inc[i].equals(linkId)) {
- return -1 * (DAMPING_FACTOR / getOutboundLinks(linkId).length);
- }
- }
- }
- return 0;
- }
- private void generateParamList(String pageId) {
- // Add the starting page.
- if (!params.contains(pageId))
- params.add(pageId);
- // Get list of the inbound pages
- String[] inc = getInboundLinks(pageId);
- // Add the inbound links to the params list and do same for inbound
- // links
- for (int i = 0; i < inc.length; i++) {
- if (!params.contains(inc[i]))
- generateParamList(inc[i]);
- }
- }
- private String[] getInboundLinks(String pageId) {
- return (String[]) mapInbound.get(pageId);
- }
- private String[] getOutboundLinks(String pageId) {
- return (String[]) mapOutbound.get(pageId);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement