Changeset 8795:9cfbf5f448e4 in orange


Ignore:
Timestamp:
08/26/11 11:05:50 (3 years ago)
Author:
miha <miha.stajdohar@…>
Branch:
default
Convert:
3d2e6d058ccfdf288af6e538bd0a5dfea33849ec
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/Visualize Qt/OWPubmedView.py

    r8776 r8795  
    1717    """ 
    1818     
    19     def __init__(self, parent):#, nhops, edge_threshold, algorithm, n_max_neighbors, k): 
     19    def __init__(self, parent): 
    2020        Orange.network.NxView.__init__(self) 
    2121         
    2222        self._nhops = 2 
    2323        self._edge_threshold = 0.5 
    24         self.algorithm = 1 # 0 without clustering, 1 with clustering 
     24        self._algorithm = 0 # 0 without clustering, 1 with clustering 
    2525        self._n_max_neighbors = 10 
    2626        self._center_nodes = [] 
     
    2828        self._hidden_nodes = [] 
    2929        self._k_algorithm = 0.3 
     30        self._delta_score = {} 
    3031         
    3132    def init_network(self, graph): 
     
    6768         
    6869        subnet.remove_nodes_from(self._hidden_nodes) 
    69         subnet = self._propagate(subnet) 
     70        #subnet = self._propagate(subnet) 
    7071         
    7172        if self._nx_explorer is not None: 
     
    9697        selection = self._nx_explorer.networkCanvas.selected_nodes() 
    9798        # case "set_score"  - input = input_score, to be provided 
    98                 #self._center_nodes.extend(selection)  # Non servira' 
     99                #self._delta_scores(selection) = to update!!!!  
    99100        for i in selection: 
    100101            self._network.node[i]['user_score'] = 1 
     
    119120         
    120121    def _propagate(self, net): 
    121         return 
     122        central_nodes = [i for i in net.nodes() if net.node[i]['user_score'] == 1] 
     123        central_delta_score = [delta_score[id] for id in central_nodes] 
     124        cluster_centers = [net.node[x]['cluster'] for x in central_nodes if net.node[x]['cluster'] != ''] 
     125        updated = central_nodes[:] 
     126        L = 0 
     127        while True: 
     128            to_update = [] 
     129            for i in central_nodes: 
     130                to_update.extend(net.neighbors(i)) 
     131            to_update = set(to_update) - set(updated) 
     132            if to_update: 
     133                for i in to_update: 
     134                    if not net.node[i]['user_score']: 
     135                        predec = [j for j in net.neighbors(i) if j in central_nodes] 
     136                        predec_delta_score = [central_delta_score[central_nodes.index(x)] for x in predec] 
     137                        self._k_algortihm = compute_k(i, cluster_centers, net) 
     138                        if self._k_algortihm: #else the node is isolated and the score doesn't change 
     139                            net.node[i]['score'] = _prop(predec, predec_delta_score, i, L, net) 
     140                        net.node[i]['level'] = L 
     141                updated.extend(to_update) 
     142                central_nodes = list(to_update) 
     143                central_delta_score = [] 
     144                for id in central_nodes: 
     145                    if delta_score.get(id, []): 
     146                        central_delta_score.append(delta_score[id]) 
     147                    else: 
     148                        central_delta_score.append(net.node[id]['score'] - 0.5) 
     149                L += 1 
     150            else: 
     151                return net 
     152                 
     153    def compute_k(id, centers, net): 
     154        import networkx as nx #VEDERE SE C'E' IN ORANGENET  
     155        if self._algorithm == 0 #no clustering 
     156            return self._algorithm 
     157        else:   #clustering 
     158            paths = [] 
     159            for c in centers: 
     160                try: 
     161                    paths.append(nx.algorithms.shortest_paths.generic.shortest_path_length(net, id, c)) 
     162                except nx.exception.NetworkXNoPath: 
     163                    return None #isolated node 
     164                     
     165            return float(min(paths))/10 
     166            #if paths: 
     167            #    return float(min(paths))/10 
     168            #else: 
     169            #    return None # Isolated node 
     170                 
     171    def _prop(self, predec, predec_delta_score, node, L, net):  
     172        edges_weight = [net[i][node]['weight'] for i in predecessors] 
     173        x = [(delta * w + 0.5)/(1 + level*self._k_algorithm) for delta, w in zip(predec_delta_score, edges_weight)]     
     174        return max(x)     
     175         
    122176         
    123177class OWPubmedView(OWWidget): 
     
    187241        """Given a query for similar titles sets titles and ids""" 
    188242         
    189         str_input = self.filter 
    190         #str_input = str_input.replace(' ', '').strip(' .').lower() 
    191         #self.titles = sorted([self.inside_view._network.node[n]['title'] for n in self.inside_view._network.nodes() if str_input in self.inside_view._network.node[n]['title'].encode().replace(' ', '').strip(' .').lower()]) # [(id,title)] 
     243        str_input = self.filter  
    192244        str_input = str_input.strip(' .').lower().split(' ') 
    193245        titles2 = [(n, str.lower(self.inside_view._network.node[n]['title'].encode('utf-8').strip(' .')).split(' ')) for n in self.inside_view._network.nodes()] # [(id,title)] 
Note: See TracChangeset for help on using the changeset viewer.