Advertisement
Guest User

Untitled

a guest
Jul 12th, 2017
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 33.28 KB | None | 0 0
  1. package gov.nih.nlm.nls.metamap;
  2.  
  3. import com.sun.deploy.util.StringUtils;
  4. import org.json.JSONArray;
  5. import org.json.JSONObject;
  6.  
  7. import java.sql.*;
  8. import java.util.ArrayList;
  9. import java.util.Arrays;
  10. import java.util.List;
  11.  
  12. import static java.lang.System.out;
  13.  
  14. /**
  15. * Created by Christine on 10/7/2017.
  16. */
  17. public class ClinicalTrialsPreprocessor {
  18.  
  19. // JDBC driver name and database URL
  20. static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
  21. static final String DB_URL = "jdbc:mysql://trec2017.ckdnt5fqmiqn.ap-northeast-2.rds.amazonaws.com:3306/trec2017";
  22.  
  23. // Database credentials
  24. static final String USER = "trec2017";
  25. static final String PASS = "kaistknowtrec2017";
  26.  
  27. static String serverhost = MetaMapApi.DEFAULT_SERVER_HOST;
  28. static int serverport = MetaMapApi.DEFAULT_SERVER_PORT; // default port
  29. static int timeout = -1; // use default timeout
  30.  
  31. //static MetaMapApi api = new MetaMapApiImpl("127.0.0.1",8066);
  32.  
  33. static Connection conn = null;
  34. static Statement stmt = null;
  35.  
  36. static List<String> semanticFilter = Arrays.asList("aapp","acab","amas","antb","bacs","bdsu",
  37. "bdsy","biof","blor","bpoc","celf","celc","cell","chem","chvf","chvs","clna",
  38. "clnd","comd","diap","drdd","dsyn","enzy","genf","gngm","hops","horm","imft",
  39. "lbpr","irda","lbtr","inch","lipd","mbrt","medd","menp","mobd","moft","mosq",
  40. "neop","nnon","nsba","orch","ortf","patf","phsu","phsf","sbst","sosy","topp",
  41. "virs","strd","tisu","vita","fndg"
  42. );
  43.  
  44. public static void main(String args[]) throws Exception { //Receives file directory as argument
  45.  
  46. //STEP 2: Register JDBC driver
  47. Class.forName("com.mysql.jdbc.Driver");
  48.  
  49. //STEP 3: Open a connection
  50. out.println("Connecting to a selected database...");
  51. conn = DriverManager.getConnection(DB_URL, USER, PASS);
  52. out.println("Connected database successfully...");
  53.  
  54. //TODO: Changed the years listed here
  55. ArrayList<String> years = new ArrayList<String>(
  56. Arrays.asList("2006", "2007", "2008","2009","2010"));
  57.  
  58. for(int i=0;i<years.size();i++){
  59. out.println("YEAR :"+years.get(i));
  60. dbOperations(conn,years.get(i));
  61. //break;
  62. }
  63.  
  64.  
  65. try
  66. {
  67. if(stmt!=null)
  68. conn.close();
  69. }catch(SQLException se){
  70. }// do nothing
  71. try{
  72. if(conn!=null)
  73. conn.close();
  74. }catch(SQLException se){
  75. se.printStackTrace();
  76. }//end finally try
  77. }
  78.  
  79. public static void updateTables(Connection conn,ArrayList<String> params1, ArrayList<String> params2) throws Exception{ //params1 is for clinical_trials_mapped, params2 is for clinical_trials
  80. // create the java mysql update preparedstatement
  81. String query1 = "update trec2017.clinical_trials_mapped set title_concepts = ?,title_cuis = ?," +
  82. "concepts = ?, matched_words = ?, preferred_words = ?, cuis = ?, gene_cuis = ?, condition_cui = ?, intervention_cui = ?, " +
  83. "inclusion_concepts = ?, inclusion_cuis = ?, " +
  84. "exclusion_concepts = ?, exclusion_cuis = ?, mesh_terms_cuis =? where nct_id = ?;";//updating entries for clinical_trials_mapped
  85.  
  86. PreparedStatement preparedStmt1 = conn.prepareStatement(query1);
  87. for(int i=0;i<params1.size();i++){
  88. preparedStmt1.setString(i+1, params1.get(i));
  89. }
  90.  
  91. // execute the java preparedstatement
  92. preparedStmt1.executeUpdate();
  93.  
  94. String query2 = "update trec2017.clinical_trials set inclusion_raw = ?, exclusion_raw = ? where nct_id = ?;";//updating entries for clinical_trials
  95. PreparedStatement preparedStmt2 = conn.prepareStatement(query2);
  96. for(int i=0;i<params2.size();i++){
  97. preparedStmt2.setString(i+1, params2.get(i));
  98. }
  99. }
  100.  
  101. public static void dbOperations(Connection con,String year)
  102. throws SQLException {
  103.  
  104. Statement stmt = null;
  105. String query1 =
  106. "select nct_id, title, brief_summary, detailed_description, criteria, inclusion_raw, intervention, patient_condition,mesh_terms " +
  107. "from trec2017.clinical_trials where year="+year; //retrieving rows
  108.  
  109. try {
  110. stmt = con.createStatement();
  111. ResultSet rs = stmt.executeQuery(query1);
  112. while (rs.next()) {
  113.  
  114. ArrayList<String> params1 = new ArrayList<String>();
  115. ArrayList<String> params2 = new ArrayList<String>();
  116.  
  117. String nct_id = rs.getString("nct_id");
  118. String title = rs.getString("title");
  119. String brief_summary = rs.getString("brief_summary");
  120. String detailed_description = rs.getString("detailed_description");
  121. String criteria = rs.getString("criteria");
  122. String intervention = rs.getString("intervention");
  123. String condition = rs.getString("patient_condition");
  124. String mesh_terms = rs.getString("mesh_terms");
  125. String inclusion = rs.getString("inclusion_raw");
  126. out.println("NCT ID : " + nct_id);
  127.  
  128. if(criteria!=null&&inclusion==null){
  129.  
  130. /*
  131. System.out.println("Title : "+title);
  132. System.out.println("Brief Summary :" + brief_summary);
  133. System.out.println("Detailed Description :"+ detailed_description);
  134. System.out.println("Criteria :"+ criteria);
  135. */
  136.  
  137. JSONObject titleConcepts = getTitleConcepts(title);
  138.  
  139. String title_cuis = titleConcepts.getString("title_cuis");
  140. String title_concepts = titleConcepts.getString("title_concepts");
  141. JSONObject detailConcepts = getConceptsFromDetails(brief_summary, "");
  142. String concepts = detailConcepts.getString("conceptList");
  143. String matched_words = detailConcepts.getString("matchedWordList");
  144. String preferred_words = detailConcepts.getString("preferredNameList");
  145. String cuis = detailConcepts.getString("cuis");
  146. String genes = detailConcepts.getString("genes");
  147. String intervention_cui = getInterventionCui(intervention);
  148. String condition_cui = getConditionCui(condition);
  149.  
  150. /*
  151. System.out.println("Title CUIS :"+title_cuis);
  152. System.out.println("Title Concepts :" +title_concepts);
  153. System.out.println("Concepts :" + concepts);
  154. System.out.println("Matched Words :"+matched_words);
  155. System.out.println("Preferred Words :"+preferred_words);
  156. System.out.println("CUIS:"+cuis);
  157. System.out.println("Genes :"+genes);
  158. System.out.println("Intervention CUI :"+intervention_cui);
  159. System.out.println("Condition CUI :"+condition_cui);
  160. */
  161.  
  162.  
  163. criteria = criteria.trim().replaceAll(" +", " ");
  164. JSONObject parsedCriteria = parseCriteria(criteria); //returns the inclusion/exclusion concepts and cuis
  165. String inclusion_raw = parsedCriteria.getString("inclusion_raw");
  166. String inclusion_concepts = parsedCriteria.getString("inclusion_concepts");
  167. String inclusion_cuis = parsedCriteria.getString("inclusion_cuis");
  168. String exclusion_raw = parsedCriteria.getString("exclusion_raw");
  169. String exclusion_concepts = parsedCriteria.getString("exclusion_concepts");
  170. String exclusion_cuis = parsedCriteria.getString("exclusion_cuis");
  171. String mesh_terms_cuis = getMeshCuis(mesh_terms);
  172.  
  173. /*
  174. out.println("Inclusion Raw:"+parsedCriteria.getString("inclusion_raw"));
  175. out.println("Inclusion Concepts :"+parsedCriteria.getString("inclusion_concepts"));
  176. out.println("Inclusion Cuis :"+parsedCriteria.getString("inclusion_cuis"));
  177. out.println("Exclusion raw:"+parsedCriteria.getString("exclusion_raw"));
  178. out.println("Exclusion concepts:"+parsedCriteria.getString("exclusion_concepts"));
  179. out.println("Exclusion Cuis :"+parsedCriteria.getString("exclusion_cuis"));
  180. */
  181.  
  182. //parameters for clinical_trials_mapped
  183. params1.add(title_concepts);
  184. params1.add(title_cuis);
  185. params1.add(concepts);
  186. params1.add(matched_words);
  187. params1.add(preferred_words);
  188. params1.add(cuis);
  189. params1.add(genes);
  190. params1.add(condition_cui);
  191. params1.add(intervention_cui);
  192. params1.add(inclusion_concepts);
  193. params1.add(inclusion_cuis);
  194. params1.add(exclusion_concepts);
  195. params1.add(exclusion_cuis);
  196. params1.add(mesh_terms_cuis);
  197. params1.add(nct_id);
  198.  
  199. //parameters for clinical_trials_table
  200. params2.add(inclusion_raw);
  201. params2.add(exclusion_raw);
  202. params2.add(nct_id);
  203.  
  204. try {
  205. //System.out.println(params.size());
  206. updateTables(conn, params1, params2);
  207. } catch (Exception e) {
  208. e.printStackTrace();
  209. continue;
  210. }
  211. }
  212. }
  213.  
  214. } catch (SQLException e ) {
  215. e.printStackTrace();
  216. } catch (Exception e){
  217. e.printStackTrace();
  218. }
  219. finally {
  220. if (stmt != null) { stmt.close(); }
  221. }
  222. }
  223.  
  224. public static String getMeshCuis(String mesh_terms) throws Exception{
  225. ArrayList<String> cuis = new ArrayList<String>();
  226. MetaMapApi api = new MetaMapApiImpl("127.0.0.1",8066);
  227.  
  228. //System.out.println(title);
  229. List<Result> resultList = api.processCitationsFromString(mesh_terms);
  230. //System.out.println("Length :"+resultList.size());
  231. //Result result = resultList.get(0);
  232. for(Result result: resultList){
  233. for (Utterance utterance: result.getUtteranceList()) {
  234. for (PCM pcm: utterance.getPCMList()) {
  235. for (Mapping map : pcm.getMappingList()) {
  236. for (Ev mapEv : map.getEvList()) {
  237. String cui = mapEv.getConceptId();
  238. String conceptName = mapEv.getConceptName();
  239. List<String> semanticTypes = mapEv.getSemanticTypes();
  240. for(int sem=0; sem<semanticTypes.size();sem++){
  241. if(semanticFilter.contains(semanticTypes.get(sem))&&!cuis.contains(cui)){
  242. cuis.add(cui);
  243. }
  244. }
  245. }
  246. }
  247. }
  248. }
  249. }
  250. //System.out.println(cuis.size());
  251.  
  252. api.disconnect();
  253. return StringUtils.join(cuis,",");
  254.  
  255. }
  256.  
  257. public static JSONObject getTitleConcepts(String title) throws Exception{
  258. ArrayList<String> cuis = new ArrayList<String>();
  259. ArrayList<String> concepts = new ArrayList<String>();
  260.  
  261. MetaMapApi api = new MetaMapApiImpl("127.0.0.1",8066);
  262.  
  263. //System.out.println(title);
  264. List<Result> resultList = api.processCitationsFromString(title);
  265. //System.out.println("Length :"+resultList.size());
  266. //Result result = resultList.get(0);
  267. for(Result result: resultList){
  268. for (Utterance utterance: result.getUtteranceList()) {
  269. for (PCM pcm: utterance.getPCMList()) {
  270. for (Mapping map : pcm.getMappingList()) {
  271. for (Ev mapEv : map.getEvList()) {
  272. String cui = mapEv.getConceptId();
  273. String conceptName = mapEv.getConceptName();
  274. List<String> semanticTypes = mapEv.getSemanticTypes();
  275. for(int sem=0; sem<semanticTypes.size();sem++){
  276. if(semanticFilter.contains(semanticTypes.get(sem))&&!cuis.contains(cui)){
  277. cuis.add(cui);
  278. concepts.add(conceptName);
  279. }
  280. }
  281. }
  282. }
  283. }
  284. }
  285. }
  286. //System.out.println(cuis.size());
  287. JSONObject umlsExtracts = new JSONObject();
  288. umlsExtracts.put("title_cuis",StringUtils.join(cuis,","));
  289. umlsExtracts.put("title_concepts",StringUtils.join(concepts,","));
  290.  
  291. api.disconnect();
  292. return umlsExtracts;
  293.  
  294. }
  295.  
  296.  
  297. public static JSONObject getConceptsFromDetails(String brief, String detailed) throws Exception{ //returns relevant UMLS concepts from brief and detailed description
  298. ArrayList<String> cuis = new ArrayList<String>();
  299. ArrayList<String> genes = new ArrayList<String>();
  300. ArrayList<String> conceptList = new ArrayList<String>();
  301. ArrayList<String> preferredNameList = new ArrayList<String>();
  302. ArrayList<String> matchedWordList = new ArrayList<String>();
  303.  
  304. MetaMapApi api = new MetaMapApiImpl("127.0.0.1",8066);
  305.  
  306. List<Result> resultList = api.processCitationsFromString(brief+detailed);
  307. //Result result = resultList.get(0);
  308. for(Result result:resultList){
  309. for (Utterance utterance: result.getUtteranceList()) {
  310. for (PCM pcm : utterance.getPCMList()) {
  311. //System.out.println("Mappings:");
  312. for (Mapping map : pcm.getMappingList()) {
  313. //System.out.println(" Map Score: " + map.getScore());
  314. for (Ev mapEv : map.getEvList()) {
  315. String cui = mapEv.getConceptId();
  316. //System.out.println(" Concept Id: " + mapEv.getConceptId());
  317. String conceptName = mapEv.getConceptName();
  318. //System.out.println(" Concept Name: " + mapEv.getConceptName());
  319. String preferredName = mapEv.getPreferredName();
  320. //System.out.println(" Preferred Name: " + mapEv.getPreferredName());
  321. List<String> matchedWords = mapEv.getMatchedWords();
  322. //System.out.println(" Matched Words: " + mapEv.getMatchedWords());
  323. List<String> semanticTypes = mapEv.getSemanticTypes();
  324. for(int sem=0; sem<semanticTypes.size();sem++){
  325. String semanticType = semanticTypes.get(sem);
  326. if(semanticFilter.contains(semanticType)&&!cuis.contains(cui)){
  327. cuis.add(cui);
  328. conceptList.add(conceptName);
  329. preferredNameList.add(preferredName);
  330. matchedWordList.addAll(matchedWords);
  331. }
  332. //add to list of genes/proteins/amino acids mentioned in this article
  333. if(semanticType.equals("aapp")||semanticType.equals("amas")||semanticType.equals("genf")||semanticType.equals("gngm")){
  334. genes.add(cui);
  335. }
  336.  
  337. }
  338. }
  339. }
  340. }
  341. }
  342. }
  343.  
  344.  
  345. JSONObject umlsExtracts = new JSONObject();
  346. umlsExtracts.put("cuis",StringUtils.join(cuis,","));
  347. umlsExtracts.put("genes",StringUtils.join(genes,","));
  348. umlsExtracts.put("conceptList",StringUtils.join(conceptList,","));
  349. umlsExtracts.put("preferredNameList",StringUtils.join(preferredNameList,","));
  350. umlsExtracts.put("matchedWordList",StringUtils.join(preferredNameList,","));
  351.  
  352. api.disconnect();
  353. //System.out.println(umlsExtracts);
  354. return umlsExtracts;
  355. }
  356.  
  357. public static String getNegations(String someText) throws Exception{
  358.  
  359. MetaMapApi api = new MetaMapApiImpl("127.0.0.1",8066);
  360. List<Result> resultList = api.processCitationsFromString(someText);
  361. for(Result result:resultList){
  362. List<Negation> negList = result.getNegationList();
  363. if (negList.size() > 0) {
  364. out.println("Negations:");
  365. for (Negation e : negList) {
  366. out.println("type: " + e.getType());
  367. out.print("Trigger: " + e.getTrigger() + ": [");
  368. for (Position pos : e.getTriggerPositionList()) {
  369. out.print(pos + ",");
  370. }
  371. out.println("]");
  372. out.print("ConceptPairs: [");
  373. for (ConceptPair pair : e.getConceptPairList()) {
  374. out.print(pair + ",");
  375. }
  376. out.println("]");
  377. out.print("ConceptPositionList: [");
  378. for (Position pos : e.getConceptPositionList()) {
  379. out.print(pos + ",");
  380. }
  381. out.println("]");
  382. }
  383. }
  384. }
  385. api.disconnect();
  386. return "";
  387. }
  388.  
  389. public static JSONObject getConceptsFromCriteria(String criteria) throws Exception{ //returns relevant UMLS concepts from brief and detailed description
  390.  
  391. //System.out.println("Here: "+criteria);
  392.  
  393. ArrayList<String> cuis = new ArrayList<String>();
  394. ArrayList<String> genes = new ArrayList<String>();
  395. ArrayList<String> conceptList = new ArrayList<String>();
  396. ArrayList<String> preferredNameList = new ArrayList<String>();
  397. ArrayList<String> matchedWordList = new ArrayList<String>();
  398.  
  399. MetaMapApi api = new MetaMapApiImpl("127.0.0.1",8066);
  400. List<Result> resultList = api.processCitationsFromString(criteria);
  401. //Result result = resultList.get(0);
  402.  
  403. for(Result result:resultList){
  404. for (Utterance utterance: result.getUtteranceList()) {
  405. for (PCM pcm : utterance.getPCMList()) {
  406. //System.out.println("Mappings:");
  407. for (Mapping map : pcm.getMappingList()) {
  408. //System.out.println(" Map Score: " + map.getScore());
  409. for (Ev mapEv : map.getEvList()) {
  410. String cui = mapEv.getConceptId();
  411. //System.out.println(" Concept Id: " + mapEv.getConceptId());
  412. String conceptName = mapEv.getConceptName();
  413. //System.out.println(" Concept Name: " + mapEv.getConceptName());
  414. String preferredName = mapEv.getPreferredName();
  415. //System.out.println(" Preferred Name: " + mapEv.getPreferredName());
  416. List<String> matchedWords = mapEv.getMatchedWords();
  417. //System.out.println(" Matched Words: " + mapEv.getMatchedWords());
  418. List<String> semanticTypes = mapEv.getSemanticTypes();
  419. for(int sem=0; sem<semanticTypes.size();sem++){
  420. String semanticType = semanticTypes.get(sem);
  421. if(semanticFilter.contains(semanticType)&&!cuis.contains(cui)){
  422. cuis.add(cui);
  423. conceptList.add(conceptName);
  424. preferredNameList.add(preferredName);
  425. matchedWordList.addAll(matchedWords);
  426. }
  427. //add to list of genes/proteins/amino acids mentioned in this article
  428. if(semanticType.equals("aapp")||semanticType.equals("amas")||semanticType.equals("genf")||semanticType.equals("gngm")){
  429. genes.add(cui);
  430. }
  431.  
  432. }
  433. }
  434. }
  435. }
  436. }
  437. }
  438.  
  439. JSONObject umlsExtracts = new JSONObject();
  440. umlsExtracts.put("cuis", new JSONArray(cuis));
  441. umlsExtracts.put("conceptList",new JSONArray(conceptList));
  442. //System.out.println(umlsExtracts);
  443.  
  444. api.disconnect();
  445. return umlsExtracts;
  446. }
  447.  
  448.  
  449. public static JSONObject parseCriteria(String criteria) throws Exception{
  450. JSONObject reqs = new JSONObject();
  451. reqs.put("inclusion_raw","");
  452. reqs.put("exclusion_raw","");
  453. reqs.put("inclusion_concepts",",");
  454. reqs.put("inclusion_cuis",",");
  455. reqs.put("exclusion_concepts",",");
  456. reqs.put("exclusion_cuis",",");
  457.  
  458. ArrayList<String> inclusionCons = new ArrayList<String>();
  459. ArrayList<String> inclusionCuis = new ArrayList<String>();
  460. ArrayList<String> exclusionCons = new ArrayList<String>();
  461. ArrayList<String> exclusionCuis = new ArrayList<String>();
  462.  
  463. if(!criteria.contains("Inclusion")){ //handling weird formats -- by default they are in the inclusion criteria
  464. JSONObject criteriaConcepts = getConceptsFromCriteria(criteria);
  465. JSONArray conArr = (JSONArray)criteriaConcepts.getJSONArray("conceptList");
  466. JSONArray cuiArr = (JSONArray)criteriaConcepts.getJSONArray("cuis");
  467. for(int ind=0; ind<conArr.length();ind++){
  468. String conc = conArr.getString(ind);
  469. if(conc.toLowerCase().contains("not ")||conc.toLowerCase().contains("negative ")||conc.toLowerCase().contains("no ")){
  470. exclusionCons.add(conc);
  471. exclusionCuis.add(cuiArr.getString(ind));
  472. }
  473. else
  474. {
  475. inclusionCons.add(conc);
  476. inclusionCuis.add(cuiArr.getString(ind));
  477. }
  478. }
  479.  
  480. reqs.put("inclusion_raw",criteria);
  481. reqs.put("exclusion_raw","");
  482. reqs.put("inclusion_concepts",StringUtils.join(inclusionCons,","));
  483. reqs.put("inclusion_cuis",StringUtils.join(inclusionCuis,","));
  484. reqs.put("exclusion_concepts",StringUtils.join(exclusionCons,","));
  485. reqs.put("exclusion_cuis",StringUtils.join(exclusionCuis,","));
  486. //out.println("Inclusion :"+StringUtils.join(inclusionCons,","));
  487. //out.println("Exclusion :"+StringUtils.join(exclusionCons,","));
  488. }
  489. else{
  490. String[] criteriaTokens = criteria.split("Exclusion ");
  491. //System.out.println(criteriaTokens.length);
  492. if(criteriaTokens.length>=1){ //There is an inclusion criteria
  493. JSONObject criteriaConcepts = getConceptsFromCriteria(criteriaTokens[0]);
  494. JSONArray conArr = (JSONArray)criteriaConcepts.getJSONArray("conceptList");
  495. JSONArray cuiArr = (JSONArray)criteriaConcepts.getJSONArray("cuis");
  496. for(int ind=0; ind<conArr.length();ind++){
  497. String conc = conArr.getString(ind);
  498. inclusionCons.add(conc);
  499. inclusionCuis.add(cuiArr.getString(ind));
  500. }
  501. reqs.put("inclusion_raw",criteriaTokens[0]);
  502. reqs.put("inclusion_concepts",StringUtils.join(inclusionCons,","));
  503. reqs.put("inclusion_cuis",StringUtils.join(inclusionCuis,","));
  504. }
  505. if(criteriaTokens.length>=2){ //There is an exclusion criteria
  506.  
  507. JSONObject criteriaConcepts = getConceptsFromCriteria(criteriaTokens[1]);
  508. JSONArray conArr = (JSONArray)criteriaConcepts.getJSONArray("conceptList");
  509. JSONArray cuiArr = (JSONArray)criteriaConcepts.getJSONArray("cuis");
  510. for(int ind=0; ind<conArr.length();ind++) {
  511. //out.println("This was true.");
  512. String conc = conArr.getString(ind);
  513. exclusionCons.add(conc);
  514. exclusionCuis.add(cuiArr.getString(ind));
  515. }
  516. reqs.put("exclusion_raw","Exclusion "+criteriaTokens[1]);
  517. reqs.put("exclusion_concepts",StringUtils.join(exclusionCons,","));
  518. reqs.put("exclusion_cuis",StringUtils.join(exclusionCuis,","));
  519. }
  520. }
  521.  
  522.  
  523. return reqs;
  524. }
  525.  
  526. public static String getInterventionCui(String intervention) throws Exception{
  527.  
  528. ArrayList<String> cuis = new ArrayList<String>();
  529.  
  530. MetaMapApi api = new MetaMapApiImpl("127.0.0.1",8066);
  531. List<Result> resultList = api.processCitationsFromString(intervention);
  532. //Result result = resultList.get(0);
  533.  
  534. for(Result result: resultList){
  535. for (Utterance utterance: result.getUtteranceList()) {
  536. for (PCM pcm : utterance.getPCMList()) {
  537. //System.out.println("Mappings:");
  538. for (Mapping map : pcm.getMappingList()) {
  539. //System.out.println(" Map Score: " + map.getScore());
  540. for (Ev mapEv : map.getEvList()) {
  541. String cui = mapEv.getConceptId();
  542. //System.out.println(" Concept Id: " + mapEv.getConceptId());
  543. String conceptName = mapEv.getConceptName();
  544. //System.out.println(" Concept Name: " + mapEv.getConceptName());
  545.  
  546. List<String> semanticTypes = mapEv.getSemanticTypes();
  547. for (int sem = 0; sem < semanticTypes.size(); sem++) {
  548. String semanticType = semanticTypes.get(sem);
  549. if (semanticFilter.contains(semanticType) && !cuis.contains(cui)) {
  550. cuis.add(cui);
  551. }
  552.  
  553. }
  554. }
  555. }
  556. }
  557. }
  558. }
  559.  
  560. api.disconnect();
  561. return StringUtils.join(cuis,",");
  562. }
  563.  
  564. public static String getConditionCui(String condition) throws Exception{
  565. ArrayList<String> cuis = new ArrayList<String>();
  566.  
  567. MetaMapApi api = new MetaMapApiImpl("127.0.0.1",8066);
  568. List<Result> resultList = api.processCitationsFromString(condition);
  569. //Result result = resultList.get(0);
  570. for(Result result: resultList){
  571. for (Utterance utterance: result.getUtteranceList()) {
  572. for (PCM pcm : utterance.getPCMList()) {
  573. //System.out.println("Mappings:");
  574. for (Mapping map : pcm.getMappingList()) {
  575. //System.out.println(" Map Score: " + map.getScore());
  576. for (Ev mapEv : map.getEvList()) {
  577. String cui = mapEv.getConceptId();
  578. //System.out.println(" Concept Id: " + mapEv.getConceptId());
  579. String conceptName = mapEv.getConceptName();
  580. //System.out.println(" Concept Name: " + mapEv.getConceptName());
  581.  
  582. List<String> semanticTypes = mapEv.getSemanticTypes();
  583. for (int sem = 0; sem < semanticTypes.size(); sem++) {
  584. String semanticType = semanticTypes.get(sem);
  585. if (semanticFilter.contains(semanticType) && !cuis.contains(cui)) {
  586. cuis.add(cui);
  587. }
  588.  
  589. }
  590. }
  591. }
  592. }
  593. }
  594. }
  595.  
  596. api.disconnect();
  597.  
  598. return StringUtils.join(cuis,",");
  599. }
  600.  
  601. /*
  602. public static String getConceptsFromCriteria(String criteria){
  603.  
  604. }
  605. public static void updateDBEntry(JSONObject article){
  606. String pmid = article.getString("pmid");
  607. System.out.println("****PMID :"+pmid);
  608.  
  609. String year = article.getString("year");
  610. String journal = article.getString("journal");
  611. journal = journal.replace("\"", "");
  612. journal = journal.replace("\'","");
  613. String title = article.getString("title");
  614. title = title.replace("\"","");
  615. title = title.replace("\'","");
  616.  
  617. String articleAbstract = article.getString("abstract"); //raw abstract
  618. articleAbstract = articleAbstract.replace("\"", "");
  619. articleAbstract = articleAbstract.replace("\'","");
  620.  
  621. String title_cuis = "";
  622. String abstract_cuis = "";
  623. String diseases = "";
  624. String genes = "";
  625. String demographic = "";
  626. String abstract_concepts = "";
  627. String abstract_preferred_words = "";
  628. String abstract_matched_words = "";
  629. String mesh_main_topic = "";
  630. String main_topic_cuis = "";
  631. String other_topic = "";
  632. String other_topic_cuis = "";
  633. String keywords = "";
  634. String keyword_cuis = "";
  635. String chemicals = "";
  636. String chemical_cuis = "";
  637. Boolean isTreatment = article.getBoolean("treatment");
  638.  
  639. mesh_main_topic = article.getString("main_topic");
  640. main_topic_cuis = article.getString("main_topic_dui"); //todo: this is actually dui so translate to cui
  641. other_topic = article.getString("other_topic");
  642. other_topic_cuis = article.getString("other_topic_dui"); //todo: this is actually dui so translate to cui
  643. keywords = article.getString("keywords"); //todo: extract cui for keywords
  644. chemicals = article.getString("chemical");
  645. chemical_cuis = article.getString("chemical_dui"); //todo: convert dui to cui
  646.  
  647. if(mesh_main_topic.split(",").length == 0){ //if mesh is non-existent for the given article
  648. try
  649. {
  650. title_cuis = getTitleCuis(title); //TODO: Pass title to Metamap to extract CUIs
  651. title = title.replace("\"", "");
  652. if(!articleAbstract.equals("")) {
  653. //System.out.println("Abstract Extracts: ");
  654. JSONObject umlsExtracts = getUmlsFromAbstract(articleAbstract);
  655. abstract_cuis = umlsExtracts.getString("cuis");
  656. diseases = umlsExtracts.getString("diseases");
  657. genes = umlsExtracts.getString("genes");
  658. demographic = umlsExtracts.getString("subject");
  659. abstract_concepts = umlsExtracts.getString("conceptList");
  660. abstract_preferred_words = umlsExtracts.getString("preferredNameList");
  661. abstract_matched_words = umlsExtracts.getString("matchedWordList");
  662. genes = umlsExtracts.getString("genes");
  663.  
  664. }
  665. }
  666. catch (Exception e){
  667. System.out.println(e.toString());
  668. }
  669. }
  670.  
  671. /*
  672. System.out.println(pmid);
  673. System.out.println(year);
  674. System.out.println(journal);
  675. System.out.println(title);
  676. System.out.println(articleAbstract);
  677. System.out.println(title_cuis);
  678. System.out.println(abstract_cuis);
  679. System.out.println(diseases);
  680. System.out.println(genes);
  681. System.out.println(demographic);
  682. System.out.println(abstract_concepts);
  683. System.out.println(abstract_preferred_words);
  684. System.out.println(abstract_matched_words);
  685. System.out.println(mesh_main_topic);
  686. System.out.println(main_topic_cuis);
  687. System.out.println(other_topic);
  688. System.out.println(other_topic_cuis);
  689. System.out.println(keywords);
  690. System.out.println(keyword_cuis);
  691. System.out.println(chemicals);
  692. System.out.println(chemical_cuis);
  693. System.out.println(isTreatment);
  694. */
  695. /*
  696.  
  697. try{
  698. //STEP 4: Execute a query
  699. System.out.println("Inserting records into the table...");
  700. stmt = conn.createStatement();
  701.  
  702. String table_name = "pubmed";
  703.  
  704. String sql = "INSERT INTO "+table_name +" "+
  705. "VALUES ( " +
  706. "\""+pmid+"\","+year+",\""+journal+"\",\""+title+"\",\""+articleAbstract+"\",\""+title_cuis+"\",\""+
  707. abstract_cuis+"\",\""+diseases+"\",\""+genes+"\",\""+demographic+"\",\""+abstract_concepts+"\",\""+
  708. abstract_preferred_words+"\",\""+abstract_matched_words+"\",\""+mesh_main_topic+"\",\""+
  709. main_topic_cuis+"\",\""+other_topic+"\",\""+other_topic_cuis+"\",\""+keywords+"\",\""+
  710. keyword_cuis+"\",\""+chemicals+"\",\""+chemical_cuis+"\",\""+isTreatment+"\""+
  711. ")";
  712. System.out.println(sql);
  713. stmt.executeUpdate(sql);
  714. System.out.println("Inserted records into the table...");
  715.  
  716. }catch(SQLException se){
  717. //Handle errors for JDBC
  718. se.printStackTrace();
  719.  
  720.  
  721. }catch(Exception e){
  722. //Handle errors for Class.forName
  723. e.printStackTrace();
  724. }finally{
  725. //finally block used to close resources
  726.  
  727. }//end try
  728.  
  729. System.out.println("Goodbye!");
  730. }
  731. */
  732.  
  733. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement