Developers

About

Downloads

Developers

API Reference

The nttmuClinical.NET API Reference can be accessed online directly (available at here) or be downloaded using this link.

Developer Guide

For each component of nttmuClinical.NET, we provide a unit test code to illustrate the usage of the library. The runnable example project can be download at here.

Section heading recognition

string record = I2b22014Utilities.GetRawText(@"C:\220-01.xml"); SectionRecognizer sr = SectionRecognizer.GetInstance(@"C:\sampleSet1.model", @"C:\bag_dist.txt", @"C:\MedPost", @"C:\SecTag_concepts.csv"); List<SectionInfo> secInfos = sr.Recognize(record);int expectedSectionCount = 7; Assert.AreEqual(expectedSectionCount, secInfos.Count);string[] expectedSectionTitles = new string[] { "Assessment and Plan", "Physical Exam", "Allergies", "Medications", "Problems", "Narrative History", "Record date:"};int[,] coveredLineNumbers = new int[,] { { 117, 118, 132 }, { 113, 114, 115 }, {103, 107,109}, {100, 97, 72}, {33, 66, 43}, {7, 12, 26}, {4, 4, 3}};for (int i = 0; i < expectedSectionTitles.Length; i++){ Assert.AreEqual(expectedSectionTitles[i], secInfos[i].Heading); for (int j = 0; j < coveredLineNumbers.GetLength(1); j++) { Assert.IsTrue(secInfos[i].CoveredLineNumbers.Contains( coveredLineNumbers[i,j])); }}

Record format detection

SectionRecognizer sr = SectionRecognizer.GetInstance(@"C:\i2b22014_model", @"C:\bag_dist.txt", @"C:\MedPost", @"C:\SecTag_concepts.csv"); FormatDetector fd = new FormatDetector(sr);string record = I2b22014Utilities.GetRawText(@"C:\220-01.xml"); RecordFormat expectedFormat = RecordFormat.DischargeSummary; Assert.AreEqual(expectedFormat, fd.Detect(record)); record = I2b22014Utilities.GetRawText(@"C:\228-02.xml"); expectedFormat = RecordFormat.Email; Assert.AreEqual(expectedFormat, fd.Detect(record));

Smoking status classification

MedPost mp = new MedPost(@"C:\MedPost"); SectionRecognizer sr = SectionRecognizer.GetInstance(@"C:\i2b22014_model", @"C:\bag_dist.txt", @"C:\SecTag_concepts.csv", mp); SmokingStatusClassifier ssc = new SmokingStatusClassifier(@"C:\smokingterms.txt", @"C:\Parser\englishPCFG.ser.gz", mp, sr);string record = I2b22014Utilities.GetRawText(@"C:\220-01.xml"); SmokingStatus expectedStatus = SmokingStatus.Current; Assert.AreEqual(expectedStatus, ssc.Classify(record)); record = I2b22014Utilities.GetRawText(@"C:\220-02.xml"); expectedStatus = SmokingStatus.Past; Assert.AreEqual(expectedStatus, ssc.Classify(record)); record = I2b22014Utilities.GetRawText(@"C:\100-05.xml"); expectedStatus = SmokingStatus.Unknow; Assert.AreEqual(expectedStatus, ssc.Classify(record));

Risk factor recognition

MedPost mp = new MedPost(@"C:\MedPost"); SectionRecognizer sr = SectionRecognizer.GetInstance( @"C:\i2b22014_model", @"C:\bag_dist.txt", @"C:\SecTag_concepts.csv", mp); string record = I2b22014Utilities.GetRawText(@"C:\220-04.xml"); CompositeRiskFactorRecognizer recognizer = new CompositeRiskFactorRecognizer(mp, sr); Assert.IsEmpty(recognizer.Recognize(record));// Test add recognizer.Add(new HighBloodPressureRecognizer()); List<RiskFactorInfo> riskfactors = recognizer.Recognize(record);int expectedRiskFactorCounts = 1; Assert.AreEqual(expectedRiskFactorCounts, riskfactors.Count);int expectedStartIndex = 3215;int expectedEndIndex = 3236; Indicator expectedIndicator = Indicator.HTN_HighBloodPressure;string expectedText = "BLOOD PRESSURE 148/76";string expectedSection = "Physical Exam"; Assert.AreEqual(expectedStartIndex, riskfactors.First<RiskFactorInfo>() .StartIndex); Assert.AreEqual(expectedEndIndex, riskfactors.First<RiskFactorInfo>() .EndIndex); Assert.AreEqual(expectedIndicator, riskfactors.First<RiskFactorInfo>() .Indicator); Assert.AreEqual(expectedText, riskfactors.First<RiskFactorInfo>().Text); Assert.AreEqual(expectedSection, riskfactors.First<RiskFactorInfo>() .SectionHeading); recognizer.Add(new BMIRecognizer()); riskfactors = recognizer.Recognize(record); expectedRiskFactorCounts = 2; Assert.AreEqual(expectedRiskFactorCounts, riskfactors.Count); expectedStartIndex = 3215; expectedEndIndex = 3236; expectedIndicator = Indicator.HTN_HighBloodPressure; expectedText = "BLOOD PRESSURE 148/76"; expectedSection = "Physical Exam"; Assert.AreEqual(expectedStartIndex, riskfactors.First<RiskFactorInfo>() .StartIndex); Assert.AreEqual(expectedEndIndex, riskfactors.First<RiskFactorInfo>() .EndIndex); Assert.AreEqual(expectedIndicator, riskfactors.First<RiskFactorInfo>() .Indicator); Assert.AreEqual(expectedText, riskfactors.First<RiskFactorInfo>().Text); Assert.AreEqual(expectedSection, riskfactors.First<RiskFactorInfo>() .SectionHeading); expectedStartIndex = 3277; expectedEndIndex = 3285; expectedIndicator = Indicator.OBES_BMI; expectedText = "BMI 36.3"; expectedSection = "Physical Exam"; Assert.AreEqual(expectedStartIndex, riskfactors.Last<RiskFactorInfo>() .StartIndex); Assert.AreEqual(expectedEndIndex, riskfactors.Last<RiskFactorInfo>() .EndIndex); Assert.AreEqual(expectedIndicator, riskfactors.Last<RiskFactorInfo>() .Indicator); Assert.AreEqual(expectedText, riskfactors.Last<RiskFactorInfo>().Text); Assert.AreEqual(expectedSection, riskfactors.Last<RiskFactorInfo>() .SectionHeading); RiskFactorRecognizer ldlRecognizer = new HighLDLRecognizer(); recognizer.Add(ldlRecognizer); riskfactors = recognizer.Recognize(record); expectedRiskFactorCounts = 3; Assert.AreEqual(expectedRiskFactorCounts, riskfactors.Count); expectedStartIndex = 4131; expectedEndIndex = 4161; expectedIndicator = Indicator.HLP_LDL; expectedText = "Cholesterol-LDL 12/16/2070 108"; expectedSection = "Health Maintenance"; Assert.AreEqual(expectedStartIndex, riskfactors.Last<RiskFactorInfo>() .StartIndex); Assert.AreEqual(expectedEndIndex, riskfactors.Last<RiskFactorInfo>().EndIndex); Assert.AreEqual(expectedIndicator, riskfactors.Last<RiskFactorInfo>().Indicator); Assert.AreEqual(expectedText, riskfactors.Last<RiskFactorInfo>().Text); Assert.AreEqual(expectedSection, riskfactors.Last<RiskFactorInfo>() .SectionHeading); recognizer.Add(new HighA1cRecognizer()); riskfactors = recognizer.Recognize(record); expectedRiskFactorCounts = 4; Assert.AreEqual(expectedRiskFactorCounts, riskfactors.Count); expectedStartIndex = 4262; expectedEndIndex = 4283; expectedIndicator = Indicator.DM_A1C; expectedText = "HbA1c 12/16/2070 6.50"; expectedSection = "Health Maintenance"; Assert.AreEqual(expectedStartIndex, riskfactors.Last<RiskFactorInfo>() .StartIndex); Assert.AreEqual(expectedEndIndex, riskfactors.Last<RiskFactorInfo>().EndIndex); Assert.AreEqual(expectedIndicator, riskfactors.Last<RiskFactorInfo>().Indicator); Assert.AreEqual(expectedText, riskfactors.Last<RiskFactorInfo>().Text); Assert.AreEqual(expectedSection, riskfactors.Last<RiskFactorInfo>() .SectionHeading); record = I2b22014Utilities.GetRawText(@"C:\221-01.xml"); riskfactors = recognizer.Recognize(record); expectedRiskFactorCounts = 1; Assert.AreEqual(expectedRiskFactorCounts, riskfactors.Count); expectedStartIndex = 5457; expectedEndIndex = 5483; expectedIndicator = Indicator.HLP_LDL; expectedText = "LDL (Ultra) 123"; expectedSection = "LABS:"; Assert.AreEqual(expectedStartIndex, riskfactors.Last<RiskFactorInfo>() .StartIndex); Assert.AreEqual(expectedEndIndex, riskfactors.Last<RiskFactorInfo>().EndIndex); Assert.AreEqual(expectedIndicator, riskfactors.Last<RiskFactorInfo>().Indicator); Assert.AreEqual(expectedText, riskfactors.Last<RiskFactorInfo>().Text); Assert.AreEqual(expectedSection, riskfactors.Last<RiskFactorInfo>() .SectionHeading); // Test remove recognizer.Remove(ldlRecognizer); riskfactors = recognizer.Recognize(record); expectedRiskFactorCounts = 0; Assert.AreEqual(expectedRiskFactorCounts, riskfactors.Count); recognizer.Add(new HighGlucoseRecognizer()); riskfactors = recognizer.Recognize(record); expectedRiskFactorCounts = 1; Assert.AreEqual(expectedRiskFactorCounts, riskfactors.Count); expectedStartIndex = 3062; expectedEndIndex = 3088; expectedIndicator = Indicator.DM_HighGlucose; expectedText = "Glucose 157"; expectedSection = "LABS:"; Assert.AreEqual(expectedStartIndex, riskfactors.Last<RiskFactorInfo>() .StartIndex); Assert.AreEqual(expectedEndIndex, riskfactors.Last<RiskFactorInfo>() .EndIndex); Assert.AreEqual(expectedIndicator, riskfactors.Last<RiskFactorInfo>() .Indicator); Assert.AreEqual(expectedText, riskfactors.Last<RiskFactorInfo>().Text); Assert.AreEqual(expectedSection, riskfactors.Last<RiskFactorInfo>() .SectionHeading); record = I2b22014Utilities.GetRawText(@"C:\243-01.xml"); recognizer.Add(new HighCholesterolRecognizer()); riskfactors = recognizer.Recognize(record); expectedRiskFactorCounts = 1; Assert.AreEqual(expectedRiskFactorCounts, riskfactors.Count); expectedStartIndex = 1446; expectedEndIndex = 1454; expectedIndicator = Indicator.HLD_CHOL; expectedText = "been 263"; expectedSection = "PLAN:"; Assert.AreEqual(expectedStartIndex, riskfactors.Last<RiskFactorInfo>() .StartIndex); Assert.AreEqual(expectedEndIndex, riskfactors.Last<RiskFactorInfo>().EndIndex); Assert.AreEqual(expectedIndicator, riskfactors.Last<RiskFactorInfo>().Indicator); Assert.AreEqual(expectedText, riskfactors.Last<RiskFactorInfo>().Text); Assert.AreEqual(expectedSection, riskfactors.Last<RiskFactorInfo>() .SectionHeading); recognizer = new CompositeRiskFactorRecognizer(mp, sr); record = I2b22014Utilities.GetRawText(@"C:\220-01.xml"); recognizer.Add(CADEventRecognizer.GetInstance(@"C:\cad_event.txt", mp)); riskfactors = recognizer.Recognize(record); expectedRiskFactorCounts = 2; Assert.AreEqual(expectedRiskFactorCounts, riskfactors.Count); expectedStartIndex = 1018; expectedEndIndex = 1023; expectedIndicator = Indicator.CAD_EVENT; expectedText = "stent"; expectedSection = "Problems"; Assert.AreEqual(expectedStartIndex, riskfactors.First<RiskFactorInfo>() .StartIndex); Assert.AreEqual(expectedEndIndex, riskfactors.First<RiskFactorInfo>().EndIndex); Assert.AreEqual(expectedIndicator, riskfactors.First<RiskFactorInfo>() .Indicator); Assert.AreEqual(expectedText, riskfactors.First<RiskFactorInfo>().Text); Assert.AreEqual(expectedSection, riskfactors.First<RiskFactorInfo>() .SectionHeading); expectedStartIndex = 1011; expectedEndIndex = 1015; expectedIndicator = Indicator.CAD_EVENT; expectedText = "SEMI"; expectedSection = "Problems"; Assert.AreEqual(expectedStartIndex, riskfactors.Last<RiskFactorInfo>() .StartIndex); Assert.AreEqual(expectedEndIndex, riskfactors.Last<RiskFactorInfo>().EndIndex); Assert.AreEqual(expectedIndicator, riskfactors.Last<RiskFactorInfo>().Indicator); Assert.AreEqual(expectedText, riskfactors.Last<RiskFactorInfo>().Text); Assert.AreEqual(expectedSection, riskfactors.Last<RiskFactorInfo>() .SectionHeading);

Time attribute assignment

MedPost mp = new MedPost(@"C:\MedPost"); SectionRecognizer sr = SectionRecognizer.GetInstance(@"C:\i2b22014_model", @"C:\bag_dist.txt", @"C:\SecTag_concepts.csv", mp);string record = I2b22014Utilities.GetRawText(@"C:\220-04.xml"); FormatDetector fd = new FormatDetector(sr); RecordFormat expectedFormat = RecordFormat.DischargeSummary; Assert.AreEqual(expectedFormat, fd.Detect(record)); CompositeRiskFactorRecognizer recognizer = new CompositeRiskFactorRecognizer(mp, sr); Assert.IsEmpty(recognizer.Recognize(record)); LexicalizedParser lp = LexicalizedParser.loadModel( @"C:\Parser\englishPCFG.ser.gz"); TimeAttributeAssignmentSectionStrategy sectionStrategy = new TimeAttributeAssignmentSectionStrategy(mp, sr, lp); List<RiskFactorInfo> riskfactors = sectionStrategy.Assign(record, recognizer); Assert.IsEmpty(riskfactors); recognizer.Add(new HighBloodPressureRecognizer()); riskfactors = sectionStrategy.Assign(record, recognizer);int expectedRiskFactorCounts = 1; Assert.AreEqual(expectedRiskFactorCounts, riskfactors.Count);int expectedDCTCounts = 1; Assert.AreEqual(expectedDCTCounts, riskfactors.First<RiskFactorInfo>().TimeAttributes.Count); TimeAttribute expectedTimeAttribute = TimeAttribute.DCT_DURING; Assert.AreEqual(expectedTimeAttribute, riskfactors.First<RiskFactorInfo>().TimeAttributes.First<TimeAttribute>());int expectedStartIndex = 3215;int expectedEndIndex = 3236; Indicator expectedIndicator = Indicator.HTN_HighBloodPressure;string expectedText = "BLOOD PRESSURE 148/76";string expectedSection = "Physical Exam"; Assert.AreEqual(expectedStartIndex, riskfactors.First<RiskFactorInfo>().StartIndex); Assert.AreEqual(expectedEndIndex, riskfactors.First<RiskFactorInfo>().EndIndex); Assert.AreEqual(expectedIndicator, riskfactors.First<RiskFactorInfo>().Indicator); Assert.AreEqual(expectedText, riskfactors.First<RiskFactorInfo>().Text); Assert.AreEqual(expectedSection, riskfactors.First<RiskFactorInfo>() .SectionHeading); recognizer.Add(new BMIRecognizer()); riskfactors = sectionStrategy.Assign(record, recognizer); expectedRiskFactorCounts = 2; Assert.AreEqual(expectedRiskFactorCounts, riskfactors.Count); expectedDCTCounts = 1; Assert.AreEqual(expectedDCTCounts, riskfactors.First<RiskFactorInfo>() .TimeAttributes.Count); expectedTimeAttribute = TimeAttribute.DCT_DURING; Assert.AreEqual(expectedTimeAttribute, riskfactors.First<RiskFactorInfo>() .TimeAttributes.First<TimeAttribute>()); expectedStartIndex = 3215; expectedEndIndex = 3236; expectedIndicator = Indicator.HTN_HighBloodPressure; expectedText = "BLOOD PRESSURE 148/76"; expectedSection = "Physical Exam"; Assert.AreEqual(expectedStartIndex, riskfactors.First<RiskFactorInfo>() .StartIndex); Assert.AreEqual(expectedEndIndex, riskfactors.First<RiskFactorInfo>().EndIndex); Assert.AreEqual(expectedIndicator, riskfactors.First<RiskFactorInfo>() .Indicator); Assert.AreEqual(expectedText, riskfactors.First<RiskFactorInfo>().Text); Assert.AreEqual(expectedSection, riskfactors.First<RiskFactorInfo>() .SectionHeading); Assert.AreEqual(expectedDCTCounts, riskfactors.Last<RiskFactorInfo>() .TimeAttributes.Count); Assert.AreEqual(expectedTimeAttribute, riskfactors.Last<RiskFactorInfo>() .TimeAttributes.First<TimeAttribute>()); expectedStartIndex = 3277; expectedEndIndex = 3285; expectedIndicator = Indicator.OBES_BMI; expectedText = "BMI 36.3"; expectedSection = "Physical Exam"; Assert.AreEqual(expectedStartIndex, riskfactors.Last<RiskFactorInfo>() .StartIndex); Assert.AreEqual(expectedEndIndex, riskfactors.Last<RiskFactorInfo>().EndIndex); Assert.AreEqual(expectedIndicator, riskfactors.Last<RiskFactorInfo>().Indicator); Assert.AreEqual(expectedText, riskfactors.Last<RiskFactorInfo>().Text); Assert.AreEqual(expectedSection, riskfactors.Last<RiskFactorInfo>() .SectionHeading); DateTime dct = SectionRecognizer.GetRecordDate(sr.Recognize(record), record);string expectedDCT = "2072/7/27"; Assert.AreEqual(expectedDCT, dct.ToShortDateString()); RiskFactorRecognizer ldlRecognizer = new HighLDLRecognizer(); recognizer.Add(ldlRecognizer); riskfactors = sectionStrategy.Assign(record, recognizer); expectedRiskFactorCounts = 3; Assert.AreEqual(expectedRiskFactorCounts, riskfactors.Count); expectedDCTCounts = 1; Assert.AreEqual(expectedDCTCounts, riskfactors.Last<RiskFactorInfo>() .TimeAttributes.Count); expectedTimeAttribute = TimeAttribute.DCT_BEFORE; Assert.AreEqual(expectedTimeAttribute, riskfactors.Last<RiskFactorInfo>() .TimeAttributes.First<TimeAttribute>()); expectedStartIndex = 4131; expectedEndIndex = 4161; expectedIndicator = Indicator.HLP_LDL; expectedText = "Cholesterol-LDL 12/16/2070 108"; expectedSection = "Health Maintenance"; Assert.AreEqual(expectedStartIndex, riskfactors.Last<RiskFactorInfo>() .StartIndex); Assert.AreEqual(expectedEndIndex, riskfactors.Last<RiskFactorInfo>().EndIndex); Assert.AreEqual(expectedIndicator, riskfactors.Last<RiskFactorInfo>().Indicator); Assert.AreEqual(expectedText, riskfactors.Last<RiskFactorInfo>().Text); Assert.AreEqual(expectedSection, riskfactors.Last<RiskFactorInfo>() .SectionHeading); recognizer.Add(new HighA1cRecognizer()); riskfactors = sectionStrategy.Assign(record, recognizer); expectedRiskFactorCounts = 4; Assert.AreEqual(expectedRiskFactorCounts, riskfactors.Count); expectedDCTCounts = 1; Assert.AreEqual(expectedDCTCounts, riskfactors.Last<RiskFactorInfo>() .TimeAttributes.Count); expectedTimeAttribute = TimeAttribute.DCT_BEFORE; Assert.AreEqual(expectedTimeAttribute, riskfactors.Last<RiskFactorInfo>() .TimeAttributes.First<TimeAttribute>()); expectedStartIndex = 4262; expectedEndIndex = 4283; expectedIndicator = Indicator.DM_A1C; expectedText = "HbA1c 12/16/2070 6.50"; expectedSection = "Health Maintenance"; Assert.AreEqual(expectedStartIndex, riskfactors.Last<RiskFactorInfo>() .StartIndex); Assert.AreEqual(expectedEndIndex, riskfactors.Last<RiskFactorInfo>().EndIndex); Assert.AreEqual(expectedIndicator, riskfactors.Last<RiskFactorInfo>().Indicator); Assert.AreEqual(expectedText, riskfactors.Last<RiskFactorInfo>().Text); Assert.AreEqual(expectedSection, riskfactors.Last<RiskFactorInfo>() .SectionHeading); record = I2b22014Utilities.GetRawText(@"C:\221-01.xml"); riskfactors = sectionStrategy.Assign(record, recognizer); expectedRiskFactorCounts = 1; Assert.AreEqual(expectedRiskFactorCounts, riskfactors.Count); expectedDCTCounts = 1; Assert.AreEqual(expectedDCTCounts, riskfactors.First<RiskFactorInfo>() .TimeAttributes.Count); expectedTimeAttribute = TimeAttribute.DCT_BEFORE; Assert.AreEqual(expectedTimeAttribute, riskfactors.First<RiskFactorInfo>() .TimeAttributes.First<TimeAttribute>()); expectedStartIndex = 5457; expectedEndIndex = 5483; expectedIndicator = Indicator.HLP_LDL; expectedText = "LDL (Ultra) 123"; expectedSection = "LABS:"; Assert.AreEqual(expectedStartIndex, riskfactors.Last<RiskFactorInfo>() .StartIndex); Assert.AreEqual(expectedEndIndex, riskfactors.Last<RiskFactorInfo>().EndIndex); Assert.AreEqual(expectedIndicator, riskfactors.Last<RiskFactorInfo>().Indicator); Assert.AreEqual(expectedText, riskfactors.Last<RiskFactorInfo>().Text); Assert.AreEqual(expectedSection, riskfactors.Last<RiskFactorInfo>() .SectionHeading);// Test remove recognizer.Remove(ldlRecognizer); riskfactors = sectionStrategy.Assign(record, recognizer); expectedRiskFactorCounts = 0; Assert.AreEqual(expectedRiskFactorCounts, riskfactors.Count); recognizer.Add(new HighGlucoseRecognizer()); riskfactors = sectionStrategy.Assign(record, recognizer); expectedRiskFactorCounts = 1; Assert.AreEqual(expectedRiskFactorCounts, riskfactors.Count); expectedDCTCounts = 1; Assert.AreEqual(expectedDCTCounts, riskfactors.First<RiskFactorInfo>() .TimeAttributes.Count); expectedTimeAttribute = TimeAttribute.DCT_BEFORE; Assert.AreEqual(expectedTimeAttribute, riskfactors.First<RiskFactorInfo>() .TimeAttributes.First<TimeAttribute>()); expectedStartIndex = 3062; expectedEndIndex = 3088; expectedIndicator = Indicator.DM_HighGlucose; expectedText = "Glucose 157"; expectedSection = "LABS:"; Assert.AreEqual(expectedStartIndex, riskfactors.First<RiskFactorInfo>() .StartIndex); Assert.AreEqual(expectedEndIndex, riskfactors.First<RiskFactorInfo>().EndIndex); Assert.AreEqual(expectedIndicator, riskfactors.First<RiskFactorInfo>() .Indicator); Assert.AreEqual(expectedText, riskfactors.First<RiskFactorInfo>().Text); Assert.AreEqual(expectedSection, riskfactors.First<RiskFactorInfo>() .SectionHeading); record = I2b22014Utilities.GetRawText(@"C:\243-01.xml"); recognizer.Add(new HighCholesterolRecognizer()); riskfactors = sectionStrategy.Assign(record, recognizer); expectedRiskFactorCounts = 1; Assert.AreEqual(expectedRiskFactorCounts, riskfactors.Count); expectedDCTCounts = 1; Assert.AreEqual(expectedDCTCounts, riskfactors.First<RiskFactorInfo>() .TimeAttributes.Count); expectedTimeAttribute = TimeAttribute.DCT_BEFORE; Assert.AreEqual(expectedTimeAttribute, riskfactors.First<RiskFactorInfo>() .TimeAttributes.First<TimeAttribute>()); expectedStartIndex = 1446; expectedEndIndex = 1454; expectedIndicator = Indicator.HLD_CHOL; expectedText = "been 263"; expectedSection = "PLAN:"; Assert.AreEqual(expectedStartIndex, riskfactors.Last<RiskFactorInfo>() .StartIndex); Assert.AreEqual(expectedEndIndex, riskfactors.Last<RiskFactorInfo>().EndIndex); Assert.AreEqual(expectedIndicator, riskfactors.Last<RiskFactorInfo>().Indicator); Assert.AreEqual(expectedText, riskfactors.Last<RiskFactorInfo>().Text); Assert.AreEqual(expectedSection, riskfactors.Last<RiskFactorInfo>() .SectionHeading); recognizer = new CompositeRiskFactorRecognizer(mp, sr); record = I2b22014Utilities.GetRawText(@"C:\220-01.xml"); recognizer.Add(CADEventRecognizer.GetInstance(@"C:\cad_event.txt", mp)); riskfactors = sectionStrategy.Assign(record, recognizer); expectedRiskFactorCounts = 2; Assert.AreEqual(expectedRiskFactorCounts, riskfactors.Count); expectedDCTCounts = 1; Assert.AreEqual(expectedDCTCounts, riskfactors.First<RiskFactorInfo>() .TimeAttributes.Count); expectedTimeAttribute = TimeAttribute.DCT_BEFORE; Assert.AreEqual(expectedTimeAttribute, riskfactors.First<RiskFactorInfo>() .TimeAttributes.First<TimeAttribute>()); expectedStartIndex = 1018; expectedEndIndex = 1023; expectedIndicator = Indicator.CAD_EVENT; expectedText = "stent"; expectedSection = "Problems"; Assert.AreEqual(expectedStartIndex, riskfactors.First<RiskFactorInfo>() .StartIndex); Assert.AreEqual(expectedEndIndex, riskfactors.First<RiskFactorInfo>().EndIndex); Assert.AreEqual(expectedIndicator, riskfactors.First<RiskFactorInfo>() .Indicator); Assert.AreEqual(expectedText, riskfactors.First<RiskFactorInfo>().Text); Assert.AreEqual(expectedSection, riskfactors.First<RiskFactorInfo>() .SectionHeading); expectedDCTCounts = 1; Assert.AreEqual(expectedDCTCounts, riskfactors.Last<RiskFactorInfo>() .TimeAttributes.Count); expectedTimeAttribute = TimeAttribute.DCT_BEFORE; Assert.AreEqual(expectedTimeAttribute, riskfactors.Last<RiskFactorInfo>() .TimeAttributes.First<TimeAttribute>()); expectedStartIndex = 1011; expectedEndIndex = 1015; expectedIndicator = Indicator.CAD_EVENT; expectedText = "SEMI"; expectedSection = "Problems"; Assert.AreEqual(expectedStartIndex, riskfactors.Last<RiskFactorInfo>() .StartIndex); Assert.AreEqual(expectedEndIndex, riskfactors.Last<RiskFactorInfo>().EndIndex); Assert.AreEqual(expectedIndicator, riskfactors.Last<RiskFactorInfo>().Indicator); Assert.AreEqual(expectedText, riskfactors.Last<RiskFactorInfo>().Text); Assert.AreEqual(expectedSection, riskfactors.Last<RiskFactorInfo>() .SectionHeading); MedPost mp = new MedPost(@"C:\MedPost"); SectionRecognizer sr = SectionRecognizer.GetInstance(@"C:\i2b22014_model", @"C:\bag_dist.txt", @"C:\SecTag_concepts.csv", mp);string record = I2b22014Utilities.GetRawText(@"C:\228-05.xml"); FormatDetector fd = new FormatDetector(sr); RecordFormat expectedFormat = RecordFormat.Email; Assert.AreEqual(expectedFormat, fd.Detect(record)); CompositeRiskFactorRecognizer recognizer = new CompositeRiskFactorRecognizer(mp, sr); Assert.IsEmpty(recognizer.Recognize(record)); TimeAttributeAssignmentParagraphStrategy paragraphStrategy = new TimeAttributeAssignmentParagraphStrategy(mp, sr); List<RiskFactorInfo> riskfactors = paragraphStrategy.Assign(record, recognizer); Assert.IsEmpty(riskfactors); recognizer.Add(new HighBloodPressureRecognizer()); riskfactors = paragraphStrategy.Assign(record, recognizer);int expectedRiskFactorCounts = 1; Assert.AreEqual(expectedRiskFactorCounts, riskfactors.Count);int expectedDCTCounts = 1; Assert.AreEqual(expectedDCTCounts, riskfactors.First<RiskFactorInfo>() .TimeAttributes.Count); TimeAttribute expectedTimeAttribute = TimeAttribute.DCT_DURING; Assert.AreEqual(expectedTimeAttribute, riskfactors.First<RiskFactorInfo>() .TimeAttributes.First<TimeAttribute>());string expectedTimeAttributeString = "during DCT"; Assert.AreEqual(expectedTimeAttributeString, StringEnum.GetStringValue(riskfactors.First<RiskFactorInfo>() .TimeAttributes.First<TimeAttribute>()));int expectedStartIndex = 1640;int expectedEndIndex = 1658; Indicator expectedIndicator = Indicator.HTN_HighBloodPressure;string expectedText = "pressure is 140/60";string expectedSection = SectionInfo.UNKNOWN; Assert.AreEqual(expectedStartIndex, riskfactors.First<RiskFactorInfo>().StartIndex); Assert.AreEqual(expectedEndIndex, riskfactors.First<RiskFactorInfo>().EndIndex); Assert.AreEqual(expectedIndicator, riskfactors.First<RiskFactorInfo>() .Indicator); Assert.AreEqual(expectedText, riskfactors.First<RiskFactorInfo>().Text); Assert.AreEqual(expectedSection, riskfactors.First<RiskFactorInfo>() .SectionHeading);

Unit Test Codes

A Nunit test project is provided for reference. The download link is here.