Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Alguma observação sobre Professor

Olá, bom dia Professor e parabéns pelo seu dia na data de ontem, com relação a essa estrutura eu fiz dessa maneira!

//package e imports ....

public class AnaliseDeSentimentos {

    public static void main(String[] args) {
        try {
            //prompt ...

            final var diretorioAvaliacoes = Path.of("src/main/resources/avaliacoes");
            final var arquivosDeAvaliacoes = Files.walk(diretorioAvaliacoes, 1)
                    .filter(Files::isRegularFile)
                    .map(Path::getFileName)
                    .map(Path::toString)
                    .map(nome -> nome.replace("avaliacoes-", "").replace(".txt", ""))
                    .toArray(String[]::new);

            for (String arquivo : arquivosDeAvaliacoes) {
                System.out.println("Analisando o arquivo: " + arquivo);
                var promptUsuario = carregarArquivo(arquivo);

                var request = ChatCompletionRequest
                        .builder()
                        .model("gpt-4-1106-preview")
                        .messages(Arrays.asList(
                                new ChatMessage(
                                        ChatMessageRole.SYSTEM.value(),
                                        promptSistema),
                                new ChatMessage(
                                        ChatMessageRole.USER.value(),
                                        promptUsuario)))
                        .build();

                var chave = System.getenv("token-api");
                var service = new OpenAiService(chave, Duration.ofSeconds(60));

                var resposta = service
                        .createChatCompletion(request)
                        .getChoices().get(0).getMessage().getContent();

                salvarAnalise(arquivo, resposta);
                System.out.println("Analise salva com sucesso!");
            }
        } catch (Exception e) {
            throw new RuntimeException("Erro ao analisar os sentimentos!", e);
        }
    }

    private static String carregarArquivo(final String arquivo) {
        try {
            var path = Path.of("src/main/resources/avaliacoes/avaliacoes-" +arquivo +".txt");
            return Files.readAllLines(path).toString();
        } catch (Exception e) {
            throw new RuntimeException("Erro ao carregar o arquivo!", e);
        }
    }

    private static void salvarAnalise(final String arquivo, final String analise) {
        try {
            var path = Path.of("src/main/resources/analises/analise-sentimentos-" +arquivo +".txt");
            Files.writeString(path, analise, StandardOpenOption.CREATE_NEW);
        } catch (Exception e) {
            throw new RuntimeException("Erro ao salvar o arquivo!", e);
        }
    }

}

Gostaria de ouvir do senhor se minha abordagem traz benefício ou se devo manter a estrutura direcionada pelo professor, e o que muda em minha abordagem com relação a do senhor.

1 resposta
solução!

Olá Leandro! Espero que você esteja bem.

Primeiramente, parabéns pela iniciativa de implementar sua própria solução para a análise de sentimentos. Sua abordagem parece estar bem alinhada com o objetivo de tornar o código dinâmico, permitindo a leitura de múltiplos arquivos de avaliações sem a necessidade de alterações manuais no código.

A principal diferença entre a sua implementação e a que foi sugerida no curso parece estar na forma como você está manipulando os arquivos e tratando as exceções. Vou destacar alguns pontos que podem ser relevantes:

  1. Leitura de Arquivos: Você está utilizando Files.walk() para percorrer os arquivos no diretório, o que é uma abordagem correta e eficiente para listar todos os arquivos de texto. No entanto, na versão sugerida na aula, há um foco em garantir que apenas arquivos .txt sejam processados, o que é feito com um filtro específico. Certifique-se de que seu filtro esteja funcionando corretamente para evitar processar arquivos indesejados.

  2. Tratamento de Exceções: Você optou por lançar uma RuntimeException em caso de erro, o que é uma prática comum, mas é importante garantir que as mensagens de erro sejam claras para facilitar a identificação de problemas. A abordagem da aula sugere o uso de System.out.println() para informar sobre erros, o que pode ser útil para depuração durante o desenvolvimento.

  3. Uso de Variáveis: A sua implementação parece estar correta ao utilizar variáveis para armazenar os caminhos dos arquivos e os dados necessários para a análise. Certifique-se de que está manipulando as variáveis de forma a evitar redundâncias e garantir a clareza do código.

  4. Execução em Lote: A lógica de execução em lote parece estar bem implementada, com um loop que processa cada arquivo individualmente. Isso é essencial para garantir que o código seja escalável e possa lidar com um grande número de arquivos.

  5. Mensagens de Log: Incluir mensagens de log, como você fez com System.out.println(), é uma excelente prática para acompanhar o progresso da execução e identificar possíveis pontos de falha.

Sua implementação parece estar no caminho certo, mas sempre é bom testar com diferentes cenários para garantir que o código se comporte como esperado em todas as situações.

Espero ter ajudado e bons estudos!