Python Alıştırma 1 [Çözüm Yayınlandı]

Başlatan dwain, 21 Temmuz 2010 - 16:29:49

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

dwain

Merhaba arkadaşlar,

Bana python öğreten bir arkadaşım var. Kendisi bana her gün bir ödev veriyor ve ben de o ödev üzerinde söylediği programcığı geliştirmeye çalışıyorum. Programları terminalden yapıyorum. Düşündüm ve belki de alıştırma adına ilgisini çekebilecek arkadaşlar için de buraya yazayım dedim. Kendisini geliştirmek isteyen arkadaşların da işine yarar belki. Bir de herkes birbirinin bakış açısını ve ne şekilde algoritmayı hazırladığını da görmüş olur.

Benim kodlarım az önce bitti. Bir gün geçtikten sonra ben de yayınlarım nasıl yaptığımı.

# 2010-07-21 Bora

Title:
   Developping a collocation extraction tool.

Task:
   Bir dokumandaki kelimelerin kac kez tekrarlandigini hesaplayan bir program yapmistik.
   Bu programda kelimeleri, birbirinden bosluk karakteri ile ayrilan parcalar olarak tanimlayarak
   ayiklamistik.
   Bu programda ise, kelimeleri tek tek degil de, birbiri ardina gelen ikili, uclu, dortlu yada
   n-sayisinda gruplar (collocation) halinde ele alip, tekrar etme sayilarini hesaplayacagiz.
   
   [Ornek cumle]: "Ben bes yildir Japonya'da yasiyorum ve Turkiye'yi oldukca ozledim."

   Bu cumledeki kelimelerin ikili kolokasyonu asagidaki gibi orneklenebilir;
   - Ben bes
   - bes yildir
   - yildir Japonya'da
   - Japonya'da yasiyorum
   - yasiyorum ve
   - ve Turkiye'yi
   - Turkiye'yi oldukca
   - oldukca ozledim.
   
   Uclu kololasyonu ise;
   - Ben bes yildir
   - bes yildir Japonya'da
   - ...
   
Implementation:
   Asagidaki gibi bir fonksiyon tasarlayacagiz.
   
   Pseudo code (Ornek kod):
   -------------------------
   
   def extract_collocation(text, col_number=2, delimiter=" "):
      """
      Extracts collocation groups from the given text and
      calculates their frequencies.
      
      @params text : Source document
      @col_number  : Number of collocations
      @delimiter   : Delimiter character for splitting text
      @returns    : A dictionary containing a collocation group
                  as its key, and frequency as its value.
      """"
      pass


Notes:
   Bu programi yazip, cok uzun bir dokuman uzerinde calistirdigimizda, o dokumanda
   ne tur ifadelerin cok kullanildigini gorebilecegiz. Normalde hic farketmedigimiz
   yada dusunmedigimiz birsey ama, ornegin okudugun bir PDF romanini ele aldiginda
   yazarin ne tur ifadeleri cok kullandigini ortaya cikartabilirsin.



Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 22 Temmuz 2010 - 12:40:09

Selamlar,

Dünkü vermiş olduğum alıştırma örneği için kendi yaptığım kodları paylaşabilirim şimdi. Ben bir süre yazmayayım dedim ama ilgi sanırım az biraz :) Yine de kendisi alıştırma yapmak isteyen ve ilk defa konuyu okuyan arkadaşlar aşağıdaki kodlara bakmadan da yapmaya çalışabilirler.

Aşağıdaki program, bir text dosyasını okuyor. Bu text dosyasında sizin vermiş olduğunuz col_number değeri kadar kelimeleri yukarıda istendiği gibi ayırıyor. Daha sonra bulunan her parçanın cümlede kaç defa geçtiğini yanına yazıyor. İsterseniz siz bunu col_number'i 1 yaparak her bir kelimenin de kac defa gectigini bulabilirsiniz.

Yani örneğin col_number 2 olsun:

Bugun hava cok guzel olur diye bekliyordum ama olmadi.

Bugun hava - 1
hava cok - 1
cok guzel - 1
guzel olur - 1
olur diye - 1
diye bekliyordum - 1
bekliyordum ama - 1
ama olmadi - 1

Bu kalıplar cümlede sadece bir kere geçiyor. Ancak çok daha uzun txt dosyaları okuttuğunuzda ve col_number değerini değiştirdiğinizde farklı sonuçlar olacaktır.

Neyse şimdi kodu paylaşıyorum:

[b]def extract_col(text, col_number=2, delimiter=" "):
    sozluk = {}
    dosya = open(text, "r")
    oku = dosya.read().replace("\n", "")        #dosyadaki yeni satir karakterlerini kaldiriyoruz.
    liste = oku.split(delimiter)        #kelimeleri belirlenecek delimiter ile ayiriyoruz.
    for x in range(len(liste)):
        if x + col_number > len(liste):
            pass
        else:
            y = " ".join(liste[x:x+col_number])
        if y in sozluk.keys():
            sozluk[y] = sozluk[y] + 1
        else:
            sozluk[y] = 1
    for col in sozluk.keys():
        print "%s -> %s" % (col, sozluk[col])[/b]'



Kodlarda anlaşılmayan bir şey yoktur umarım. Olursa her zaman buradayız zaten :)

Görüşmek üzere. Başka bir alıştırma için yine bir başlık açarım.
Kaan Aslan
Mac OSX