Changeset 596


Ignore:
Timestamp:
Mar 12, 2012, 11:56:25 PM (5 years ago)
Author:
hailiang.mei@…
Message:

several fixes.

Location:
trunk/code/conceptwiki/imports/imports-chemspider
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/code/conceptwiki/imports/imports-chemspider/pom.xml

    r575 r596  
    2020                <org.openrdf.sesame.version>2.6.0</org.openrdf.sesame.version>
    2121                <org.apache.tomcat.version>7.0.21</org.apache.tomcat.version>
     22                <commons-dbcp.version>1.4</commons-dbcp.version>
    2223        </properties>
    2324       
     
    8788                <scope>runtime</scope>
    8889                </dependency>
     90                <!--
     91                        Deprecated dependency for maintaining compatibility with the old code. Should
     92                        be replaced by the Tomcat implementation ASAP.
     93                -->
     94                <dependency>
     95                        <groupId>commons-dbcp</groupId>
     96                        <artifactId>commons-dbcp</artifactId>
     97                        <version>${commons-dbcp.version}</version>
     98                        <scope>runtime</scope>
     99                </dependency>
    89100        </dependencies>
    90101</project>
  • trunk/code/conceptwiki/imports/imports-chemspider/src/main/java/nl/nbic/conceptwiki/imports/chemspider/ChemSpiderImportMesh_fixingTags.java

    r595 r596  
    11package nl.nbic.conceptwiki.imports.chemspider;
    22
     3import java.io.BufferedReader;
     4import java.io.FileNotFoundException;
     5import java.io.FileReader;
    36import java.io.FileWriter;
    47import java.io.IOException;
    58import java.sql.ResultSet;
    69import java.sql.SQLException;
     10import java.util.ArrayList;
    711import java.util.List;
    812import java.util.Map;
    913import java.util.Set;
     14import java.util.StringTokenizer;
    1015
    1116import javax.inject.Inject;
     
    2429import org.slf4j.Logger;
    2530import org.slf4j.LoggerFactory;
     31import org.springframework.beans.factory.annotation.Value;
    2632import org.springframework.context.ApplicationContext;
    2733import org.springframework.context.support.ClassPathXmlApplicationContext;
     
    4753    @Inject
    4854    private GraphTemplate graphTemplate;
     55    @Value("${chemspider.dupcuis}")
     56    private String dupCuiFile;
    4957   
    5058    /*
     
    96104    private Set<String> superCUIs = Sets.newHashSet();
    97105   
    98     private void loadMeSHToMultipleCUIsMapping() {
     106    private void loadMeSHToMultipleCUIsMapping() throws IOException {
     107       
     108        Set<String> meshCodeMappedByMultipleChemspiderConcepts = Sets.newHashSet();
     109       
     110        BufferedReader reader = new BufferedReader(new FileReader(dupCuiFile));
     111        String line;
     112        while ((line = reader.readLine()) != null) {
     113                StringTokenizer tokenizer = new StringTokenizer(line.trim());
     114               
     115                String meshCode = tokenizer.nextToken();
     116                String cs1 = tokenizer.nextToken();
     117                String cs2 = tokenizer.nextToken();
     118               
     119                meshCodeMappedByMultipleChemspiderConcepts.add(meshCode);
     120        }
     121        reader.close();
    99122       
    100123        final SqlRowSet results =
     
    112135            final String qcCUI = mappings.getString("cui");
    113136            final String dupMeSHCode = mappings.getString("code");
     137           
     138            if (!meshCodeMappedByMultipleChemspiderConcepts.contains(dupMeSHCode)) {
     139                // this mesh code is unknown by chemspider import. Skip it.
     140                continue;
     141            }
    114142           
    115143            // Retrieve list of CUIs mapped to this MeSH code.
     
    132160            // end QC
    133161           
    134             meshCUIsMapping.put(dupMeSHCode, cuis);
    135            
    136162            int nrSuperCUIs = 0;           
    137163            String superCUI = null;
     
    142168                }
    143169            }
     170                       
    144171           
    145172            if (nrSuperCUIs == 1) {
     173                meshCUIsMapping.put(dupMeSHCode, cuis);
    146174                meshSuperCUIMapping.put(dupMeSHCode, superCUI);
    147175            }
    148             else {
    149                 // nrSuperCUIs can only be 1
    150                 logger.error("nrSuperCUIs is {}", nrSuperCUIs);
    151                 logger.error("when {} is mapped to {}", dupMeSHCode, cuis.toString());
    152                 System.exit(1);
    153             }
     176//            else if (nrSuperCUIs == 0) {
     177//              // do nothing, forget about this MeSH code as there is no super type CUI
     178//              logger.error("nrSuperCUIs is {}", nrSuperCUIs);
     179//                logger.error("when {} is mapped to {}", dupMeSHCode, cuis.toString());
     180//                System.exit(1);
     181//            }
     182//            else {
     183//                // nrSuperCUIs can only be 1
     184//                logger.error("nrSuperCUIs is {}", nrSuperCUIs);
     185//                logger.error("when {} is mapped to {}", dupMeSHCode, cuis.toString());
     186//                System.exit(1);
     187//            }
    154188        }
     189       
     190        /**
     191         * dup_cui.txt: 3456 mesh code
     192         *
     193         * 1382 of 3456 have more than 1 UMLS ID
     194         *
     195         * 1279 of 1382 have exactly one super type UMLS ID. Thus can be fixed.
     196         *
     197         */
    155198       
    156199        // start QC
     
    167210        }
    168211        // end QC
     212        logger.info("meshCUIsMapping size {}", meshCUIsMapping.size());
     213        logger.info("meshSuperCUIMapping size {}", meshSuperCUIMapping.size());
     214       
    169215    }
    170216   
     
    176222        FileWriter writer = new FileWriter("/tmp/chemspiderMeSHTagReplacement.txt");
    177223       
    178         Transaction tx = graphTemplate.getGraphDb().beginTx();
    179        
    180224        // We loop through all MeSH code that might be used as chemspider concepts' tag
    181225        for (String meshCode: meshCUIsMapping.keySet()) {
    182226           
    183227            String superCUI = meshSuperCUIMapping.get(meshCode);           
     228            logger.info("superCUI: {}", superCUI);
    184229            Concept superUMLSConcept = conceptService.getConceptsByNotation(superCUI, SCOPE, 1, umlsBranch).get(0);
    185230           
     
    196241                // Check if any concept using this CUI as tag needs to fixed or not. It needs to be fixed if:
    197242                // #1: there are concepts in chemspider branch tagged to this concept.
    198                 List<Concept> childConcepts = conceptService.getConceptsByTag(cuiConcept.getUuid(), SCOPE, Integer.MAX_VALUE);             
    199                 for (Concept oneChildConcept: childConcepts) {                   
     243                List<Concept> childConcepts = conceptService.getConceptsByTag(cuiConcept.getUuid(), SCOPE.includeTags(), Integer.MAX_VALUE);
     244                for (Concept oneChildConcept: childConcepts) {
     245                       
     246                        Set<Concept> toBeRemovedTags = null;
     247                       
     248                        for (Concept c:oneChildConcept.getTags()) {
     249                                if (c.getUuid().equals(cuiConcept.getUuid())) {
     250                                        toBeRemovedTags = Sets.newHashSet(c);
     251                                }
     252                        }
     253                       
    200254                    if (conceptService.getConcept(oneChildConcept.getUuid(), chemspiderBranch).getLabels().size() > 0) {
    201255                        // this concept was created/updated during chemspider import. Replace the tag with superCUI.
    202                         tagService.createTag(superCUI);
    203                         final Set<Concept> toBeAddedTags = ImmutableSet.of(superUMLSConcept);
    204                         final Set<Concept> toBeRemovedTags = ImmutableSet.of(cuiConcept);
    205                         final Changeset changeset = new ChangesetImpl().withAdd(new ActionImpl().withTags(toBeAddedTags))
    206                                                                         .withRemove(new ActionImpl().withTags(toBeRemovedTags));
     256                        tagService.createTag(superUMLSConcept.getUuid());
     257                        final Set<Concept> toBeAddedTags = Sets.newHashSet(superUMLSConcept);
     258                       
     259                        final Changeset changeset = new ChangesetImpl().withRemove(new ActionImpl().withTags(toBeRemovedTags)).withAdd(new ActionImpl().withTags(toBeAddedTags));
     260                       
     261                        Transaction tx = graphTemplate.getGraphDb().beginTx();
    207262                        conceptService.updateConcept(oneChildConcept.getUuid(), changeset, chemspiderBranch);
     263                        tx.success();
     264                        tx.finish();
    208265                       
    209266                        writer.write(meshCode + "\t" + cuiCode + "\t" + superCUI + "\n");
     
    216273            if ((counter % chunkSize) == 0) {
    217274                logger.info("counter: {}", counter);
    218                 // time for a transaction.
    219                 tx.success();
    220                 tx.finish();
    221                 tx = graphTemplate.getGraphDb().beginTx();
    222275            }
    223276        }       
    224         // finish the last transaction
    225         tx.success();
    226         tx.finish();
    227277       
    228278        writer.flush();
     
    235285       
    236286        final ApplicationContext ctx = new ClassPathXmlApplicationContext("/nl/nbic/conceptwiki/imports/import-chemspider-context.xml");
     287       
    237288        final ChemSpiderImportMesh_fixingTags chemSpiderImportMesh_fixingTags = (ChemSpiderImportMesh_fixingTags)ctx.getBean(ChemSpiderImportMesh_fixingTags.class);
    238289       
Note: See TracChangeset for help on using the changeset viewer.