Beispiel #1
0
        public static List <int> RetornarCodigosPublicacoes(List <string> termos)
        {
            var        codigosPublicacoes = new List <int>();
            List <int> codigosTermos      = Termo.RetonarCodigos(termos);

            var comandoSQL = new StringBuilder();

            comandoSQL.Append("SELECT CodigoPublicacao FROM publicacoes_termos ");
            comandoSQL.AppendFormat("WHERE CodigoTermo IN ({0}) ", Util.ListaIntParaString(codigosTermos));
            comandoSQL.AppendFormat("GROUP BY CodigoPublicacao HAVING COUNT(CodigoTermo) > {0}", termos.Count);

            DataTable dtResultado = AcessoBanco.Instance.ExecuteReader(comandoSQL.ToString());

            foreach (DataRow dr in dtResultado.Rows)
            {
                codigosPublicacoes.Add(int.Parse(dr["CodigoPublicacao"].ToString()));
            }

            return(codigosPublicacoes);
        }
        private static void ExtrairTermos(List <Publicacao> publicacoes, List <string> stopWords)
        {
            var   termos = new List <Termo>();
            Termo termo;
            int   i = 1;

            Console.WriteLine($"[{DateTime.Now}] Extraindo termos - Publicação {i} de {publicacoes.Count}.");

            foreach (Publicacao pub in publicacoes)
            {
                if (i % 1000 == 0)
                {
                    Console.WriteLine($"[{DateTime.Now}] Extraindo termos - Publicação {i} de {publicacoes.Count}.");
                }

                var palavras    = new List <string>();
                int posTermo    = -1;
                int posPubTermo = -1;
                palavras.AddRange(PegarPalavras(TratarTexto(pub.Title)));
                palavras.AddRange(PegarPalavras(TratarTexto(pub.Abstract)));
                palavras.AddRange(PegarPalavras(TratarTexto(pub.AuthorKeywords)));

                palavras = TratarPalavras(palavras, stopWords);

                foreach (string p in palavras)
                {
                    posTermo = termos.FindIndex(t => t.Texto == p);

                    if (posTermo >= 0)
                    {
                        posPubTermo = termos[posTermo].PublicacoesTermos.FindIndex(pt => pt.CodigoPublicacao == pub.CodigoPublicacao);

                        if (posPubTermo >= 0)
                        {
                            termos[posTermo].PublicacoesTermos[posPubTermo].Ocorrencias++;
                        }
                        else
                        {
                            termos[posTermo].PublicacoesTermos.Add(new PublicacaoTermo {
                                CodigoPublicacao = pub.CodigoPublicacao, Ocorrencias = 1
                            });
                        }
                    }
                    else
                    {
                        termo = new Termo {
                            Texto = p, Valido = true
                        };
                        termo.PublicacoesTermos.Add(new PublicacaoTermo {
                            CodigoPublicacao = pub.CodigoPublicacao, Ocorrencias = 1
                        });

                        termos.Add(termo);
                    }
                }

                i++;
            }

            SalvarTermos(termos);
        }