Python heceleme programında heceyi ayırmada hata

Merhabalar. Python’da heceleme programı yapıyorum. Ekteki gibi hata alıyorum.

Bu hatayı nasıl giderebilirim. Kod şu şekilde:

from tkinter import *
from tkinter import font
from tkinter.colorchooser import askcolor

def cumle_yazdir():
    c="Suat, Kaan'a saatini verdi." 
   
    
    
    root = Tk()
    root.tk_setPalette("white")
    root.attributes("-fullscreen", 1)

    a=Text(root, height=20, width=50,font=('TTKB Dik Temel Abece', 120, 'bold'),fg="red")
    a.tag_configure('color',foreground='blue')
    a.insert(END,"\n ")
    a.pack()
    
    lower_vowel = {"â","ê","î","ô","û","a","e","ı","i","o","ö","u","ü","A","E","I","İ","O","Ö","U","Ü"}
    SPELL_SLICER = (('001000', 5), ('000100', 5), ('01000', 4), ('00100', 4), ('00010', 4), ('1000', 3), ('0100', 3),
                    ('0011', 3), ('0010', 3), ('011', 2),('010', 2), ('100', 2), ('10', 1), ('11', 1))

    def wordtoten(word: str):
        wtt = ''

        for ch in word:
            if ch in lower_vowel:
                wtt += '1'
            else:
                wtt += '0'
        print(wtt)
        return wtt

    def spellword(word: str):
        syllable_list = []
        tenword = wordtoten(word)
        len_spell = tenword.count('1')

        for i in range(tenword.count('1')):
            for x, y in SPELL_SLICER:
                if tenword.startswith(x):
                    syllable_list.append(word[:y])
                    word = word[y:]
                    tenword = tenword[y:]
                    break

        if tenword == '0':
            syllable_list[-1] = syllable_list[-1] + word
        elif word:
            syllable_list.append(word)

        if len(syllable_list) != len_spell:
            return False

        return syllable_list
     
    for enum, kelime in enumerate(spellword(c)):
        if enum%2==0:
            a.insert(END,kelime)
 
        else:
            a.insert(END,kelime,'color')
            
    def cikis():
        root.destroy()
        
        

    def renk():
        color = askcolor()[-1]
        a.tag_add(color, a.index("sel.first"), a.index("sel.last"))
        a.tag_configure(color, foreground=color)        

    buton1 = Button(root,text="Seçili Alanın Rengini Değiştir", command=renk, height=1, width=25, fg="black", bg="white", font="Helvetica 16 bold")
    buton1.place(relx=0.05, rely=0.90)
        
    buton = Button(root,text="Çıkış", command=cikis, height=1, width=7, fg="black", bg="white", font="Helvetica 16 bold")
    buton.place(relx=0.30, rely=0.90)

    root.mainloop()

cumle_yazdir()

Merhaba,

ka-an-a sondaki a harfi kelimenin bütünlüğü dışında bir harf. bir belirteç. farklı bir hece.

doğrusu >> ka-an-a
yanlışı >> ka-ana

ka-ana diye hecemelesi yanlış zaten. Tabi aldığınız veya bize göstermeye çalıştığınız hata bu bahsettiğim bölüm ile ilgili ise.

ya da sizin demek istediğiniz heceleme şu şekilde mi? >> ka-a-na ?_?

1 Beğeni

Merhaba. Kelime Ka-a-n’a şeklinde heceleniyor. (n’a) hecesinin aynı renkte olmasını istiyorum. Javascript te istediğim şekilde kod var. Ama anlamadığımdan çeviremiyorum.
Onun ekran görüntüsü şu şekilde:

Sayın @goksel_gursu,

Kelime @tevhidulvahset’in dediği gibi şu şekilde heceleniyor :

image

Program doğru çalışıyor.

1 Beğeni

Hayır, Ka-a-na şeklinde heceleniyor.

1 Beğeni

Merhaba. Kodlamada bu hata nasıl giderilebilir acaba?

bu işlevi java scriptte yapan kodu buraya atabilir misiniz?

Kesme işaretini görmezden gelin.

Kodlamada her karakter için değer atıyor. Kodlarken nasıl bunu görmezden yapabilirim acaba?

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>HECELEME PROGRAMI</title>

	</head>

	<body style="background-color: #acc6e3"><center>
		<div>
			<input value="black" type="checkbox" onclick="değiştir(this.value,this.checked);">Siyah</input>
			<input value="darkgrey" type="checkbox" onclick="değiştir(this.value,this.checked);">Koyu Gri</input>
			<input value="red" type="checkbox" onclick="değiştir(this.value,this.checked);" checked>Kırmızı</input>
			<input value="darkred" type="checkbox" onclick="değiştir(this.value,this.checked);" >Koyu Kırmızı</input>
			<input value="violet" type="checkbox" onclick="değiştir(this.value,this.checked);">Menekşe</input>
			<input value="blue" type="checkbox" onclick="değiştir(this.value,this.checked);" checked>Mavi</input>
			<input value="navy" type="checkbox" onclick="değiştir(this.value,this.checked);">Koyu Mavi</input>
			<input value="aqua" type="checkbox" onclick="değiştir(this.value,this.checked);">Turkuaz</input>
			<input value="brown" type="checkbox" onclick="değiştir(this.value,this.checked);">Kahverengi</input><br>
			<input value="chocolate" type="checkbox" onclick="değiştir(this.value,this.checked);">Çikolata</input>
			<input value="maroon" type="checkbox" onclick="değiştir(this.value,this.checked);">Kestane Rengi</input>
			<input value="purple" type="checkbox" onclick="değiştir(this.value,this.checked);">Mor</input>
			<input value="fuchsia" type="checkbox" onclick="değiştir(this.value,this.checked);">Fuşya</input>
			<input value="green" type="checkbox" onclick="değiştir(this.value,this.checked);">Yeşil</input>
			<input value="darkgreen" type="checkbox" onclick="değiştir(this.value,this.checked);">Koyu Yeşil</input>
			<input value="olive" type="checkbox" onclick="değiştir(this.value,this.checked);">Zeytin Yeşili</input>
			<input value="yellow" type="checkbox" onclick="değiştir(this.value,this.checked);">Sarı</input>
			<input value="orange" type="checkbox" onclick="değiştir(this.value,this.checked);">Turuncu</input>
		</div>
		<br>
<form onsubmit="event.preventDefault();">
	<textarea id="giriş" style="border:4px double grey;border-radius: 5px;width: 600px;height: 200px; font-size: 20px;background-color: lightgrey;padding: 6px;box-sizing: border-box;" autofocus></textarea>	<br>
	<button onclick="hecc(değer('giriş'));"  style="font-size: 22px;margin-top: 10px;width: 397px;">Hecele</button>
	<button onclick="CopyToClipboard('panel');"  style="font-size: 22px;margin-top: 10px;width: 200px;">Kopyala</button>
</form>
<table style="width: 600px; border:4px double purple; margin-top: 10px;border-radius: 6px;">
	<tr>
		<td  id="panel" style="height: 200px;font-size: 25px;background-color: white;padding: 5px;" valign="top" align="left"></td>
	</tr>
</table>
</center>

	</body>

	<script>

var renkler=["red","blue"];
var harfler="ABCÇDEFGĞHİIJKLMNOÖPRSŞTUÜVYZÂÎÛabcçdefgğhiıjklmnoöprsştuüvyzâîû'";
var sayaç=0;



function değiştir(r,c) {
	if(c==true){
		if(renkler.includes(r)==false) { renkler.push(r);}
	} else {

		if(renkler.includes(r)==true) {renkler= removeA(renkler,r);}
	}

}




function hecc(s) {
var kelime="";
var cümle="";
if(s.includes("’")){s=s.replace(/\’/g,"'"); }

	for (var i = s.length - 1; i >= 0; i--) {
		if(harfler.includes(s[i])){kelime=s[i]+kelime;}else{
			if(kelime.length>0){kelime=hecele(kelime);
				cümle=s[i]+kelime+cümle;kelime="";
			}else{
				cümle=s[i]+cümle;
			}
		}
	}

	if(kelime.length>0){kelime=hecele(kelime);
				cümle=kelime+cümle;kelime="";
			}


cümle=cümle.replace(/(\n|\r|\r\n)/g, '<br>');
	içerik("panel",cümle);
}

function hecele(s) {
var ss="";
var hece="";
var boşluk=" ";
var x=renkler.length;


	for (var i = s.length - 1; i >= 0; i--) {
		hece=s[i]+hece;
if (s[i]=="'" && i>0 && sesli(s[i-1])==true && hece.length>2) {
	ss="<span style='color:"+renkler[(sayaç%x)]+"'>"+hece+"</span>"+ss;hece="";sayaç++;
} else if (s[i]=="'" && i>1 && sesli(s[i-1])==false && sesli(s[i+1])==true){
	ss="<span style='color:"+renkler[(sayaç%x)]+"'>"+s[i-1]+hece+"</span>"+ss;hece="";sayaç++;
	i--;
} else {

		if(i==0){ss="<span style='color:"+renkler[(sayaç%x)]+"'>"+hece+"</span>"+ss;hece="";sayaç++;} else {

			if(hece.length==1){
				if(i>0 && sesli(s[i])==true && sesli(s[i-1])==true){
					ss="<span style='color:"+renkler[(sayaç%x)]+"'>"+hece+"</span>"+ss;hece="";sayaç++;
				}
			}


			if(hece.length==2){
				if(hece[0]=="r" && s[i-1]=="t" && sesli(s[i-2])==false){ } else{ 
								 if(i>1 && s[i-1]!="'"){
								 	if(sesli(s[i])==false && sesli(s[i+1])==true){ss="<span style='color:"+renkler[(sayaç%x)]+"'>"+hece+"</span>"+ss;hece="";sayaç++;}
								 	if(sesli(s[i])==true && sesli(s[i-1])==true){ss="<span style='color:"+renkler[(sayaç%x)]+"'>"+hece+"</span>"+ss;hece="";sayaç++;}
								 } else if(sesli(s[i])==false && sesli(s[i-1])==true && sesli(s[i+1])==true){ss="<span style='color:"+renkler[(sayaç%x)]+"'>"+hece+"</span>"+ss;hece="";sayaç++;}}
			}


			if(hece.length==3){

				if(i>1){
					if(hece[0]=="r" && s[i-1]=="t" && sesli(s[i-2])==false){ } else {
										if(sesli(s[i])==false && s[i-1] !="'"){ss="<span style='color:"+renkler[(sayaç%x)]+"'>"+hece+"</span>"+ss;hece="";sayaç++;}}

				} else if(sesli(s[i])==false && sesli(s[i-1])==true){ss="<span style='color:"+renkler[(sayaç%x)]+"'>"+hece+"</span>"+ss;hece="";sayaç++;}

			}

			if(hece.length==4 ){ss="<span style='color:"+renkler[(sayaç%x)]+"'>"+hece+"</span>"+ss;hece="";sayaç++;}
		}

}
	}

return ss;
}





function sesli(harf) {
	var sesliharfler="âîûaeıioöuüÂÎÛAEIİOÖUÜ";

	if(sesliharfler.indexOf(harf)>-1) {return true;} else {return false;}
}




function değer(id,d) {//kullanım değer("id","value") ekleme, değer("id") değeri alma
	if(d==null){
		return document.getElementById(id).value;
	} else {
		document.getElementById(id).value=d;
		if(document.getElementById(id).value==d){return true;} else {return false;}
		}

}


function içerik(id,d) {//kullanım içerik("id","value") ekleme, içerik("id") değeri alma
	if(d==null){
		return document.getElementById(id).innerHTML;
	} else {
		document.getElementById(id).innerHTML=d;
	//	if(document.getElementById(id).innerHTML==d){return true;} else {return false;}
		}

}


function removeA(arr) {
    var what, a = arguments, L = a.length, ax;
    while (L > 1 && arr.length) {
        what = a[--L];
        while ((ax= arr.indexOf(what)) !== -1) {
            arr.splice(ax, 1);
        }
    }
    return arr;
}


function CopyToClipboard(containerid) {
	if(içerik("panel").length>0) {
			if (document.selection) { 
			    var range = document.body.createTextRange();
			    range.moveToElementText(document.getElementById(containerid));
			    range.select().createTextRange();
			    document.execCommand("copy"); 
	
			} else if (window.getSelection) {
			    var range = document.createRange();
			     range.selectNode(document.getElementById(containerid));
			     window.getSelection().addRange(range);
			     document.execCommand("copy");
			     alert("İçerik panoya kopyalandı.") ;
			     document.getElementById("giriş").focus();
			}
		}
}
	</script>

</html>

Kodlar bu şekilde.

python da yapmak istediğiniz işlevi yapan java script kodunu istemiştim. kodların tamamını değil. Hangi kısım bahsettiğiniz işlevi gerçekleştiriyor, söyler misiniz?

<script>

var renkler=["red","blue"];
var harfler="ABCÇDEFGĞHİIJKLMNOÖPRSŞTUÜVYZÂÎÛabcçdefgğhiıjklmnoöprsştuüvyzâîû'";
var sayaç=0;



function değiştir(r,c) {
	if(c==true){
		if(renkler.includes(r)==false) { renkler.push(r);}
	} else {

		if(renkler.includes(r)==true) {renkler= removeA(renkler,r);}
	}

}




function hecc(s) {
var kelime="";
var cümle="";
if(s.includes("’")){s=s.replace(/\’/g,"'"); }

	for (var i = s.length - 1; i >= 0; i--) {
		if(harfler.includes(s[i])){kelime=s[i]+kelime;}else{
			if(kelime.length>0){kelime=hecele(kelime);
				cümle=s[i]+kelime+cümle;kelime="";
			}else{
				cümle=s[i]+cümle;
			}
		}
	}

	if(kelime.length>0){kelime=hecele(kelime);
				cümle=kelime+cümle;kelime="";
			}


cümle=cümle.replace(/(\n|\r|\r\n)/g, '<br>');
	içerik("panel",cümle);
}

function hecele(s) {
var ss="";
var hece="";
var boşluk=" ";
var x=renkler.length;


	for (var i = s.length - 1; i >= 0; i--) {
		hece=s[i]+hece;
if (s[i]=="'" && i>0 && sesli(s[i-1])==true && hece.length>2) {
	ss="<span style='color:"+renkler[(sayaç%x)]+"'>"+hece+"</span>"+ss;hece="";sayaç++;
} else if (s[i]=="'" && i>1 && sesli(s[i-1])==false && sesli(s[i+1])==true){
	ss="<span style='color:"+renkler[(sayaç%x)]+"'>"+s[i-1]+hece+"</span>"+ss;hece="";sayaç++;
	i--;
} else {

		if(i==0){ss="<span style='color:"+renkler[(sayaç%x)]+"'>"+hece+"</span>"+ss;hece="";sayaç++;} else {

			if(hece.length==1){
				if(i>0 && sesli(s[i])==true && sesli(s[i-1])==true){
					ss="<span style='color:"+renkler[(sayaç%x)]+"'>"+hece+"</span>"+ss;hece="";sayaç++;
				}
			}


			if(hece.length==2){
				if(hece[0]=="r" && s[i-1]=="t" && sesli(s[i-2])==false){ } else{ 
								 if(i>1 && s[i-1]!="'"){
								 	if(sesli(s[i])==false && sesli(s[i+1])==true){ss="<span style='color:"+renkler[(sayaç%x)]+"'>"+hece+"</span>"+ss;hece="";sayaç++;}
								 	if(sesli(s[i])==true && sesli(s[i-1])==true){ss="<span style='color:"+renkler[(sayaç%x)]+"'>"+hece+"</span>"+ss;hece="";sayaç++;}
								 } else if(sesli(s[i])==false && sesli(s[i-1])==true && sesli(s[i+1])==true){ss="<span style='color:"+renkler[(sayaç%x)]+"'>"+hece+"</span>"+ss;hece="";sayaç++;}}
			}


			if(hece.length==3){

				if(i>1){
					if(hece[0]=="r" && s[i-1]=="t" && sesli(s[i-2])==false){ } else {
										if(sesli(s[i])==false && s[i-1] !="'"){ss="<span style='color:"+renkler[(sayaç%x)]+"'>"+hece+"</span>"+ss;hece="";sayaç++;}}

				} else if(sesli(s[i])==false && sesli(s[i-1])==true){ss="<span style='color:"+renkler[(sayaç%x)]+"'>"+hece+"</span>"+ss;hece="";sayaç++;}

			}

			if(hece.length==4 ){ss="<span style='color:"+renkler[(sayaç%x)]+"'>"+hece+"</span>"+ss;hece="";sayaç++;}
		}

}
	}

return ss;
}





function sesli(harf) {
	var sesliharfler="âîûaeıioöuüÂÎÛAEIİOÖUÜ";

	if(sesliharfler.indexOf(harf)>-1) {return true;} else {return false;}
}




function değer(id,d) {//kullanım değer("id","value") ekleme, değer("id") değeri alma
	if(d==null){
		return document.getElementById(id).value;
	} else {
		document.getElementById(id).value=d;
		if(document.getElementById(id).value==d){return true;} else {return false;}
		}

}


function içerik(id,d) {//kullanım içerik("id","value") ekleme, içerik("id") değeri alma
	if(d==null){
		return document.getElementById(id).innerHTML;
	} else {
		document.getElementById(id).innerHTML=d;
	//	if(document.getElementById(id).innerHTML==d){return true;} else {return false;}
		}

}


function removeA(arr) {
    var what, a = arguments, L = a.length, ax;
    while (L > 1 && arr.length) {
        what = a[--L];
        while ((ax= arr.indexOf(what)) !== -1) {
            arr.splice(ax, 1);
        }
    }
    return arr;
}


function CopyToClipboard(containerid) {
	if(içerik("panel").length>0) {
			if (document.selection) { 
			    var range = document.body.createTextRange();
			    range.moveToElementText(document.getElementById(containerid));
			    range.select().createTextRange();
			    document.execCommand("copy"); 
	
			} else if (window.getSelection) {
			    var range = document.createRange();
			     range.selectNode(document.getElementById(containerid));
			     window.getSelection().addRange(range);
			     document.execCommand("copy");
			     alert("İçerik panoya kopyalandı.") ;
			     document.getElementById("giriş").focus();
			}
		}
}
	</script>

Kod bu şekilde.

Ben hala emin değilim, okulda bana böyle öğretmişlerdi :sweat_smile:

1 Beğeni

Metindeki istenmeyen karakterleri silerek:

lower_vowel = {"â","ê","î","ô","û","a","e","ı","i","o","ö","u","ü","A","E","I","İ","O","Ö","U","Ü"}
SPELL_SLICER = (('001000', 5), ('000100', 5), ('01000', 4), ('00100', 4), ('00010', 4), ('1000', 3), ('0100', 3),
                    ('0011', 3), ('0010', 3), ('011', 2),('010', 2), ('100', 2), ('10', 1), ('11', 1))

def wordtoten(word: str):
    wtt = ''

    for ch in word:
        if ch in lower_vowel:
            wtt += '1'
        else:
            wtt += '0'
    return wtt

def spellword_util(word: str):
    syllable_list = []
    tenword = wordtoten(word)
    len_spell = tenword.count('1')

    for i in range(len_spell):
        for x, y in SPELL_SLICER:
            if tenword.startswith(x):
                syllable_list.append(word[:y])
                word = word[y:]
                tenword = tenword[y:]
                break
    if tenword == '0':
        syllable_list[-1] = syllable_list[-1] + word
    elif word:
        syllable_list.append(word)

    if len(syllable_list) != len_spell:
        return False

    return syllable_list

def spellword(word: str):
    ignore = "'"
    s = "".join(filter(lambda c: c not in ignore, word))
    return spellword_util(s)
2 Beğeni

Kodlarınızdan yola çıkarak programı ilerlettim. Program bitti. Teşekkürler.
Screenshot_2


Kodlarım şu şekilde:

from tkinter import *
from tkinter import font
from tkinter.colorchooser import askcolor

def cumle_yazdir():
    s=[]

    c="Suat'a ve Kaan'a saat verdi."
    for k in c:
        s.append(k)

    u=[i for i, n in enumerate(s) if n == "'"]
                   
    print(s)
    print(u)
    
    root = Tk()
    root.tk_setPalette("white")
    root.attributes("-fullscreen", 1)

    a=Text(root, height=20, width=50,font=('TTKB Dik Temel Abece', 120, 'bold'),fg="red")
    a.tag_configure('color',foreground='blue')
    a.insert(END,"\n")
    a.pack()
    
    lower_vowel = {"â","ê","î","ô","û","a","e","ı","i","o","ö","u","ü","A","E","I","İ","O","Ö","U","Ü"}
    SPELL_SLICER = (('001000', 5), ('000100', 5), ('01000', 4), ('00100', 4), ('00010', 4), ('1000', 3), ('0100', 3),
                    ('0011', 3), ('0010', 3), ('011', 2),('010', 2), ('100', 2), ('10', 1), ('11', 1))

    def wordtoten(word: str):
        wtt = ''

        for ch in word:
            if ch in lower_vowel:
                wtt += '1'
            else:
                wtt += '0'
        return wtt

    def spellword_util(word: str):
        syllable_list = []
        tenword = wordtoten(word)
        len_spell = tenword.count('1')

        for i in range(len_spell):
            for x, y in SPELL_SLICER:
                if tenword.startswith(x):
                    syllable_list.append(word[:y])
                    word = word[y:]
                    tenword = tenword[y:]
                    break
        if tenword == '0':
            syllable_list[-1] = syllable_list[-1] + word
        elif word:
            syllable_list.append(word)

        if len(syllable_list) != len_spell:
            return False

        return syllable_list

    def spellword(word: str):
        ignore = "'"
        s = "".join(filter(lambda c: c not in ignore, word))
        return spellword_util(s)
     
    for enum, kelime in enumerate(spellword(c)):
        if enum%2==0:
            a.insert(END,kelime)
 
        else:
            a.insert(END,kelime,'color')

    for y in u:
        
        a.insert('2.'+str(y), "'")
    
    
            
    def cikis():
        root.destroy()
        
    def renk():
        color = askcolor()[-1]
        a.tag_add(color, a.index("sel.first"), a.index("sel.last"))
        a.tag_configure(color, foreground=color)        

    buton1 = Button(root,text="Seçili Alanın Rengini Değiştir", command=renk, height=1, width=25, fg="black", bg="white", font="Helvetica 16 bold")
    buton1.place(relx=0.05, rely=0.90)
        
    buton = Button(root,text="Çıkış", command=cikis, height=1, width=7, fg="black", bg="white", font="Helvetica 16 bold")
    buton.place(relx=0.30, rely=0.90)

    root.mainloop()

cumle_yazdir()
6 Beğeni

Hocam elinize sağlık güzel çalışma olmuş. Bu heceleri ayırma mantığını anlatabilir misiniz biraz rica edersem. Benim de buna benzer bir çalışma yapmam lazım. Algoritmasını öğrenebileceğim bir kaynak gibi bir şeyler öneride bulansanız da çok iyi olur. Çünkü ben daha yolun başındayım

1 Beğeni

Bayesian ridge classifier bu tip şeylerde çok işe yarıyor.