[Çözüldü] Python Google Traslate

Başlatan fghty, 24 Ekim 2012 - 15:25:09

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

fghty

import httplib, urllib, string
def translate(IN, OUT, text):
    text = urllib.quote(text)
    conn = httplib.HTTPConnection("translate.google.com")
    conn.request("GET", "/translate_a/t?client=t&text="+text+"&hl="+IN+"&tl="+OUT)
    res = conn.getresponse().read()
    res = res[4:string.find(res,",\"\",\"\"]]")]
    res = string.split(res, "],[")
    for i in range(len(res)):
        if i >= 1: res[i] = res[i][1:string.index(res[i], "\",\"")]
        else:      res[i] = res[i][:string.index(res[i], "\",\"")]
    text = "".join(res)
    return unicode(text,"ISO-8859-9")

print translate("en", "tr", "this really works!")


Bu kodda Türkçeden Koreye çeviri yaptığımda hata alıyorum.

print translate("tr", "ko", "deneme")

Şeklinde yaptığımda aşağıdaki gibi hata veriyor.

Traceback (most recent call last):
  File "C:\Users\AKDENİZ\Desktop\deneme.py", line 14, in <module>
    print translate("tr", "ko", "okul")
  File "C:\Users\AKDENİZ\Desktop\deneme.py", line 10, in translate
    if i >= 1: res[i] = res[i][1:string.index(res[i], "\",\"")]
  File "C:\Python27\lib\string.py", line 328, in index
    return s.index(*args)
ValueError: substring not found


Bu sorunu nasıl halledebilirim?

Ertroll

Emin değilim ama sorun karakter kodlaması ile alakalı olabilir mi? Yani fonksiyonun döndürdüğü değerin kodlaması: return unicode(text,"ISO-8859-9")

fghty

Sorun ondan kaynaklanmıyor gibi.

    return "".join(res)

Bu şekilde olsa da aynı hatayı veriyor. Anlamadığım İgilizce'den TÜrkçeye çeviri yaparken hata vermeyip Koreden Türkçeye çeviride hata veriyor olması.

cagriemer

Sunucunun tr-ko icin dondurdugu cevapla tr-en icin dondurdugu cevap farkli. Asagida gorebilirsiniz.

tr-ko

'[[["\xeb\x82\x98\xeb\x8a\x94 \xed\x95\xb4\xeb\xb3\xb4\xea\xb3\xa0 \xec\x9e\x88\xec\x96\xb4\xec\x9a\x94","test ediyorum","naneun haebogo iss-eoyo",""]],,"tr",,[["\xeb\x82\x98\xeb\x8a\x94",[4],1,0,1000,0,1,0],["\xed\x95\xb4\xeb\xb3\xb4\xea\xb3\xa0 \xec\x9e\x88\xec\x96\xb4\xec\x9a\x94",[5],1,0,548,1,3,0]],[["test",4,[["\xeb\x82\x98\xeb\x8a\x94",1000,1,0],["\xeb\x82\x9c",0,1,0],["\xeb\x82\xb4\xea\xb0\x80",0,1,0],["\xec\xa0\x84",0,1,0],["\xec\xa0\x9c\xea\xb0\x80",0,1,0]],[[0,4]],"test ediyorum"],["test ediyorum",5,[["\xed\x95\xb4\xeb\xb3\xb4\xea\xb3\xa0 \xec\x9e\x88\xec\x96\xb4\xec\x9a\x94",548,1,0],["\xec\x8b\x9c\xed\x97\x98\xed\x95\xb4\xeb\xb3\xb4\xea\xb3\xa0 \xec\x9e\x88\xec\xa7\x80",0,1,0],["\xec\x8b\x9c\xed\x97\x98\xed\x95\xb4",0,1,0],["\xec\x8b\x9c\xed\x97\x98\xed\x95\xb4\xeb\xb3\xb4\xea\xb3\xa0",0,1,0]],[[0,13]],""]],,,[["tr"]],3]'

tr-en

'[[["I\'m testing","test ediyorum","",""]],,"tr",,[["I\'m testing",[5],1,0,822,0,3,0]],[["test ediyorum",5,[["I\'m testing",822,1,0],["I am testing",131,1,0]],[[0,13]],"test ediyorum"]],,,[["tr"]],10]'

fghty

Hocam bu sorunu çözmek için ne yapmam gerekiyor? Bide hocam ilk listede "\xeb\x82\x98\xeb\x8a\x94 \xed\x95\xb4\xeb\xb3\xb4\xea\xb3\xa0 \xec\x9e\x88\xec\x96\xb4\xec\x9a\x94" şekilde olsa da göstermesi gerekmiyor mu?

cagriemer

Ben herhangi bir programlama dili bilmiyorum ama gozume carpan hatayi yazayim. Siz oradan bir seyler cikarabilirseniz ne mutlu yok olmazsa bilen bir arkadas elbet yardimci olur.

res = res[4:string.find(res,",\"\",\"\"]]")]

satirinda demissiniz ki res diye tanimladigim dizide 4.'den basla ,"",""]] kisimi nerede eslesiyorsa oraya kadar kes. Fakat tr-ko icin donen cevapta boyle bir eslesme yok.

res = res[4:string.find(res,",\"\"]]")]

olacak sekilde degistirirseniz o satiri ornegin sunu verir size.

'\xb3\xaa\xb4\xc2 \xc7\xd8\xba\xb8\xb0\xed \xc0\xd6\xbe\xee\xbf\xe4","test ediyorum","naneun haebogo iss-eoyo"'


Yani aradiginiz eslesme dizini donen cevap icerisinde bulunmuyor. Ya baska bir sekilde ustesinden geleceksiniz ya da Google Translate API kullanip size donen atiyorum JSON formatli bilgi icerisinden ilgili metini "parse" edeceksiniz.

fghty

#6
Bu defa çalıştı hocam. Ama mesela print translate("tr", "ko", "okul") yazdığımda doğru sonucu veriyor. print translate("tr", "ko", "ben") yazdığımda doğru sonucu vermiyor. Okulu düzgün çevirdiği halde "ben" i düzgün çevirmedi ve diğer kelimelerin bazılarında da bu sorun çıkıyor.

cagriemer

Size onerim python kabugunu kullanip hatanin neden kaynaklandigini bulmaniz.