public void HitungPembobotanKata()
        {
            List <Term> InvertedIndex = Lingkungan.LoadInvertedIndex();

            if (InvertedIndex == null)
            {
                InvertedIndex = new List <Term>();
            }
            if (db == null)
            {
                db = new dbDataContext();
            }
            List <tbDomain> Domain      = db.tbDomains.ToList(); // seluruh domain yang ada
            List <int>      DomainCount = new List <int>();      // Counter setiap domain

            for (int i = 0; i < Domain.Count; i++)               // inisialisasi counter domain
            {
                DomainCount.Add(0);
            }

            // Hitung jumlah kata dalam seluruh dokumen dan perdomain
            int TermCount = 0; //counter kata

            foreach (var item in InvertedIndex)
            {
                TermCount += item.Index.Count;
                for (int i = 0; i < Domain.Count; i++)
                {
                    DomainCount[i] += item.Index.Where(x => x.DomainID == Domain[i].Id).Count();
                }
            }

            for (int i = 1; i < DomainCount.Count; i++)
            {
                if (DomainCount[i] == 0)
                {
                    for (int j = 1; j < DomainCount.Count; j++)
                    {
                        DomainCount[i]++;
                    }
                    break;
                }
            }
            //pembobotan
            foreach (var item in InvertedIndex)
            {
                item.Bobot.Clear();
                for (int i = 0; i < Domain.Count; i++)
                {
                    int    count = item.Index.Where(x => x.DomainID == Domain[i].Id).Count();
                    double bobot = Math.Log10((Lingkungan.getLambda(0) * (count / TermCount)) +
                                              (Lingkungan.getLambda(1) * count / DomainCount[i]));
                    item.Bobot.Add(bobot);
                }
            }
            Lingkungan.SaveInvertedIndex(InvertedIndex);
        }
        public tbInfDetail[] PencarianInformasi(Dialogue inpt, int domain, List <Term> extra)
        {
            List <tbInfDetail> dataDomain = db.tbInfDetails.Where(x => x.tbInformasi.DomainID == domain).ToList();
            List <decimal>     bobot      = new List <decimal>();
            List <Term>        qry        = inpt.StringToTerm();

            if (extra != null)
            {
                foreach (var item in extra)
                {
                    if (qry.Where(x => x.Word == item.Word).FirstOrDefault() == null)
                    {
                        qry.Add(item);
                    }
                }
            }
            int TermCount = 0;

            foreach (var item in Lingkungan.LoadInvertedIndex())
            {
                TermCount += item.Index.Count;
            }
            decimal termC = (decimal)TermCount;

            decimal b;

            for (int i = 0; i < dataDomain.Count; i++)
            {
                string[] fragment = dataDomain[i].info.Split(' ').Where(x => string.IsNullOrWhiteSpace(x) == false).ToArray();
                b = 1;
                foreach (var item in qry)
                {
                    decimal FragmentTermcounter = Convert.ToDecimal(fragment.Where(x => x.ToLower().Contains(item.Word.ToLower())).Count());
                    decimal FragmentCounter     = Convert.ToDecimal(fragment.Count());
                    decimal itemCounter         = Convert.ToDecimal(item.Bobot.Count);
                    b = b * ((FragmentTermcounter / FragmentCounter) * Convert.ToDecimal(Lingkungan.getLambda(1)) +
                             (itemCounter / termC) * Convert.ToDecimal(Lingkungan.getLambda(0)));
                }
                bobot.Add(b);
            }

            List <tbInfDetail> top10 = new List <tbInfDetail>();

            while (dataDomain.Count > 0 && top10.Count < 10)
            {
                int idx = bobot.LastIndexOf(bobot.Max());
                top10.Add(dataDomain[idx]);
                bobot.RemoveAt(idx);
                dataDomain.RemoveAt(idx);
            }
            return(top10.ToArray());
        }