public static async IAsyncEnumerable <MedicationInteractionPair> ParseDrugInteractionsAsync(string jstring) { //var interactionList = new List<MedicationInteractionPair>(); JObject j = new JObject(); int tokenCount = 0; int fullInteractiveTypeCount = 0; int interactionPairCount = 0; var minConceptTokenList = new List <JToken>(); var urlTokenList = new List <JToken>(); j = JObject.Parse(jstring); try { tokenCount = j["fullInteractionTypeGroup"].Children()["fullInteractionType"].Children()["minConcept"].ToList().Count(); fullInteractiveTypeCount = j["fullInteractionTypeGroup"].Children()["fullInteractionType"].ToList().Count(); } catch (NullReferenceException) { tokenCount = 0; fullInteractiveTypeCount = 0; interactionPairCount = 0; } for (int f = 0; f < fullInteractiveTypeCount; f++) { interactionPairCount = j["fullInteractionTypeGroup"][f]["fullInteractionType"].Children()["interactionPair"].ToList().Count(); for (int i = 0; i < interactionPairCount; i++) { var interaction = new MedicationInteractionPair() { InteractionId = Guid.NewGuid() }; interaction.Comment = j["fullInteractionTypeGroup"][f]["fullInteractionType"][i]["comment"].ToString(); interaction.MedicationPair = (new MedicationInteractionPair.MedicationInteractionViewModel() { DisplayName = j["fullInteractionTypeGroup"][f]["fullInteractionType"][i]["minConcept"][0]["name"].ToString(), RxCui = j["fullInteractionTypeGroup"][f]["fullInteractionType"][i]["minConcept"][0]["rxcui"].ToString() }, new MedicationInteractionPair.MedicationInteractionViewModel() { DisplayName = j["fullInteractionTypeGroup"][f]["fullInteractionType"][i]["minConcept"][1]["name"].ToString(), RxCui = j["fullInteractionTypeGroup"][f]["fullInteractionType"][i]["minConcept"][1]["rxcui"].ToString() }); //MinConcept also contains the RxCuis, which can be used to .Join these with the MedDTO object thing //interactionList.Add(interaction); var interactionConceptCount = j["fullInteractionTypeGroup"][f]["fullInteractionType"][i]["interactionPair"].Children()["interactionConcept"].ToList().Count(); string PATTERN = @"interaction.(?:(?!\.).)*"; var m = Regex.Matches(interaction.Comment, PATTERN); // for (int p = 0; p < interactionConceptCount; p++) // { // var detail = new MedicationInteractionPair.InteractionDetail(); // detail.InteractionAssertion = char.ToUpper(m[p].Groups[0].Value[0]) + m[p].Groups[0].Value.Substring(1); // detail.Description = j["fullInteractionTypeGroup"][f]["fullInteractionType"][i]["interactionPair"][p]["description"].ToString(); // detail.Severity = j["fullInteractionTypeGroup"][f]["fullInteractionType"][i]["interactionPair"][p]["severity"].ToString(); // detail.LinkTupList = new List<(string, Uri)>(j["fullInteractionTypeGroup"][f]["fullInteractionType"][i]["interactionPair"][p]["interactionConcept"].Children()["minConceptItem"]["name"].ToList() // .Select(x => x.ToString().ToUpper()) // .Zip(j["fullInteractionTypeGroup"][f]["fullInteractionType"][i]["interactionPair"][p]["interactionConcept"].Children()["sourceConceptItem"]["url"].ToList() // .Select(v => new Uri(v.ToString().Equals("NA") // ? "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3422823/" // : v.ToString())))); // interaction.DrugInteractionDetails.Add(detail); // } var option = new ParallelOptions(); Parallel.For(0, interactionConceptCount, (p, state) => { var detail = new MedicationInteractionPair.InteractionDetail(); detail.InteractionAssertion = char.ToUpper(m[p].Groups[0].Value[0]) + m[p].Groups[0].Value.Substring(1); detail.Description = j["fullInteractionTypeGroup"][f]["fullInteractionType"][i]["interactionPair"][p]["description"].ToString(); detail.Severity = j["fullInteractionTypeGroup"][f]["fullInteractionType"][i]["interactionPair"][p]["severity"].ToString(); detail.LinkTupList = new List <(string, Uri)>(j["fullInteractionTypeGroup"][f]["fullInteractionType"][i]["interactionPair"][p]["interactionConcept"].Children()["minConceptItem"]["name"].ToList() .Select(x => x.ToString().ToUpper()) .Zip(j["fullInteractionTypeGroup"][f]["fullInteractionType"][i]["interactionPair"][p]["interactionConcept"].Children()["sourceConceptItem"]["url"].ToList() .Select(v => new Uri(v.ToString().Equals("NA") ? "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3422823/" : v.ToString())))); interaction.DrugInteractionDetails.Add(detail); });
public void ParseDrugInteractions(string jstring) { var interactionList = new List <MedicationInteractionPair>(); JObject j = new JObject(); int tokenCount = 0; int fullInteractiveTypeCount = 0; int interactionPairCount = 0; var minConceptTokenList = new List <JToken>(); var urlTokenList = new List <JToken>(); j = JObject.Parse(jstring); try { tokenCount = j["fullInteractionTypeGroup"].Children()["fullInteractionType"].Children()["minConcept"].ToList().Count(); fullInteractiveTypeCount = j["fullInteractionTypeGroup"].Children()["fullInteractionType"].ToList().Count(); } catch (NullReferenceException) { tokenCount = 0; fullInteractiveTypeCount = 0; interactionPairCount = 0; } for (int f = 0; f < fullInteractiveTypeCount; f++) { interactionPairCount = j["fullInteractionTypeGroup"][f]["fullInteractionType"].Children()["interactionPair"].ToList().Count(); for (int i = 0; i < interactionPairCount; i++) { var interaction = new MedicationInteractionPair() { InteractionId = Guid.NewGuid() }; interaction.Comment = j["fullInteractionTypeGroup"][f]["fullInteractionType"][i]["comment"].ToString(); interaction.MedicationPair = (new MedicationInteractionPair.MedicationInteractionViewModel() { DisplayName = j["fullInteractionTypeGroup"][f]["fullInteractionType"][i]["minConcept"][0]["name"].ToString(), RxCui = j["fullInteractionTypeGroup"][f]["fullInteractionType"][i]["minConcept"][0]["rxcui"].ToString() }, new MedicationInteractionPair.MedicationInteractionViewModel() { DisplayName = j["fullInteractionTypeGroup"][f]["fullInteractionType"][i]["minConcept"][1]["name"].ToString(), RxCui = j["fullInteractionTypeGroup"][f]["fullInteractionType"][i]["minConcept"][1]["rxcui"].ToString() }); //MinConcept also contains the RxCuis, which can be used to .Join these with the MedDTO object thing interactionList.Add(interaction); var interactionConceptCount = j["fullInteractionTypeGroup"][f]["fullInteractionType"][i]["interactionPair"].Children()["interactionConcept"].ToList().Count(); string PATTERN = @"interaction.(?:(?!\.).)*"; var m = Regex.Matches(interaction.Comment, PATTERN); //int parseHelper = 5; for (int p = 0; p < interactionConceptCount; p++) { var detail = new MedicationInteractionPair.InteractionDetail(); detail.InteractionAssertion = char.ToUpper(m[p].Groups[0].Value[0]) + m[p].Groups[0].Value.Substring(1); detail.Description = j["fullInteractionTypeGroup"][f]["fullInteractionType"][i]["interactionPair"][p]["description"].ToString(); detail.Severity = j["fullInteractionTypeGroup"][f]["fullInteractionType"][i]["interactionPair"][p]["severity"].ToString(); detail.LinkTupList = new List <(string, Uri)>(j["fullInteractionTypeGroup"][f]["fullInteractionType"][i]["interactionPair"][p]["interactionConcept"].Children()["minConceptItem"]["name"].ToList() .Select(x => x.ToString().ToUpper()) .Zip(j["fullInteractionTypeGroup"][f]["fullInteractionType"][i]["interactionPair"][p]["interactionConcept"].Children()["sourceConceptItem"]["url"].ToList() .Select(v => new Uri(v.ToString().Equals("NA") ? "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3422823/" : v.ToString())))); //detail.InteractionAssertion = (interaction.Comment.Substring(m.Index + 4)[0])+ interaction.Comment.Substring(m.Index + 5)?? "No Details on Source available"; //string[] stringArray = { "Drug1", "Drug2" }; //var splitString = interaction.Comment.Split(stringArray, StringSplitOptions.RemoveEmptyEntries); //string levelOne = p == 0 ? splitString[3] : splitString[parseHelper]; //var levelTwo = levelOne.Split("and ", 2)[1]; //detail.InteractionAssertion = char.ToUpper(levelTwo[0]) + levelTwo.Substring(1); //while (p > 0) //{ // parseHelper = splitString.Count() - 1 > parseHelper ? parseHelper + 2 : 5; // break; //} interaction.DrugInteractionDetails.Add(detail); } foreach (var observer in observers) { observer.OnNext(interaction); } } if (interactionPairCount == 0) { var emptyDrug = new MedicationInteractionPair(); emptyDrug.DrugInteractionDetails.Add( new MedicationInteractionPair.InteractionDetail() { Description = "No Drug-Drug Interactions Found", Severity = "N/A", LinkTupList = new List <(string, Uri)>() { ("NIH", new Uri(Constants.NLM_INTERACTION_API_URI)) } });