public static List <EQUESTION> GetETermsQuestions(IDictionary <string, Int32> ETerms) { List <EQUESTION> Questions = new List <EQUESTION>(); List <ETERM> Terms = new List <ETERM>(); foreach (string key in ETerms.Keys) { ETERM Term = Index.db.ETERMs.Where(T => T.VALUE == key).FirstOrDefault <ETERM>(); if (Term != null && (Questions.Count == 0)) { foreach (EQUESTIONTERM EQT in Term.EQUESTIONTERMs) { Questions.Add(EQT.EQUESTION); } } else if (Term != null && (Questions.Count > 0)) { List <EQUESTION> NewQuestions = new List <EQUESTION>(); foreach (EQUESTIONTERM EQT in Term.EQUESTIONTERMs) { NewQuestions.Add(EQT.EQUESTION); } Questions = (from NewQuestion in NewQuestions join OldQuestion in Questions on NewQuestion.ID equals OldQuestion.ID select NewQuestion).ToList(); } } return(Questions); }
public static void BuildEnglishIndex() { List <EQUESTION> Questions = db.EQUESTIONs.Where(Q => Q.Indexed == 0).ToList <EQUESTION>(); int NumberOfQuestions = db.EQUESTIONs.ToList().Count; foreach (EQUESTION Question in Questions) { var QuestionText = Question.VALUE + " " + Question.ANSWER; IDictionary <string, Int32> QeustionTerms = QuestionText.EnglishTokenize(); foreach (string key in QeustionTerms.Keys) { // TF : Term Frequency var Frequency = QeustionTerms[key]; ETERM Term = db.ETERMs.Where(T => T.VALUE == key).FirstOrDefault <ETERM>(); if (Term != null) { Term.IDF = (Convert.ToInt32(Term.IDF) + 1).ToString(); db.Entry(Term).State = EntityState.Modified; } else { Term = new ETERM(); Term.ID = Guid.NewGuid(); Term.VALUE = key; Term.IDF = Frequency.ToString(); db.ETERMs.Add(Term); } EQUESTIONTERM QuestionTerm = db.EQUESTIONTERMs.Where(QT => QT.TERMID == Term.ID && QT.QUESTIONID == Question.ID).FirstOrDefault <EQUESTIONTERM>(); if (QuestionTerm == null) { QuestionTerm = new EQUESTIONTERM(); QuestionTerm.ID = Guid.NewGuid(); QuestionTerm.QUESTIONID = Question.ID; QuestionTerm.TERMID = Term.ID; QuestionTerm.TF = Frequency.ToString(); db.EQUESTIONTERMs.Add(QuestionTerm); } } Question.Indexed = 1; db.Entry(Question).State = EntityState.Modified; db.SaveChanges(); List <EQUESTIONTERM> QuestionTerms = db.EQUESTIONTERMs.Where(QT => QT.QUESTIONID == Question.ID).ToList <EQUESTIONTERM>(); foreach (EQUESTIONTERM QuestionTerm in QuestionTerms) { QuestionTerm.WEIGHT = (Math.Round(Convert.ToDouble(QuestionTerm.TF) * Math.Log(NumberOfQuestions / Convert.ToDouble(QuestionTerm.ETERM.IDF)), 2)).ToString(); db.Entry(QuestionTerm).State = EntityState.Modified; } db.SaveChanges(); } }