Dosyada en çok geçen kelimeleri listeleme

Bir program yazılması gerekiyor. Kullanıcı input olarak bir txt dosyası girecek, o dosyanın içindeki metinde en çok tekrar eden 20 kelime listelenecek. Ama bu listede stopword’ler (a, an, is, me, he vb.) olmayacak. Benim kodumda bütün kelimelerin kaç kere tekrar ettiğini buluyor stopword’leri ayıklayıp. Ama en çok tekrar eden 20 tanesini seçtirip sort ettiremedim ve dosyanın input olarak kullanıcıdan alınması kısmını yazamadım. Bu kısımları koduma ekleyebilecek var mı?
kod
okutulacak txt dosyası

Kodunuzun sonuna bunları eklemeniz yeterli:

### EKLENENLER

kelimeler = most_freq('Joker.txt')

sıralı=sorted(kelimeler,key=lambda key: kelimeler[key],reverse=True)
sıralı = sıralı[:20] # ilk 20 kelimeyi istiyoruz
en_çok_geçen_kelimeler={}

for i in sıralı:
    en_çok_geçen_kelimeler[i] = kelimeler[i]

print(en_çok_geçen_kelimeler)

Burada kastınız kullanıcıdan dosyanın ismini almak mı?

1 Beğeni

Evet kullanıcı dosya adını uzantısıyla birlikte girmeli. “Joker.txt” şeklinde. Input alınacak dosyanın ve kodun aynı yerde bulunması yeterli bilgisayarın her yerini taramasına gerek yok.

Aşağıdaki kodlara göz atabilirsiniz.

oku = input('Dosya adı: ')
kelimeler = most_freq(oku)
2 Beğeni

Çok teşekkür ederim koduma ekledim çalıştı, fakat ne yazık ki bir kısım daha var ve burası en zoru. Şimdiye kadarki kodda kullanıcı 1 dosyayı input olarak giriyor, program dosyadaki metinde en çok tekrar eden 20 kelimeyi listeliyor. Bu listeye stopword’leri (a, an, is, me vb.) almıyor.

Fakat kullanıcı 2 dosyayı input olarak girmeyi seçerse program bu dosyaların ikisinde sadece ortak olan ve en çok tekrar eden 20 kelimeyi yazdırmalı yine stopword’leri liste dışı tutarak. Örnek olarak kullanıcı input1.txt ve input2.txt adında 2 dosyayı input olarak girsin. input1.txt’de 3 tane “Mehmet” 3 tane “Ali” kelimesi geçsin. input2.txt’de 1 tane “Mehmet” 4 tane “Ali” 2 tane “Bilal” kelimesi geçsin. Program {‘Ali’: 7, ‘Mehmet’: 4} yazdırmalı. Bu kısmı kodun son haline ekleyebilecek var mı?

kod
input dosyaları

Bu kod bir örnek, buradaki dict_1 ve dict_2 iki dosyayı da okuyup işlememiz sonucunda geri dönecek sözlükler olacak.

dict_1 = {"a":4, "b":1, "c":1, "o":6}
dict_2 = {"a":2, "b":3, "e":4, "z":4}

dict_final = {}

set_1 = set(dict_1)
set_2 = set(dict_2)

intersection = set_1 & set_2

for key in intersection:
    dict_final[key] = dict_1[key] + dict_2[key]

difference_1 = set_1 - set_2
difference_2 = set_2 - set_1

for i,j in zip(difference_1, difference_2):
    dict_final[i] = dict_1[i]
    dict_final[j] = dict_2[j]

Bu arada iki dosyadan okunan str'yi birleştirip (+ işleci ile) tek bir dosyaymış gibi üzerinde işlem yaparsanız bu koda gerek kalmaz. Eğer 2’den fazla dosya ile uğraşacaksanız bunu yapmanız çok daha mantıklı.

Kendinizi bolca pratik yaparak algoritma konusunda geliştirmeli ve gömülü fonksiyonlar hakkında bilgi edinmelisiniz. Böylece bunun gibi problemlerle karşılaştığınızda kendiniz de çözebilirsiniz.

1 Beğeni

Acil sorulara aciliyetin ne zaman gectigini de yazarsaniz, is isten gectikten sonra bosuna vakit harcamayalim.

Acil durum bittikten sonra yeni gereksinimlerle tekrar gelmek de—biri bize isini yaptirmaya calisiyormus gibi geliyor. Musterinin/patronun/hocanin gereksinimlerini tek tek forum uzerinden aktarmaktansa dogrudan kontaga gecmemizi saglamak daha rahat olacaktir.

2 Beğeni

özür dilerim bir dahakine dikkat edeceğim