Beispiel #1
0
        /// <summary>
        /// Get list of dictionary records rated and ordered in dependence to this instance's criteria
        /// </summary>
        /// <returns>List of dictionary articles to show user</returns>
        public IEnumerable <ClassesRecord> GetDataset()
        {
            string ds = icd;

            if (!Diagnoses.Contains(icd))
            {
                ds = string.Empty;
            }

            var query =
                from ss in model.Stages.All
                join ts in model.Tumors.All on ss.Diagnosis equals ts.Diagnosis
                join ns in model.Nodules.All on ss.Diagnosis equals ns.Diagnosis
                join ms in model.Metastases.All on ss.Diagnosis equals ms.Diagnosis

                where ss.Diagnosis == ds
                select new ClassesRecord {
                ID          = 0,
                Diagnosis   = ts.Diagnosis,
                Stage       = ss.Code,
                StageArabic = ss.CodeArabic,
                Tumor       = ts.Code,
                Nodus       = ns.Code,
                Metastasis  = ms.Code,
                Code        = ClassesRecord.GetCode(ss.ID, ts.ID, ns.ID, ms.ID)
            };

            maxRating = 0;
            var result = query.ToList();

            result.ForEach(rec => rec.Rating = CountRating(rec));

            return(result.OrderByDescending(r => r.Rating).Take(50));
        }
Beispiel #2
0
        /// <summary>
        /// Correlation rating counter
        /// </summary>
        /// <param name="rec">Classification dictionary record to rate against this instance</param>
        /// <returns>Affinity rating: the bigger the rating, the more the record matches this instance's criteria</returns>
        int CountRating(ClassesRecord rec)
        {
            int result = 0;

            if (stageArabic == rec.StageArabic)
            {
                // Exact match criterium weighs more
                result += MINOR_MATCH_RATING;
            }
            else if (rec.StageArabic.StartsWith(stageArabic))
            {
                // Not precise match weighs less
                ++result;
            }

            if (tumor == rec.Tumor)
            {
                result += MATCH_RATING;
            }
            else if (rec.Tumor.StartsWith(tumor))
            {
                ++result;
            }

            // Noduli and metastases are more valuable than say stage
            if (nodus == rec.Nodus)
            {
                result += MATCH_RATING;
            }
            else if (rec.Nodus.StartsWith(nodus))
            {
                result += MINOR_MATCH_RATING;
            }

            if (mts == rec.Metastasis)
            {
                result += MATCH_RATING;
            }
            else if (rec.Metastasis.StartsWith(mts))
            {
                result += MATCH_RATING;
            }

            if (maxRating < result)
            {
                maxRating = result;
            }

            return(result);
        }