public double DistanciaAte(BagOfWords bag) { var palavras = Palavras.Concat(bag.Palavras).Distinct(); double soma = 0; foreach (var palavra in palavras) { int numOcorrencias1 = 0, numOcorrencias2 = 0; TentaObterOcorrencias(palavra, out numOcorrencias1); bag.TentaObterOcorrencias(palavra, out numOcorrencias2); soma += Math.Pow(numOcorrencias1 - numOcorrencias2, 2); } return(Math.Sqrt(soma)); }
public static BagOfWords Media(IEnumerable <BagOfWords> bags, string nome = null) { var palavras = bags.SelectMany(bag => bag.Palavras).Distinct(); var somaDasBags = new BagOfWords { Nome = nome }; var numeroBags = bags.Count(); foreach (var palavra in palavras) { int somaOcorrencias = 0; foreach (var bag in bags) { int numOcorrencias = 0; bag.TentaObterOcorrencias(palavra, out numOcorrencias); somaOcorrencias += numOcorrencias; } somaDasBags.Associa(palavra, somaOcorrencias / numeroBags); } return(somaDasBags); }