差分発生行の前後
無視リスト:
更新日時:
2014/09/26 10:11:02 (10 年 前)
更新者:
atsuko
ログメッセージ:

path 探索改良&ランキング

ファイル:
1 変更

凡例:

変更なし
追加
削除
  • BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/OWLClassGraph.java

    r154 r174  
    99 * @author atsuko 
    1010 */ 
    11 import java.util.ArrayList; 
    12 import java.util.LinkedList; 
    13 import java.util.List; 
    14 import java.util.ListIterator; 
     11import java.util.*; 
     12//import java.util.LinkedList; 
     13//import java.util.List; 
     14//import java.util.ListIterator; 
    1515 
    1616public class OWLClassGraph extends LabeledMultiDigraph{ 
     
    2020    int limit; 
    2121    int th; 
    22     double concut; 
    23     double divcut; 
     22    int prunecut; 
    2423         
    2524    public class LinkAndPath{ 
     
    2726        ClassLink classLink; 
    2827        List<ClassLink> path; 
    29         boolean converge; 
     28        //boolean converge; 
    3029         
    3130        public LinkAndPath(ClassLink classLink, List<ClassLink> path){ 
    3231           this.classLink = classLink; 
    3332           this.path = path; 
    34            this.converge = false; 
    35         } 
    36          
    37         public LinkAndPath(ClassLink classLink, List<ClassLink> path, String originalClassURI, boolean converge){ 
     33           //this.converge = false; 
     34        } 
     35         
     36        public LinkAndPath(ClassLink classLink, List<ClassLink> path, String originalClassURI){ 
    3837           this.classLink = classLink; 
    3938           this.path = path; 
    4039           this.originalClassURI = originalClassURI; 
    41            this.converge = converge; 
     40           //this.converge = converge; 
    4241        } 
    4342    } 
     
    5150        nsteps = 3; 
    5251        limit = 1000; 
    53         //th = 0; 
    54         //concut = 2.0; 
    55         //divcut = - 2.0; 
     52        prunecut = 100; 
    5653    } 
    5754 
    5855    public Path[] getPaths(RDFSchemaAnalyzer rdfsa, boolean countLink){ 
    5956        List<List<ClassLink>> paths = null; 
    60         paths = searchPaths(rdfsa, countLink);             
    61         Path[] patharray = new Path[paths.size()]; 
     57        paths = searchPaths(rdfsa, countLink); 
     58        NavigableSet<Path> sortedpath = new TreeSet<Path>(); 
    6259        ListIterator<List<ClassLink>> pit = paths.listIterator(); 
    63         int i = 0; 
    6460        while ( pit.hasNext() ){ 
    65             patharray[i] = new Path(); 
    66             patharray[i].setStartClass(startClass); 
    67             List<ClassLink> path = pit.next(); 
    68             patharray[i].setClassLinks(path); 
    69             ListIterator<ClassLink> cit = path.listIterator(); 
     61            Path path = new Path(); 
     62            path.setStartClass(startClass); 
     63            List<ClassLink> crrpath = pit.next(); 
     64            path.setClassLinks(crrpath); 
     65            ListIterator<ClassLink> cit = crrpath.listIterator(); 
    7066            int min = Integer.MAX_VALUE; 
    7167            while ( cit.hasNext() ){ 
     
    7571                } 
    7672            } 
    77             patharray[i].setWidth(min); 
     73            path.setWidth(min); 
     74            sortedpath.add(path); 
     75        } 
     76        Path[] patharray = new Path[paths.size()]; 
     77        Iterator<Path> pait = sortedpath.descendingIterator(); 
     78        int i = 0; 
     79        while ( pait.hasNext() ){ 
     80            patharray[i] = pait.next(); 
    7881            i++; 
    7982        } 
     
    8487        List<List<ClassLink>> paths = new ArrayList<>(); 
    8588        List<LinkAndPath> lp = new LinkedList<>(); 
    86         lp.add(new LinkAndPath(new ClassLink("",startClass,null,Direction.both,0,0,0,0,0,false,false), new LinkedList<ClassLink>(), "", false)); 
     89        lp.add(new LinkAndPath(new ClassLink("",startClass,null,Direction.both,0,0,0,0,0,false,false), new LinkedList<ClassLink>(), "")); 
    8790        try{ 
    8891          for ( int i = 0; i < nsteps; i++ ){ 
     
    9194              while ( lit.hasNext() ){ 
    9295                  LinkAndPath crrlp = lit.next(); 
     96                  /*if ( crrlp.classLink.getLinkedClassURI().equals("http://www.biopax.org/release/biopax-level3.owl#Pathway") ){ 
     97                      System.out.println("here!"); 
     98                  }*/ 
    9399                  ClassLink[] classLinks = rdfsa.getNextClass(null, crrlp.classLink.getLinkedClassURI(), limit, countLinks); 
    94100                  for ( int j = 0 ; j < classLinks.length; j++ ){ 
     101                      /*if ( classLinks[j].getLinkedClassURI().endsWith("http://www.biopax.org/release/biopax-level3.owl#BiochemicalReaction") ){ 
     102                          ClassLink cltmp = classLinks[j]; 
     103                      }*/ 
    95104                      List<ClassLink> crrpath = new LinkedList<>(crrlp.path); 
    96105                      crrpath.add(classLinks[j]); 
     
    107116                           crrlp.classLink.getDirection() != classLinks[j].getDirection() && 
    108117                           crrlp.originalClassURI.equals( classLinks[j].getLinkedClassURI()) ){ 
     118                              System.out.println("P1"); 
    109119                              continue; 
    110120                          } 
    111                       } 
    112                        
    113                       nextlp.add(new LinkAndPath(classLinks[j], crrpath, crrlp.classLink.getLinkedClassURI(), false)); 
     121                          if ( checkPruning(crrlp.classLink, classLinks[j]) ){ 
     122                              System.out.println("P2"); 
     123                              continue; 
     124                          } 
     125                      } 
     126                      /* 
     127                      if ( classLinks[j].getDirection() != Direction.reverse ){ 
     128                         System.out.println("here b");  
     129                      }*/ 
     130 
     131                      nextlp.add(new LinkAndPath(classLinks[j], crrpath, crrlp.classLink.getLinkedClassURI())); 
    114132                  } 
    115133              } 
     
    178196*/ 
    179197     
    180 /*     
    181     private boolean decideConvergence(ClassLink classLink){ 
     198      private boolean checkPruning(ClassLink classLink1, ClassLink classLink2){ 
     199          // true -> prune link2, false -> add link2 
     200          int noi1 = classLink1.getNumOfOriginInstances(); 
     201          int nli1 = classLink1.getNumOfLinkedInstances(); 
     202          int noi2 = classLink2.getNumOfOriginInstances(); 
     203          int nli2 = classLink2.getNumOfLinkedInstances(); 
     204          if ( noi1 == 0 || nli1 == 0 || noi2 == 0 || nli2 == 0 ){ 
     205              return true; 
     206          } 
     207          return ( noi1 / nli1 > prunecut && nli2 / noi2 > prunecut ); 
     208      } 
     209     
     210/*    private boolean decideConvergence(ClassLink classLink){ 
    182211        double con = getValueForConvergence(classLink.getNumOfOriginInstances(),  
    183212                                              classLink.getNumOfLinkedInstances(), 
     
    209238    } 
    210239    */ 
     240     
    211241}