/** * */ package com.personalityextractor.data; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import com.personalityextractor.data.source.Wikiminer; import com.personalityextractor.entity.WikipediaEntity; /** * Lattice * @author akishore * */ public class Lattice { HashMap<Long, LatticeNode> nodes; HashMap<String, LatticeEdge> edges; public Lattice() { nodes = new HashMap<Long, LatticeNode>(); edges = new HashMap<String, LatticeEdge>(); } /** * method to build a lattice from all entity senses * @param sensesList list of list of entity senses */ public void buildLattice(List<List<WikipediaEntity>> sensesList) { LatticeNode startNode = new LatticeNode(-1, "start"); nodes.put(startNode.getId(), startNode); ArrayList<Long> prevColumn = new ArrayList<Long>(); prevColumn.add(startNode.getId()); for(List<WikipediaEntity> senseList : sensesList) { ArrayList<Long> currColumn = new ArrayList<Long>(); for(WikipediaEntity e : senseList) { long id = Long.parseLong(e.getWikiminerID()); LatticeNode node = new LatticeNode(id, e.getText()); nodes.put(id, node); currColumn.add(id); for(Long pId : prevColumn) { addEdge(pId, id); } } prevColumn.addAll(currColumn); } // connect with end node LatticeNode endNode = new LatticeNode(-2, "end"); nodes.put(endNode.getId(), endNode); for(Long pId : prevColumn) { addEdge(pId, endNode.getId()); } } private void addEdge(long id1, long id2) { LatticeNode node1 = nodes.get(id1); LatticeNode node2 = nodes.get(id2); LatticeEdge edge = null; // if start node if(node1.getId() == -1) { edge = new LatticeEdge(node1, node2); } else { double weight = Wikiminer.compareArticlesWithJaccard(String.valueOf(node1.getId()), String.valueOf(node2.getId())); edge = new LatticeEdge(node1, node2, weight); } edges.put(edge.getId(), edge); } }