#!/usr/bin/python # -*- coding: windows-1254; -*- import re import urllib import urllib2 import httplib # ALFABE listesini, size uygun olan sekilde degistiriniz. Asagida birkac ornek yer almaktadır. # Sadece 'j' ile başlayan kelimeleri içeren sozluk olusturmak icin # ilk deneme icin bunu kullanın cunku 'j' ile baslayan fazla kelime yok ve hemen sonucu gorebilirsiniz ALFABE = ['j'] # Bütün sozlugu olusturmak icin listeye butun harfleri ekleyin #ALFABE = ['a', 'b', 'c','ç','d','e','f','g','h','ı','i','j','k','l','m','n','o','ö','p','r','s','ş','t','u','ü','v','y','z'] # 'b', 'h' ve 'v' ile baslayan kelimelerden olusan bir sozluk olusturmak icin #ALFABE = ['b', 'h','v'] # Baslangicinda 'bilgi' ve 'bilim' gecen kelimelerden olusan bir sozluk olusturmak icin #ALFABE = ['bilgi', 'bilim'] DOSYA_KILAVUZ = 'tdk_imla_kilavuzu' DOSYA_SOZLUK = 'tdk_sozluk' SITE_KILAVUZ = 'http://tdk.org.tr/yazim/default.asp' SITE_SOZLUK = 'http://tdk.org.tr/tdksozluk/sozbul.asp' # --------------------------------------------------------------- # bu fonksiyon, mevcut bir kilavuz dosyasi varsa icerigini bosaltir def kilavuz_dosyasini_hazirla(dosya_adi): dosya = open(dosya_adi, 'w') dosya.write('') dosya.close() # --------------------------------------------------------------- # kelime listesini alan fonksiyon def kelime_listesini_al(site, harf): AZAMI_HATA_SINIRI = 5 sayac_sayfa = 0 sayac_hata = 0 sablon_kelimeler = re.compile('(
)(.*)(
)', re.IGNORECASE) sablon_sonraki = re.compile('Sonraki 48 söz >>') devami_var = True ham_liste = "" print '\n### ', harf, ' ### \n' while devami_var: parametre = urllib.urlencode({'B1': 'Sonraki 48 söz >>', 'soz': harf, 'page': sayac_sayfa}) istek = urllib2.Request(site, parametre) try: bag = urllib2.urlopen(istek) except IOError: sayac_hata += 1 else: ham_metin = bag.read() bag.close gruplar = sablon_kelimeler.search(ham_metin) if gruplar: print harf, ' ', sayac_sayfa + 1 ham_liste = ham_liste + gruplar.group(2) if sablon_sonraki.search(ham_metin): sayac_sayfa += 1 else: devami_var = False else: sayac_hata += 1 if sayac_hata == AZAMI_HATA_SINIRI: devami_var = False print '>>>>> hata (veriye erişilemiyor) : ', harf, sayac_sayfa return ham_liste # --------------------------------------------------------------- # kelime katarini, listeye ceviren fonksiyon def kelime_listesini_duzenle(kelime_listesi): kelime_listesi = ' ' + kelime_listesi + ' ' kelime_listesi = re.sub('','',kelime_listesi) kelime_listesi = re.split(' ', kelime_listesi) return kelime_listesi # --------------------------------------------------------------- # kelime listesini, bir dosyaya kaydeden fonksiyon def kelime_listesini_kaydet(dosya_adi, kelime_listesi): dosya = open(dosya_adi, 'a') for kelime in kelime_listesi: dosya.write(kelime.strip() + '\n') dosya.close() # --------------------------------------------------------------- # sozluk verisini siteden alan fonksiyon def sozluk_verisini_siteden_al(site, kelime): AZAMI_HATA_SINIRI = 5 sayac_hata = 0 devam_mi = True ham_metin = "" sablon_veri_kontrol_1 = re.compile("Microsoft Visual Studio 6.0") sablon_veri_kontrol_2 = re.compile("sözü bulunamadı.

") parametre = '?kelime=' + urllib.quote(kelime) istek = urllib2.Request(site + parametre) while devam_mi: try: bag = urllib2.urlopen(istek) except IOError: sayac_hata += 1 else: ham_metin = bag.read() bag.close if sablon_veri_kontrol_1.search(ham_metin): devam_mi = False if sablon_veri_kontrol_2.search(ham_metin): ham_metin = "" else: ham_metin = "" sayac_hata += 1 if sayac_hata == AZAMI_HATA_SINIRI: devam_mi = False print '>>>>> hata (kelime verisine erişilemiyor) : ', kelime return ham_metin # -------------------------------------------------------------- # kaydedilecek veri icindeki bazi karakterleri degistirir def bicimlendirme_karakter_donustur(veri): veri = re.sub('>','>',veri) veri = re.sub('<','<',veri) return veri # --------------------------------------------------------------- # html sayfadan ilgili kismi koparir def bicimlendirme_001(veri, kelime): sablon = re.compile("(

.* .*)


.*

", re.DOTALL | re.IGNORECASE) gruplar = sablon.search(veri) if gruplar: return gruplar.group(1) else: return "" # --------------------------------------------------------------- # ilgili kisimdan, gereksiz bosluklari atar def bicimlendirme_002(veri, kelime): ham_metin = "" veri = re.sub('(?<=)|(?:)|(?: )|(?:

)|(?:

)','',satir) satir = re.sub('(?:\s*$)|(?:^\s*)','',satir) if len(satir): ham_metin += satir + '\n' return ham_metin # --------------------------------------------------------------- # ilgili kismi, bolumlere ayirir def bicimlendirme_003(veri, kelime, imla_eki): ham_metin = '\t\t' + kelime + '\n' veri = re.split('\n', veri) tag_grup = False tag_atasozu = False tag_birlesik = False sablon_grup_ID = re.compile('^ (.*)$', re.IGNORECASE) sablon_grup_bilgi = re.compile('^(.*)', re.IGNORECASE) sablon_grup_anlam = re.compile('^.*(.*)', re.IGNORECASE) sablon_imla_eki = re.compile('(.*)', re.IGNORECASE) sablon_bilgi = re.compile('^(.*)', re.IGNORECASE) sablon_ornek = re.compile('^(.*):
', re.IGNORECASE) sablon_ornek_metin = re.compile('
"(.*?)"- ', re.IGNORECASE) sablon_ornek_kaynak = re.compile('(.*?)', re.IGNORECASE) sablon_atasozu = re.compile('^', sablon_grup_ID.search(satir).group(1)).group(1).strip() ham_metin += '\n' ham_metin += '\t\t\t' ham_metin += sablon_imla_eki.search(sablon_grup_ID.search(satir).group(1)).group(1).strip() ham_metin += '\n' else: ham_metin += '\t\t\t' ham_metin += sablon_grup_ID.search(satir).group(1).strip() ham_metin += '\n' elif sablon_grup_bilgi.search(satir): ham_metin += '\t\t\t' + sablon_grup_bilgi.search(satir).group(1).strip() + '\n' elif sablon_grup_anlam.search(satir): if sablon_ornek.search(sablon_grup_anlam.search(satir).group(1)): anlam = sablon_ornek.search(sablon_grup_anlam.search(satir).group(1)).group(1) else: anlam = sablon_grup_anlam.search(satir).group(1) if sablon_bilgi.search(anlam): bilgi = sablon_bilgi.search(anlam).group(1) ham_metin += '\t\t\t\n' ham_metin += '\t\t\t\t' ham_metin += bilgi.strip() ham_metin += '\n' bilgi = re.sub('[\(\)]','.',bilgi) ham_metin += '\t\t\t\t' ham_metin += bicimlendirme_karakter_donustur(re.search(bilgi + '
(.*)',anlam).group(1)).strip() ham_metin += '\n' else: ham_metin += '\t\t\t\n' ham_metin += '\t\t\t\t' ham_metin += bicimlendirme_karakter_donustur(anlam).strip() ham_metin += '\n' if sablon_ornek_metin.search(satir): ham_metin += '\t\t\t\t\n' ham_metin += '\t\t\t\t\t' ham_metin += sablon_ornek_metin.search(satir).group(1).strip() ham_metin += '\n' if sablon_ornek_kaynak.search(satir): ham_metin += '\t\t\t\t\t' ham_metin += sablon_ornek_kaynak.search(satir).group(1).strip() ham_metin += '\n' ham_metin += '\t\t\t\t\n' ham_metin += '\t\t\t\n' elif sablon_atasozu.search(satir): tag_atasozu = True ham_metin += '\t\t\t\n' elif sablon_birlesik.search(satir): if tag_atasozu: tag_atasozu = False ham_metin += '\t\t\t\n' tag_birlesik = True ham_metin += '\t\t\t\n' elif sablon_soz_1.search(satir) and not sablon_soz_3.search(satir): soz = sablon_soz_1.search(satir).group(1) if sablon_soz_4.search(soz): soz = sablon_soz_4.search(soz).group(1) if sablon_soz_2.search(soz): ham_metin += '\t\t\t\t' + sablon_soz_2.search(soz).group(1).strip() + '\n' else: ham_metin += '\t\t\t\t' + soz.strip() + '\n' if tag_atasozu: ham_metin += '\t\t\t\n' elif tag_birlesik: ham_metin += '\t\t\t\n' if tag_grup: ham_metin += '\t\t\n' return ham_metin # --------------------------------------------------------------- # sozluk verisini, uygun bicime cevirir def sozluk_verisini_duzenle(veri, kelime, imla_eki): sozluk_kaydi = "" if len(veri): veri = bicimlendirme_001(veri, kelime) veri = bicimlendirme_002(veri, kelime) veri = bicimlendirme_003(veri, kelime, imla_eki) sozluk_kaydi += '\t\n' sozluk_kaydi += veri sozluk_kaydi += '\t\n' return sozluk_kaydi # --------------------------------------------------------------- # verilen kelime icin sozluge kaydedilecek veriyi hazirlar def sozluk_kaydini_hazirla(site, kelime, imla_eki): sozluk_kaydi = sozluk_verisini_siteden_al(site, kelime) sozluk_kaydi = sozluk_verisini_duzenle(sozluk_kaydi, kelime, imla_eki) return sozluk_kaydi # --------------------------------------------------------------- # hazirlanan sozluk kaydini dosyaya kaydeder def sozluk_kaydini_dosyaya_kaydet(dosya_adi, kayit): if len(kayit): dosya = open(dosya_adi, 'a') dosya.write(kayit) dosya.close() # --------------------------------------------------------------- # sozluk dosyasinin baslangic bolumunu olusturan fonksiyon def sozluk_baslangic_kaydini_olustur(dosya_adi): veri = '\n' veri += '\n' dosya = open(dosya_adi, 'w') dosya.write(veri) dosya.close() # --------------------------------------------------------------- # sozluk dosyasinin bitis bolumunu olusturan fonksiyon def sozluk_bitis_kaydini_olustur(dosya_adi): veri = '' dosya = open(dosya_adi, 'a') dosya.write(veri) dosya.close() # --------------------------------------------------------------- # sozlugu olusturan fonksiyon def sozlugu_olustur(site, dosya_sozluk, dosya_kilavuz): sablon_kelime = re.compile("([^,(\n]*)(.*)") bir_onceki_kelime = "" dosya = open(dosya_kilavuz, 'r') sozluk_baslangic_kaydini_olustur(dosya_sozluk) for satir in dosya: if len(satir) > 1: gruplar = sablon_kelime.search(satir) if gruplar: if bir_onceki_kelime.lower() != gruplar.group(1).strip().lower(): bir_onceki_kelime = gruplar.group(1).strip() sozluk_kaydi = sozluk_kaydini_hazirla(site, gruplar.group(1).strip(), gruplar.group(2).strip()) sozluk_kaydini_dosyaya_kaydet(dosya_sozluk, sozluk_kaydi) print bir_onceki_kelime else: print '>>>>> bilgi (kelime tekrarı) : ', satir.strip() else: print '>>>>> hata (kelime tesbit edilemedi) : ', satir.strip() sozluk_bitis_kaydini_olustur(dosya_sozluk) dosya.close() # --------------------------------------------------------------- # ana bolum for harf in ALFABE: #dosya isimleri dosya_kilavuz = DOSYA_KILAVUZ + '_' + harf + '.txt' dosya_sozluk = DOSYA_SOZLUK + '_' + harf + '.xml' # imla kilavuzu bolumu kilavuz_dosyasini_hazirla(dosya_kilavuz) kelime_listesi = kelime_listesini_al(SITE_KILAVUZ, harf) kelime_listesi = kelime_listesini_duzenle(kelime_listesi) kelime_listesini_kaydet(dosya_kilavuz, kelime_listesi) # sozluk bolumu sozlugu_olustur(SITE_SOZLUK, dosya_sozluk, dosya_kilavuz)