Part of Slepp's ProjectsPastebinTURLImagebinFilebin
Feedback -- English French German Japanese
Create Upload Newest Tools Donate

Advertising

Ali Engin Musaolu
2008年 2月 3日 日曜日 19:52:29 MDT 

  1. #!/usr/bin/python
  2. # -*- coding: windows-1254; -*-
  3.  
  4. import re
  5. import urllib
  6. import urllib2
  7. import httplib
  8.  
  9. # ALFABE listesini, size uygun olan sekilde degistiriniz. Asagida birkac ornek yer almaktadır.
  10. # Sadece 'j' ile başlayan kelimeleri içeren sozluk olusturmak icin
  11. # ilk deneme icin bunu kullanın cunku 'j' ile baslayan fazla kelime yok ve hemen sonucu gorebilirsiniz
  12. ALFABE    = ['j']
  13.  
  14. # Bütün sozlugu olusturmak icin listeye butun harfleri ekleyin
  15. #ALFABE  = ['a', 'b', 'c','ç','d','e','f','g','h','ı','i','j','k','l','m','n','o','ö','p','r','s','ş','t','u','ü','v','y','z']
  16. # 'b', 'h' ve 'v' ile baslayan kelimelerden olusan bir sozluk olusturmak icin
  17. #ALFABE  = ['b', 'h','v']
  18. # Baslangicinda 'bilgi' ve 'bilim' gecen kelimelerden olusan bir sozluk olusturmak icin
  19. #ALFABE  = ['bilgi', 'bilim']
  20.  
  21.  
  22. DOSYA_KILAVUZ   = 'tdk_imla_kilavuzu'
  23. DOSYA_SOZLUK    = 'tdk_sozluk'
  24. SITE_KILAVUZ    = 'http://tdk.org.tr/yazim/default.asp'
  25. SITE_SOZLUK     = 'http://tdk.org.tr/tdksozluk/sozbul.asp'
  26.  
  27.  
  28.  
  29. # ---------------------------------------------------------------
  30. # bu fonksiyon, mevcut bir kilavuz dosyasi varsa icerigini bosaltir
  31. def kilavuz_dosyasini_hazirla(dosya_adi):
  32.         dosya = open(dosya_adi, 'w')
  33.         dosya.write('')
  34.         dosya.close()
  35.  
  36.  
  37.  
  38. # ---------------------------------------------------------------
  39. # kelime listesini alan fonksiyon
  40. def kelime_listesini_al(site, harf):
  41.         AZAMI_HATA_SINIRI       = 5
  42.         sayac_sayfa          = 0
  43.         sayac_hata            = 0
  44.         sablon_kelimeler        = re.compile('(<center><table border=3 ><tr></tr><tr>)(.*)(</tr></table>)', re.IGNORECASE)
  45.         sablon_sonraki    = re.compile('Sonraki 48 söz >>')
  46.         devami_var            = True
  47.         ham_liste              = ""
  48.  
  49.         print  '\n### ', harf, ' ### \n'
  50.         while devami_var:
  51.                 parametre       = urllib.urlencode({'B1': 'Sonraki 48 söz >>', 'soz': harf, 'page': sayac_sayfa})
  52.                 istek      = urllib2.Request(site, parametre)
  53.  
  54.                 try:
  55.                         bag     = urllib2.urlopen(istek)
  56.                 except IOError:
  57.                         sayac_hata += 1
  58.                 else:
  59.                         ham_metin = bag.read()
  60.                         bag.close
  61.  
  62.                         gruplar = sablon_kelimeler.search(ham_metin)
  63.                         if gruplar:
  64.                                 print harf, ' ', sayac_sayfa + 1
  65.                                 ham_liste = ham_liste + gruplar.group(2)
  66.                                
  67.                                 if sablon_sonraki.search(ham_metin):
  68.                                         sayac_sayfa +=  1
  69.                                 else:
  70.                                         devami_var = False
  71.                         else:
  72.                                 sayac_hata +=  1
  73.  
  74.                 if sayac_hata == AZAMI_HATA_SINIRI:
  75.                         devami_var = False
  76.                         print '>>>>> hata (veriye erişilemiyor) : ', harf, sayac_sayfa
  77.  
  78.         return ham_liste
  79.  
  80.  
  81.  
  82. # ---------------------------------------------------------------
  83. # kelime katarini, listeye ceviren fonksiyon
  84. def kelime_listesini_duzenle(kelime_listesi):
  85.         kelime_listesi = ' </b>  </td>' + kelime_listesi + '<td>  <b> '
  86.         kelime_listesi = re.sub('</tr><tr>','',kelime_listesi)
  87.         kelime_listesi = re.split(' </b>  </td><td>  <b> ', kelime_listesi)
  88.  
  89.         return kelime_listesi
  90.  
  91.  
  92.  
  93. # ---------------------------------------------------------------
  94. # kelime listesini, bir dosyaya kaydeden fonksiyon
  95. def kelime_listesini_kaydet(dosya_adi, kelime_listesi):
  96.         dosya = open(dosya_adi, 'a')
  97.  
  98.         for kelime in kelime_listesi:
  99.                 dosya.write(kelime.strip() + '\n')
  100.        
  101.         dosya.close()
  102.  
  103.  
  104.  
  105. # ---------------------------------------------------------------
  106. # sozluk verisini siteden alan fonksiyon
  107. def sozluk_verisini_siteden_al(site, kelime):
  108.         AZAMI_HATA_SINIRI       = 5
  109.         sayac_hata            = 0
  110.         devam_mi                = True
  111.         ham_metin              = ""
  112.         sablon_veri_kontrol_1   = re.compile("Microsoft Visual Studio 6.0")
  113.         sablon_veri_kontrol_2   = re.compile("sözü bulunamadı.</font></p>")
  114.  
  115.         parametre       = '?kelime=' + urllib.quote(kelime)
  116.         istek      = urllib2.Request(site + parametre)
  117.        
  118.         while devam_mi:
  119.                 try:
  120.                         bag     = urllib2.urlopen(istek)
  121.                 except IOError:
  122.                         sayac_hata += 1
  123.                 else:
  124.                         ham_metin = bag.read()
  125.                         bag.close
  126.  
  127.                         if sablon_veri_kontrol_1.search(ham_metin):
  128.                                 devam_mi = False
  129.                                
  130.                                 if sablon_veri_kontrol_2.search(ham_metin):
  131.                                         ham_metin = ""
  132.                         else:
  133.                                 ham_metin = ""
  134.                                 sayac_hata += 1
  135.  
  136.                 if sayac_hata == AZAMI_HATA_SINIRI:
  137.                         devam_mi = False
  138.                         print '>>>>> hata (kelime verisine erişilemiyor) : ', kelime
  139.  
  140.         return ham_metin
  141.  
  142.  
  143.  
  144.  
  145. # --------------------------------------------------------------
  146. # kaydedilecek veri icindeki bazi karakterleri degistirir
  147. def bicimlendirme_karakter_donustur(veri):
  148.         veri = re.sub('>','&gt;',veri)
  149.         veri = re.sub('<','&lt;',veri)
  150.  
  151.         return veri
  152.  
  153.  
  154.  
  155. # ---------------------------------------------------------------
  156. # html sayfadan ilgili kismi koparir
  157. def bicimlendirme_001(veri, kelime):
  158.         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)
  159.  
  160.         gruplar = sablon.search(veri)
  161.         if gruplar:
  162.                 return gruplar.group(1)
  163.         else:
  164.                 return ""
  165.  
  166.  
  167.  
  168. # ---------------------------------------------------------------
  169. # ilgili kisimdan, gereksiz bosluklari atar
  170. def bicimlendirme_002(veri, kelime):
  171.         ham_metin       = ""
  172.  
  173.         veri        = re.sub('(?<=<FONT)\s*\n\s*',' ',veri)
  174.         veri        = re.split('\n', veri)
  175.        
  176.         for satir in veri:
  177.                 satir = re.sub('(?:<TR>)|(?:</TR>)|(?:&nbsp;)|(?:<P>)|(?:</P>)','',satir)
  178.                 satir = re.sub('(?:\s*$)|(?:^\s*)','',satir)
  179.  
  180.                 if len(satir):
  181.                         ham_metin += satir + '\n'
  182.                
  183.         return ham_metin
  184.  
  185.  
  186.  
  187. # ---------------------------------------------------------------
  188. # ilgili kismi, bolumlere ayirir
  189. def bicimlendirme_003(veri, kelime, imla_eki):
  190.         ham_metin              = '\t\t<kelime>' + kelime + '</kelime>\n'
  191.         veri            = re.split('\n', veri)
  192.         tag_grup                = False
  193.         tag_atasozu          = False
  194.         tag_birlesik        = False
  195.         sablon_grup_ID    = re.compile('^<STRONG> <FONT color=crimson><STRONG><FONT color=DarkBlue></FONT></STRONG> (.*)$', re.IGNORECASE)
  196.         sablon_grup_bilgi       = re.compile('^<I><STRONG><FONT color=mediumblue><I>(.*)</I>', re.IGNORECASE)
  197.         sablon_grup_anlam       = re.compile('^<TD><B><FONT color=orangered>.*</FONT></B>(.*)</TD>', re.IGNORECASE)
  198.         sablon_imla_eki  = re.compile('<STRONG><FONT color=DarkBlue>(.*)</FONT></STRONG>', re.IGNORECASE)
  199.         sablon_bilgi        = re.compile('^<I>(.*)</I>', re.IGNORECASE)
  200.         sablon_ornek        = re.compile('^(.*):<BR>', re.IGNORECASE)
  201.         sablon_ornek_metin      = re.compile('<BR><I>"(.*?)"- </I>', re.IGNORECASE)
  202.         sablon_ornek_kaynak     = re.compile('<FONT COLOR=#3399ff SIZE=2>(.*?)</FONT>', re.IGNORECASE)
  203.         sablon_atasozu    = re.compile('^<STRONG><FONT color=Red.*Atasözü, deyim ve birleşik fiiller', re.IGNORECASE)
  204.         sablon_birlesik  = re.compile('^<P align=center><FONT color=Red.*Birleşik Sözler', re.IGNORECASE)
  205.         sablon_soz_1        = re.compile('^<TD ><A HREF="sozbul\.ASP\?Kelime=(.*)(?: ><FONT)', re.IGNORECASE)
  206.         sablon_soz_2        = re.compile('^(.*)&EskiSoz=', re.IGNORECASE)
  207.         sablon_soz_3        = re.compile('sözünü bulmak istediyseniz üzerini tıklayınız.', re.IGNORECASE)
  208.         sablon_soz_4        = re.compile('(.*)"$', re.IGNORECASE)
  209.        
  210.         for satir in veri:
  211.                 if sablon_grup_ID.search(satir):
  212.                         if tag_atasozu:
  213.                                 tag_atasozu = False
  214.                                 ham_metin += '\t\t\t</grup_atasozu_deyim_birlesikfiil>\n'
  215.                                
  216.                         if tag_birlesik:
  217.                                 tag_birlesik = False
  218.                                 ham_metin += '\t\t\t</grup_birlesiksoz>\n'
  219.                                
  220.                         if tag_grup:
  221.                                 ham_metin += '\t\t</grup>\n'
  222.                         tag_grup = True
  223.                         ham_metin += '\t\t<grup>\n'
  224.                         if sablon_imla_eki.search(sablon_grup_ID.search(satir).group(1)):
  225.                                 ham_metin += '\t\t\t<grup_ID>'
  226.                                 ham_metin += re.search('(.*)<STRONG>', sablon_grup_ID.search(satir).group(1)).group(1).strip()
  227.                                 ham_metin += '</grup_ID>\n'
  228.                                 ham_metin += '\t\t\t<grup_imla>'
  229.                                 ham_metin += sablon_imla_eki.search(sablon_grup_ID.search(satir).group(1)).group(1).strip()
  230.                                 ham_metin += '</grup_imla>\n'
  231.                         else:
  232.                                 ham_metin += '\t\t\t<grup_ID>'
  233.                                 ham_metin += sablon_grup_ID.search(satir).group(1).strip()
  234.                                 ham_metin += '</grup_ID>\n'
  235.                 elif sablon_grup_bilgi.search(satir):
  236.                         ham_metin += '\t\t\t<grup_bilgi>' + sablon_grup_bilgi.search(satir).group(1).strip() + '</grup_bilgi>\n'
  237.                 elif sablon_grup_anlam.search(satir):
  238.                         if sablon_ornek.search(sablon_grup_anlam.search(satir).group(1)):
  239.                                 anlam = sablon_ornek.search(sablon_grup_anlam.search(satir).group(1)).group(1)
  240.                         else:
  241.                                 anlam = sablon_grup_anlam.search(satir).group(1)
  242.                        
  243.                         if sablon_bilgi.search(anlam):
  244.                                 bilgi = sablon_bilgi.search(anlam).group(1)
  245.                                 ham_metin += '\t\t\t<grup_anlam>\n'
  246.                                 ham_metin += '\t\t\t\t<bilgi>'
  247.                                 ham_metin += bilgi.strip()
  248.                                 ham_metin += '</bilgi>\n'
  249.                                 bilgi = re.sub('[\(\)]','.',bilgi)
  250.                                 ham_metin += '\t\t\t\t<anlam>'
  251.                                 ham_metin += bicimlendirme_karakter_donustur(re.search(bilgi + '</I>(.*)',anlam).group(1)).strip()
  252.                                 ham_metin += '</anlam>\n'
  253.                         else:
  254.                                 ham_metin += '\t\t\t<grup_anlam>\n'
  255.                                 ham_metin += '\t\t\t\t<anlam>'
  256.                                 ham_metin += bicimlendirme_karakter_donustur(anlam).strip()
  257.                                 ham_metin += '</anlam>\n'
  258.                                
  259.                         if sablon_ornek_metin.search(satir):
  260.                                 ham_metin += '\t\t\t\t<ornek>\n'
  261.                                 ham_metin += '\t\t\t\t\t<ornek_metin>'
  262.                                 ham_metin += sablon_ornek_metin.search(satir).group(1).strip()
  263.                                 ham_metin += '</ornek_metin>\n'
  264.  
  265.                                 if sablon_ornek_kaynak.search(satir):
  266.                                         ham_metin += '\t\t\t\t\t<ornek_kaynak>'
  267.                                         ham_metin += sablon_ornek_kaynak.search(satir).group(1).strip()
  268.                                         ham_metin += '</ornek_kaynak>\n'
  269.                                
  270.                                 ham_metin += '\t\t\t\t</ornek>\n'
  271.                        
  272.                         ham_metin += '\t\t\t</grup_anlam>\n'
  273.                 elif sablon_atasozu.search(satir):
  274.                         tag_atasozu = True
  275.                         ham_metin += '\t\t\t<grup_atasozu_deyim_birlesikfiil>\n'
  276.                 elif sablon_birlesik.search(satir):
  277.                         if tag_atasozu:
  278.                                 tag_atasozu = False
  279.                                 ham_metin += '\t\t\t</grup_atasozu_deyim_birlesikfiil>\n'
  280.  
  281.                         tag_birlesik = True
  282.                         ham_metin += '\t\t\t<grup_birlesiksoz>\n'
  283.                 elif sablon_soz_1.search(satir) and not sablon_soz_3.search(satir):
  284.                         soz = sablon_soz_1.search(satir).group(1)
  285.  
  286.                         if sablon_soz_4.search(soz):
  287.                                 soz = sablon_soz_4.search(soz).group(1)
  288.  
  289.                         if sablon_soz_2.search(soz):
  290.                                 ham_metin += '\t\t\t\t<soz>' + sablon_soz_2.search(soz).group(1).strip() + '</soz>\n'
  291.                         else:
  292.                                 ham_metin += '\t\t\t\t<soz>' + soz.strip() + '</soz>\n'
  293.  
  294.         if tag_atasozu:
  295.                 ham_metin += '\t\t\t</grup_atasozu_deyim_birlesikfiil>\n'
  296.         elif tag_birlesik:
  297.                 ham_metin += '\t\t\t</grup_birlesiksoz>\n'
  298.                
  299.         if tag_grup:
  300.                 ham_metin += '\t\t</grup>\n'
  301.                
  302.         return ham_metin
  303.  
  304.  
  305.  
  306. # ---------------------------------------------------------------
  307. # sozluk verisini, uygun bicime cevirir
  308. def sozluk_verisini_duzenle(veri, kelime, imla_eki):
  309.         sozluk_kaydi        = ""
  310.        
  311.         if len(veri):
  312.                 veri = bicimlendirme_001(veri, kelime)
  313.                 veri = bicimlendirme_002(veri, kelime)
  314.                 veri = bicimlendirme_003(veri, kelime, imla_eki)
  315.                
  316.                 sozluk_kaydi += '\t<kayit>\n'
  317.                 sozluk_kaydi += veri
  318.                 sozluk_kaydi += '\t</kayit>\n'
  319.        
  320.         return sozluk_kaydi
  321.        
  322.  
  323.  
  324. # ---------------------------------------------------------------
  325. # verilen kelime icin sozluge kaydedilecek veriyi hazirlar
  326. def sozluk_kaydini_hazirla(site, kelime, imla_eki):
  327.         sozluk_kaydi = sozluk_verisini_siteden_al(site, kelime)
  328.         sozluk_kaydi = sozluk_verisini_duzenle(sozluk_kaydi, kelime, imla_eki)
  329.        
  330.         return sozluk_kaydi
  331.  
  332.  
  333.  
  334. # ---------------------------------------------------------------
  335. # hazirlanan sozluk kaydini dosyaya kaydeder
  336. def sozluk_kaydini_dosyaya_kaydet(dosya_adi, kayit):
  337.         if len(kayit):
  338.                 dosya = open(dosya_adi, 'a')
  339.                 dosya.write(kayit)
  340.                 dosya.close()
  341.  
  342.  
  343.  
  344. # ---------------------------------------------------------------
  345. # sozluk dosyasinin baslangic bolumunu olusturan fonksiyon
  346. def sozluk_baslangic_kaydini_olustur(dosya_adi):
  347.         veri = '<?xml version="1.0" encoding="windows-1254"?>\n'
  348.         veri += '<sozluk>\n'
  349.        
  350.         dosya = open(dosya_adi, 'w')
  351.         dosya.write(veri)
  352.         dosya.close()
  353.  
  354.  
  355.  
  356. # ---------------------------------------------------------------
  357. # sozluk dosyasinin bitis bolumunu olusturan fonksiyon
  358. def sozluk_bitis_kaydini_olustur(dosya_adi):
  359.         veri = '</sozluk>'
  360.  
  361.         dosya = open(dosya_adi, 'a')
  362.         dosya.write(veri)
  363.         dosya.close()
  364.  
  365.  
  366.  
  367. # ---------------------------------------------------------------
  368. # sozlugu olusturan fonksiyon
  369. def sozlugu_olustur(site, dosya_sozluk, dosya_kilavuz):
  370.         sablon_kelime      = re.compile("([^,(\n]*)(.*)")
  371.         bir_onceki_kelime       = ""
  372.         dosya         = open(dosya_kilavuz, 'r')
  373.         sozluk_baslangic_kaydini_olustur(dosya_sozluk)
  374.        
  375.         for satir in dosya:
  376.                 if len(satir) > 1:
  377.                         gruplar = sablon_kelime.search(satir)
  378.                         if gruplar:
  379.                                 if bir_onceki_kelime.lower() != gruplar.group(1).strip().lower():
  380.                                         bir_onceki_kelime = gruplar.group(1).strip()
  381.                                         sozluk_kaydi = sozluk_kaydini_hazirla(site, gruplar.group(1).strip(), gruplar.group(2).strip())
  382.                                         sozluk_kaydini_dosyaya_kaydet(dosya_sozluk, sozluk_kaydi)
  383.                                         print bir_onceki_kelime
  384.                                 else:
  385.                                         print '>>>>> bilgi (kelime tekrarı) : ', satir.strip()
  386.                         else:
  387.                                 print '>>>>> hata (kelime tesbit edilemedi) : ', satir.strip()
  388.        
  389.         sozluk_bitis_kaydini_olustur(dosya_sozluk)
  390.         dosya.close()
  391.  
  392.        
  393.  
  394.  
  395.  
  396. # ---------------------------------------------------------------
  397. # ana bolum
  398.  
  399. for harf in ALFABE:
  400.         #dosya isimleri
  401.         dosya_kilavuz   = DOSYA_KILAVUZ + '_' + harf + '.txt'
  402.         dosya_sozluk    = DOSYA_SOZLUK + '_' + harf + '.xml'
  403.  
  404.         # imla kilavuzu bolumu
  405.         kilavuz_dosyasini_hazirla(dosya_kilavuz)
  406.         kelime_listesi = kelime_listesini_al(SITE_KILAVUZ, harf)
  407.         kelime_listesi = kelime_listesini_duzenle(kelime_listesi)
  408.         kelime_listesini_kaydet(dosya_kilavuz, kelime_listesi)
  409.  
  410.         # sozluk bolumu
  411.         sozlugu_olustur(SITE_SOZLUK, dosya_sozluk, dosya_kilavuz)

advertising

ポストを更新

このポストは更新できる、または、新しいポストを作成

You may also comment on this post.

ペーストの更新
ポストの詳細 (随意)

注目: ペーストのコンテントだけで必要ですが、以下の情報は便利かも知れません。

名前/タイトルを保存する?

(スペースで切る, 随意)



Please note that information posted here will not expire by default. 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.

comments powered by Disqus
worth-right