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