- Ali Engin Musaolu
- Sunday, February 3rd, 2008 at 12:52:29pm MST
- #!/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('(<center><table border=3 ><tr></tr><tr>)(.*)(</tr></table>)', 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 = ' </b> </td>' + kelime_listesi + '<td> <b> '
- kelime_listesi = re.sub('</tr><tr>','',kelime_listesi)
- kelime_listesi = re.split(' </b> </td><td> <b> ', 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ı.</font></p>")
- 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("(<P ALIGN=center>.*<STRONG> <FONT color=crimson><STRONG><FONT color=DarkBlue></FONT></STRONG>.*)<HR>.*<P align=center><STRONG><FONT color=Red>", 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('(?<=<FONT)\s*\n\s*',' ',veri)
- veri = re.split('\n', veri)
- for satir in veri:
- satir = re.sub('(?:<TR>)|(?:</TR>)|(?: )|(?:<P>)|(?:</P>)','',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>' + kelime + '</kelime>\n'
- veri = re.split('\n', veri)
- tag_grup = False
- tag_atasozu = False
- tag_birlesik = False
- sablon_grup_ID = re.compile('^<STRONG> <FONT color=crimson><STRONG><FONT color=DarkBlue></FONT></STRONG> (.*)$', re.IGNORECASE)
- sablon_grup_bilgi = re.compile('^<I><STRONG><FONT color=mediumblue><I>(.*)</I>', re.IGNORECASE)
- sablon_grup_anlam = re.compile('^<TD><B><FONT color=orangered>.*</FONT></B>(.*)</TD>', re.IGNORECASE)
- sablon_imla_eki = re.compile('<STRONG><FONT color=DarkBlue>(.*)</FONT></STRONG>', re.IGNORECASE)
- sablon_bilgi = re.compile('^<I>(.*)</I>', re.IGNORECASE)
- sablon_ornek = re.compile('^(.*):<BR>', re.IGNORECASE)
- sablon_ornek_metin = re.compile('<BR><I>"(.*?)"- </I>', re.IGNORECASE)
- sablon_ornek_kaynak = re.compile('<FONT COLOR=#3399ff SIZE=2>(.*?)</FONT>', re.IGNORECASE)
- sablon_atasozu = re.compile('^<STRONG><FONT color=Red.*Atasözü, deyim ve birleşik fiiller', re.IGNORECASE)
- sablon_birlesik = re.compile('^<P align=center><FONT color=Red.*Birleşik Sözler', re.IGNORECASE)
- sablon_soz_1 = re.compile('^<TD ><A HREF="sozbul\.ASP\?Kelime=(.*)(?: ><FONT)', re.IGNORECASE)
- sablon_soz_2 = re.compile('^(.*)&EskiSoz=', re.IGNORECASE)
- sablon_soz_3 = re.compile('sözünü bulmak istediyseniz üzerini tıklayınız.', re.IGNORECASE)
- sablon_soz_4 = re.compile('(.*)"$', re.IGNORECASE)
- for satir in veri:
- if sablon_grup_ID.search(satir):
- if tag_atasozu:
- tag_atasozu = False
- ham_metin += '\t\t\t</grup_atasozu_deyim_birlesikfiil>\n'
- if tag_birlesik:
- tag_birlesik = False
- ham_metin += '\t\t\t</grup_birlesiksoz>\n'
- if tag_grup:
- ham_metin += '\t\t</grup>\n'
- tag_grup = True
- ham_metin += '\t\t<grup>\n'
- if sablon_imla_eki.search(sablon_grup_ID.search(satir).group(1)):
- ham_metin += '\t\t\t<grup_ID>'
- ham_metin += re.search('(.*)<STRONG>', sablon_grup_ID.search(satir).group(1)).group(1).strip()
- ham_metin += '</grup_ID>\n'
- ham_metin += '\t\t\t<grup_imla>'
- ham_metin += sablon_imla_eki.search(sablon_grup_ID.search(satir).group(1)).group(1).strip()
- ham_metin += '</grup_imla>\n'
- else:
- ham_metin += '\t\t\t<grup_ID>'
- ham_metin += sablon_grup_ID.search(satir).group(1).strip()
- ham_metin += '</grup_ID>\n'
- elif sablon_grup_bilgi.search(satir):
- ham_metin += '\t\t\t<grup_bilgi>' + sablon_grup_bilgi.search(satir).group(1).strip() + '</grup_bilgi>\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<grup_anlam>\n'
- ham_metin += '\t\t\t\t<bilgi>'
- ham_metin += bilgi.strip()
- ham_metin += '</bilgi>\n'
- bilgi = re.sub('[\(\)]','.',bilgi)
- ham_metin += '\t\t\t\t<anlam>'
- ham_metin += bicimlendirme_karakter_donustur(re.search(bilgi + '</I>(.*)',anlam).group(1)).strip()
- ham_metin += '</anlam>\n'
- else:
- ham_metin += '\t\t\t<grup_anlam>\n'
- ham_metin += '\t\t\t\t<anlam>'
- ham_metin += bicimlendirme_karakter_donustur(anlam).strip()
- ham_metin += '</anlam>\n'
- if sablon_ornek_metin.search(satir):
- ham_metin += '\t\t\t\t<ornek>\n'
- ham_metin += '\t\t\t\t\t<ornek_metin>'
- ham_metin += sablon_ornek_metin.search(satir).group(1).strip()
- ham_metin += '</ornek_metin>\n'
- if sablon_ornek_kaynak.search(satir):
- ham_metin += '\t\t\t\t\t<ornek_kaynak>'
- ham_metin += sablon_ornek_kaynak.search(satir).group(1).strip()
- ham_metin += '</ornek_kaynak>\n'
- ham_metin += '\t\t\t\t</ornek>\n'
- ham_metin += '\t\t\t</grup_anlam>\n'
- elif sablon_atasozu.search(satir):
- tag_atasozu = True
- ham_metin += '\t\t\t<grup_atasozu_deyim_birlesikfiil>\n'
- elif sablon_birlesik.search(satir):
- if tag_atasozu:
- tag_atasozu = False
- ham_metin += '\t\t\t</grup_atasozu_deyim_birlesikfiil>\n'
- tag_birlesik = True
- ham_metin += '\t\t\t<grup_birlesiksoz>\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<soz>' + sablon_soz_2.search(soz).group(1).strip() + '</soz>\n'
- else:
- ham_metin += '\t\t\t\t<soz>' + soz.strip() + '</soz>\n'
- if tag_atasozu:
- ham_metin += '\t\t\t</grup_atasozu_deyim_birlesikfiil>\n'
- elif tag_birlesik:
- ham_metin += '\t\t\t</grup_birlesiksoz>\n'
- if tag_grup:
- ham_metin += '\t\t</grup>\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<kayit>\n'
- sozluk_kaydi += veri
- sozluk_kaydi += '\t</kayit>\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 = '<?xml version="1.0" encoding="windows-1254"?>\n'
- veri += '<sozluk>\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 = '</sozluk>'
- 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)
advertising
Update the Post
Either update this post and resubmit it with changes, or make a new post.
You may also comment on this post.
Please note that information posted here will expire by default in one month. If you do not want it to expire, please set the expiry time above. If it is set to expire, web search engines will not be allowed to index it prior to it expiring. Items that are not marked to expire will be indexable by search engines. Be careful with your passwords. All illegal activities will be reported and any information will be handed over to the authorities, so be good.