public Consulta(string texto_consulta, Dicionario dicionario) { this.dicionario = dicionario; calcula_pesos(texto_consulta, dicionario); }
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]; }