Vaktinize, emeğinize sağlık. teşekkürler. “şehridir” kelimesi listede 4 değil, 3 adet var. Ayrıca daha geniş bir metinde başka benzer hatalar da veriyor scriptiniz, daha eksik sayma gibi. Nedenini anlamaya çalışıyorum. Fakat bu hali ile de bana çok değerli şeyler çağrıştırdı, üzerinde çalışacağım.
Yeri mi bilmiyorum ama, geniş bir metin için kodlarımın son hali şu: Belki başkalarının da işine yarar bir gün.
import re
alphabets= "([A-Za-z])"
prefixes = "(Mr|St|Mrs|Ms|Dr)[.]"
suffixes = "(Inc|Ltd|Jr|Sr|Co)"
starters = "(Mr|Mrs|Ms|Dr|He\s|She\s|It\s|They\s|Their\s|Our\s|We\s|But\s|However\s|That\s|This\s|Wherever)"
acronyms = "([A-Z][.][A-Z][.](?:[A-Z][.])?)"
websites = "[.](com|net|org|io|gov)"
text = """Elinizdeki kitap, Python programlama dili için kapsamlı bir Türkçe
kaynak oluşturma projesi olan yazbel.com‘un bir ürünüdür. Bu kitabın amacı,
herhangi bir sebeple Python programlama diline ilgi duyan, bu programlama
dilini öğrenmek isteyen kişilere bu dili olabildiğince hızlı, ayrıntılı ve
kolay bir şekilde öğretmektir.
Bu kitabın hedef kitlesi, programlamayı hiç bilmeyen kişilerdir. Bu sebeple,
bu kitapta ders konularını olabildiğince ayrıntılı ve basitleştirilmiş bir
şekilde ele almaya çalıştık.
Bu Kitaptan Nasıl Yararlanabilirim?
Elinizdeki kitap, epey uzun ve ayrıntılı makalelerden oluşuyor. Dolayısıyla bu
kitabı elinize alıp bir roman gibi okumaya çalışırsanız, sıkılıp öğrenme
azminizi kaybedebilirsiniz. Bu kitabı sıkılmadan ve bıkkınlığa düşmeden takip
edebilmeniz için size birkaç öneride bulunalım.
Programlama dillerini, sanki tarih, coğrafya veya felsefe çalışıyormuşsunuz
gibi, kitaba gömülüp harıl harıl okuyarak öğrenemezsiniz. Programlama dillerini
öğrenebilmek için sizin de etkin bir şekilde öğrenme sürecine katılmanız
gerekir. Yani bu kitaptaki makalelere kafanızı gömmek yerine, bol bol örnek
kod yazmaya çalışırsanız, öğrendiğiniz şeyler zihninizde daha kolay yer
edecektir. Birincisi bu.
İkincisi, kimse sizden bu kitaptaki her ayrıntıyı ezberlemenizi beklemiyor.
Maharet, bir konuya ilişkin bütün ayrıntıları akılda tutabilmekte değildir.
İyi bir programcı, bir konuya dair nasıl araştırma yapacağını ve kaynaklardan
nasıl faydalanacağını bilir. Bir yazılım geliştirici adayı olarak sizin de
öğrenmeniz gereken şey, gördüğünüz bütün konuları en ince ayrıntısına kadar
ezberlemeye kalkışmaktan ziyade, o konuya ilişkin ilk aşamada fikir sahibi
olmaya çalışmaktır. Python’da ilerledikçe, zaten belli alanlara ilgi duyacak,
kendinizi o alanlarda geliştirmeye çalışacaksınız. Elbette çok uğraştığınız
konulara ilişkin ayrıntılar da daha kolay aklınızda kalacaktır. Üstelik bir
projeye ilişkin gerekliliklerin sizi yönlendirmesiyle, belli konularda daha
ayrıntılı araştırma yapma fırsatı da bulacaksınız.
Üçüncüsü, bir konuyu çalışırken yeterince anlayamadığınızı hissederseniz,
lütfen dudağınızı büzüp bir duvar köşesine kıvrılarak kendi kendinizi
yılgınlığa düşürmeyin. Eğer bir konuyu anlamadıysanız, okuyup geçin.
Okuyup geçmek içinize sinmiyorsa, aşağıda belirttiğimiz şekilde yardım isteyin.
Nereden Yardım Alabilirim?
Bu kitapta Python programlama diline ilişkin konuları olabildiğince temiz ve
anlaşılır bir dille anlatmaya çalıştık. Ancak yine de bazı konular zihninizde
tam olarak yer etmeyebilir. Üstelik kimi zaman, bir konuyu daha iyi
anlayabilmek ya da bir sorunun üstesinden gelebilmek için bilen birilerinin
yardımına da ihtiyaç duyabilirsiniz. İşte böyle durumlarda yazbel.com’un forum
alanına uğrayarak başka Python programcılarından yardım isteyebilirsiniz.
Forum alanı hem bilgi edinmek, hem de bildiklerinizi paylaşmak için oldukça
elverişli bir ortamdır. Foruma ilk girişiniz muhtemelen yardım istemek için
olacaktır. Ama ilerleyen zamanlarda Python bilginiz arttıkça bir de
bakacaksınız ki yardım ararken yardım eder duruma gelmişsiniz. İşte forum;
kendinizdeki değişimi görmek, bilgi düzeyinizdeki artışı takip etmek ve hatta
yeni şeyler öğrenmek için bulunmaz bir fırsattır.
"""
# Aşağıdaki fonksiyon alıntıdır. Kısaltmadan kullandım.
def split_into_sentences(text):
text = " " + text + " "
text = text.replace("\n"," ")
text = re.sub(prefixes,"\\1<prd>",text)
text = re.sub(websites,"<prd>\\1",text)
if "Ph.D" in text: text = text.replace("Ph.D.","Ph<prd>D<prd>")
text = re.sub("\s" + alphabets + "[.] "," \\1<prd> ",text)
text = re.sub(acronyms+" "+starters,"\\1<stop> \\2",text)
text = re.sub(alphabets + "[.]" + alphabets + "[.]" + alphabets + "[.]","\\1<prd>\\2<prd>\\3<prd>",text)
text = re.sub(alphabets + "[.]" + alphabets + "[.]","\\1<prd>\\2<prd>",text)
text = re.sub(" "+suffixes+"[.] "+starters," \\1<stop> \\2",text)
text = re.sub(" "+suffixes+"[.]"," \\1<prd>",text)
text = re.sub(" " + alphabets + "[.]"," \\1<prd>",text)
if "”" in text: text = text.replace(".”","”.")
if "\"" in text: text = text.replace(".\"","\".")
if "!" in text: text = text.replace("!\"","\"!")
if "?" in text: text = text.replace("?\"","\"?")
text = text.replace(".",".<stop>")
text = text.replace("?","?<stop>")
text = text.replace("!","!<stop>")
text = text.replace("<prd>",".")
sentences = text.split("<stop>")
sentences = sentences[:-1]
sentences = [s.strip() for s in sentences]
return sentences
liste= split_into_sentences(text)
yeniliste = liste.copy()
kaliplar = []
kalip = []
#print(yeniliste)
def kalip_arama(kaliplar):
kalip = []
kaliplar = []# bu iki listeyi neden dışarıda kabul etmeyip,
#hem dışarıda hem içeride istiyor anlamadım.
for i in liste:
metin = i.split()
del yeniliste[0]
for t in yeniliste:
dizi = t.split()
for p in metin:
if p in dizi and p not in kalip:
kalip.append(p)
if p not in dizi:
if kalip != []:
if kalip[-1]!="£":
kalip.append("£")# arada başka kelime olan kalıpları da almak için,
#o "başka kelime" yerine "£" ekliyorum
#kalip = dict.fromkeys(kalip)# tekrarları önlemek için dict yapıyoruz
# kalıplar listesine ekliyoruz
if len([x for x in kalip if x is not "£"])>1: # kalıp en az iki kelime olmalı
if " ".join(kalip) not in kaliplar:
kaliplar.append(" ".join(kalip))# tekrarları önlemek için
del kalip[:]
return kaliplar
kalıplar_2 = []
kalıplar_3 = []
for i in kalip_arama(kaliplar):
f=i.count(" £ ")
if f<1:
kalıplar_2.append(i)
print(kalıplar_2)
kalıplar_2 = """['Python programlama dili £', 'Elinizdeki kitap, £',
'Python programlama £', 'Bu kitabın £', 'ayrıntılı ve £', 'bir şekilde £',
'sizin de £', 'bu kitaptaki £', 'daha kolay £', 'bir konuya £',
'konuya ilişkin bütün £', 'da daha £', 'Üstelik bir £', 'bir konuyu £']
"""
for i in kalıplar_2:
i = i[:-2]
kalıplar_3.append(i)
print(kalıplar_3)
kalıplar_3 = ['Python programlama dili', 'Elinizdeki kitap,', 'Python programlama',
'Bu kitabın', 'ayrıntılı ve', 'bir şekilde', 'sizin de', 'bu kitaptaki',
'daha kolay', 'bir konuya', 'konuya ilişkin bütün', 'da daha',
'Üstelik bir', 'bir konuyu']
Şimdi bu kodları hem kısaltıp, hem de sonucu sözlük olarak almam gerekiyor, en çok tekrar sayılarını bulmak için. Bunun için sizin scriptinizi anlamaya çalışıyorum.
Bu arada, acaba tanıdığınız bilişsel mimari (cognitive architect) çalışan biri var mı?