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);
        }