示例#1
0
 public Consulta(string texto_consulta, Dicionario dicionario)
 {
     this.dicionario = dicionario;
     calcula_pesos(texto_consulta, dicionario);
 }
示例#2
0
        public void calcula_pesos(string texto_consulta, Dicionario dicionario)
        {
            List <double> consulta_idf = new List <double>();
            List <double> consulta_tf  = new List <double>();

            texto_consulta.Replace(",", "").Replace("  ", " ").Replace("?", "").Replace("!", "");
            try
            {
                texto_separado.AddRange(texto_consulta.Split(' '));
                consulta.AddRange(texto_separado.Distinct().ToList());
            }
            catch
            {
                consulta.Add(texto_consulta);
                texto_separado.Add(texto_consulta);
            }
            foreach (string palavra in consulta)
            {
                bool termo_encontrado = false;
                foreach (Termo palavra_vocab in dicionario.Vocabulario)
                {
                    if (palavra.ToLower().CompareTo(palavra_vocab.palavra.ToLower()) == 0)
                    {
                        int total_docs        = palavra_vocab.frequenciaEmDoc.Count();
                        int total_incidencias = palavra_vocab.frequenciaEmDoc.Sum();
                        consulta_idf.Add(Math.Log(1 + (total_incidencias * 1.0 / total_docs), 2));

                        int incidencia_consulta = 0;

                        if (consulta.Count() > 1)
                        {
                            foreach (string termo_busca in texto_separado)
                            {
                                if (termo_busca.CompareTo(palavra) == 0)
                                {
                                    incidencia_consulta += 1;
                                }
                            }
                        }
                        else
                        {
                            incidencia_consulta = 1;
                        }

                        double frequencia = incidencia_consulta * 1.0 / texto_separado.Count();
                        consulta_tf.Add(frequencia * 1.0);
                        termo_encontrado = true;
                        break;
                    }
                }
                if (!termo_encontrado)
                {
                    consulta.Remove(palavra);
                }
            }
            //se pesquisa tiver mais de um termo

            if (consulta_tf.Count > 1)
            {
                for (int i = 0; i < consulta_tf.Count; i++)
                {
                    if (consulta_tf.Max() > 0)
                    {
                        consulta_tf[i] = consulta_tf[i] / consulta_tf.Max();
                    }
                    else
                    {
                        consulta_tf[i] = 0.0;
                    }
                }

                for (int indice = 0; indice < texto_separado.Count(); indice++)
                {
                    consulta_peso.Add(consulta_tf[indice] * consulta_idf[indice]);
                }
            }
            else
            {
                consulta_tf[0] = consulta_tf[0] / consulta_tf.Max();
                for (int indice = 0; indice < texto_separado.Count(); indice++)
                {
                    consulta_peso.Add(consulta_tf[indice] * consulta_idf[indice]);
                }
            }
            double a = consulta_peso[0];
        }