GPT-4o İle Çeviri | C#

Merhaba GPT-4o modelini kullanarak çeviri yapabilir miyim diye biraz araştırdım.
Elimde Türkçe açıklamaları olan araç parça listesi vardı.
Bunu 5 farklı dile çevirmem gerekiyordu.
İlk etapta hesabıma 5 dolarlık bir yükleme yaptım ve çeviri yapmayı başardım.
Açıkçası çevirdi çevirmesine ama ben DeepL Çeviri‘yi daha başarılı buldum.

static async Task gptIleCevir()
{
    string apiKey = "aq-trye-jdueryassjdh7kasjoıqw0jljasd012nklsadkj89as";
    string apiUrl = "https://api.openai.com/v1/chat/completions";
    Console.WriteLine("Lütfen bir dosya yolu giriniz:");
    string dosyaYolu = Console.ReadLine();

    if (File.Exists(dosyaYolu))
    {
        Console.WriteLine("Dosya bulundu: " + dosyaYolu);
		// Dosyayi bir listeye atiyorum. Listede malzeme numarası ve Turkce aciklama var.
		// Ama Almanca, Fransizca, Hollandaca, Rusca ve Ingilizce eksik
        List<MalzemeAciklama> lstMalzeme = ExcelIslemleri.Excel2List(dosyaYolu);
        try
        {
            foreach (MalzemeAciklama objMalzemeAciklama in lstMalzeme.Where(objMalzemeAciklama => string.IsNullOrEmpty(objMalzemeAciklama.UzunAciklamaDE)))
            {
                string ifade = objMalzemeAciklama.UzunAciklamaTR.Trim(); 
				// Aciklama sadece rakamlardan olusan bir sekilde ise onu aynen yaziyorum, bos yere kontorumuzu yemesin.
                Regex harfKelimeRegex = new Regex(@"\b[^\W\d_]+\b", RegexOptions.IgnoreCase | RegexOptions.Multiline);

                // Harf Kelime Regex'in metinde en az bir kez geçip geçmediğini kontrol etme
                if (harfKelimeRegex.Matches(ifade).Count == 0)
                {
                    objMalzemeAciklama.UzunAciklamaDE = ifade;
                    objMalzemeAciklama.UzunAciklamaEN = ifade;
                    objMalzemeAciklama.UzunAciklamaFR = ifade;
                    objMalzemeAciklama.UzunAciklamaNL = ifade;
                    objMalzemeAciklama.UzunAciklamaRU = ifade;
                }
                else
                {
                    string text = "lütfen şu dolar işareti arasındaki, bir otomotiv yedek parçasına ait olan ifadeyi sırasıyla İngilizce, Fransızca, Almanca, Hollandaca ve Rusça'ya çevirir misin? : $" + ifade + "$";
                    using (var client = new HttpClient())
                    {
                        client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
                        var requestBody = new
                        {
                            model = "gpt-4o",
                            messages = new[]
                            {
                                new { role = "system", content = text }
                            }
                        };
                        var response = await client.PostAsJsonAsync(apiUrl, requestBody);
                        if (response.IsSuccessStatusCode)
                        {
                            var responseBody = await response.Content.ReadAsStringAsync();
                            ChatCompletionResponse jsonResponse = JsonSerializer.Deserialize<ChatCompletionResponse>(responseBody);
                            string aiResponse = jsonResponse.choices[0].message.content.Trim().Replace("\"", "");
							// Bana dondugu cevap belirli bir standartta oluyor. 
							// Ben de o dondugu cevabi parse eden bir REGEX yazarak her dili ayirdim.
                            UrunAciklama aciklama = dillereGoreAyir(aiResponse);
                            objMalzemeAciklama.UzunAciklamaDE = aciklama.Almanca;
                            objMalzemeAciklama.UzunAciklamaEN = aciklama.Ingilizce;
                            objMalzemeAciklama.UzunAciklamaFR = aciklama.Fransizca;
                            objMalzemeAciklama.UzunAciklamaNL = aciklama.Hollandaca;
                            objMalzemeAciklama.UzunAciklamaRU = aciklama.Rusca;
                        }
                        else
                        {
                            Console.WriteLine("An error occurred: " + response.ReasonPhrase);
                            var responseContent = await response.Content.ReadAsStringAsync();
                            Console.WriteLine(responseContent);
                        }
                    }
                }
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
        }
        finally
        {
            ExcelIslemleri.List2Excel(lstMalzeme, "MalzemeAciklama", dosyaYolu.Replace("-Ceviri.xlsx", "-Ceviri_Auto.xlsx"));
        }

    }
    else
    {
        Console.WriteLine("Dosya bulunamadı: " + dosyaYolu);
    }
}

static UrunAciklama dillereGoreAyir(string p)
{
    UrunAciklama sonuc = new UrunAciklama();
    string pattern = @"(?:İngilizce|Fransızca|Almanca|Hollandaca|Rusça):\s*([^\n]*)";
    Regex regex = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Multiline);

    MatchCollection matches1 = regex.Matches(p);
    int dilIndeks = 1;
    ///Console.WriteLine("Metin 1:");
    foreach (Match match in matches1)
    {
        switch (dilIndeks)
        {
            case 1:
                sonuc.Ingilizce = match.Groups[1].Value.Trim().Replace("$", "");
                break;
            case 2:
                sonuc.Fransizca = match.Groups[1].Value.Trim().Replace("$", "");
                break;
            case 3:
                sonuc.Almanca = match.Groups[1].Value.Trim().Replace("$", "");
                break;
            case 4:
                sonuc.Hollandaca = match.Groups[1].Value.Trim().Replace("$", "");
                break;
            case 5:
                sonuc.Rusca = match.Groups[1].Value.Trim().Replace("$", "");
                break;
            default:
                throw new ArgumentException("Ne isin var ulan burada senin?!");
        }
        dilIndeks++;
    }
    return sonuc;
}

Selamlar.

Leave a Reply

Your email address will not be published. Required fields are marked *