Matlab'da fonem dönüşümü için grafikte çalışıyorum ve söz konusu sözcükleri ilk olarak belirli bileşenlere, digraflara ve bunlarla ilgili sesli harflere bölmek için daha genelleştirilmiş bir kod üretmeye çalışıyorum ve her bir girilen dizeyi (sözcük) grafeme biçimine ayırın Böylece daha sonra uygun fonetik sentezi üretebilir. Ancak, çok sayıda kuralın varlığı ve dolayısıyla büyük miktardaki if-elseif-else'den dolayı, her bir harf ve büyüyen dizilerin varlığıyla döngü yaparak, zaman karmaşıklığı manifoldunu arttırmış ve herhangi bir sonuç vermemiştir , her zaman konsoldan bir string girişi giriyorum). Bana kodu basitleştirmek yardım lütfen olabilir Yani eğer, burada aşağıda verilmiştir:Zaman karmaşıklığını azaltarak Matlab'daki bir dizgeden ingilizce grafikler nasıl formüle edilir?
prompt='Enter a string: ';
str=input(prompt,'s');
l=length(str);
grapheme=[];
i=1;
while (i<=l)
if strcmpi(str(i),'b')
grapheme=[grapheme;{'b'}];
elseif strcmpi(str(i:i+1),'bb')
grapheme=[grapheme;{'b'}];
i=i+1;
elseif strcmpi(str(i),'d')
grapheme=[grapheme;{'d'}];
elseif strcmpi(str(i:i+1),'dd')||strcmpi(str(i:i+1),'ed')
grapheme=[grapheme;{'d'}];
i=i+1;
elseif strcmpi(str(i),'f')
grapheme=[grapheme;{'f'}];
elseif strcmpi(str(i:i+1),'ff')||strcmpi(str(i:i+1),'ph')||strcmpi(str(i:i+1),'gh')
grapheme=[grapheme;{'f'}];
i=i+1;
elseif strcmpi(str(i),'g')
grapheme=[grapheme;{'g'}];
elseif strcmpi(str(i:i+1),'gg')%||strcmpi(str(i:i+2),'gue')
grapheme=[grapheme;{'g'}];
i=i+1;
elseif strcmpi(str(i),'h')
grapheme=[grapheme;{'h'}];
elseif strcmpi(str(i:i+1),'wh') && strcmpi(str(i+2),'o')
grapheme=[grapheme;{'h'}];
i=i+1;
elseif strcmpi(str(i),'j')
grapheme=[grapheme;{'j'}];
elseif strcmpi(str(i:i+1),'ge')||strcmpi(str(i:i+1),'jj')
grapheme=[grapheme;{'j'}];
i=i+1;
% elseif strcmpi(str(i:i+2),'dge')
% grapheme=[grapheme;{'j'}];
% i=i+2;
elseif strcmpi(str(i),'k')||strcmpi(str(i),'c')
grapheme=[grapheme;{'k'}];
elseif strcmpi(str(i),'ck')||strcmpi(str(i),'cc')||strcmpi(str(i),'qu')
grapheme=[grapheme;{'k'}];
i=i+1;
elseif strcmpi(str(i),'l')
grapheme=[grapheme,{'l'}];
elseif strcmpi(str(i),'ll')||strcmpi(str(i),'le')
grapheme=[grapheme,{'l'}];
i=i+1;
elseif strcmpi(str(i),'m')
grapheme=[grapheme,{'m'}];
elseif strcmpi(str(i),'mm')||strcmpi(str(i),'lm')||strcmpi(str(i),'mn')
grapheme=[grapheme;{'m'}];
i=i+1;
elseif strcmpi(str(i),'n')
grapheme=[grapheme,{'n'}];
elseif strcmpi(str(i),'nn')||strcmpi(str(i),'kn')||strcmpi(str(i),'pn')||strcmpi(str(i),'gn')
grapheme=[grapheme;{'n'}];
i=i+1;
elseif strcmpi(str(i),'p')
grapheme=[grapheme;{'p'}];
elseif strcmpi(str(i),'pp')
grapheme=[grapheme;{'p'}];
i=i+1;
elseif strcmpi(str(i),'r')
grapheme=[grapheme;{'r'}];
elseif strcmpi(str(i),'rr')||strcmpi(str(i),'wr')||strcmpi(str(i),'rh')
grapheme=[grapheme;{'r'}];
i=i+1;
elseif strcmpi (str(i),'s')
grapheme=[grapheme;{'s'}];
elseif strcmpi(str(i),'ss')||strcmpi(str(i),'sc')||strcmpi(str(i),'ce')||strcmpi(str(i),'se')||strcmpi(str(i),'ps')
grapheme=[grapheme;{'s'}];
i=i+1;
elseif strcmpi (str(i),'t')
grapheme=[grapheme;{'t'}];
elseif strcmpi(str(i),'tt')|| strcmpi(str(i),'te')
grapheme=[grapheme;{'t'}];
i=i+1;
elseif strcmpi (str(i),'v')
grapheme=[grapheme;{'v'}];
elseif strcmpi(str(i),'ve')
grapheme=[grapheme;{'v'}];
i=i+1;
elseif strcmpi (str(i),'v')
grapheme=[grapheme;{'v'}];
elseif strcmpi(str(i),'ve')
grapheme=[grapheme;{'v'}];
i=i+1;
elseif strcmpi (str(i),'w')
grapheme=[grapheme;{'w'}];
elseif strcmpi(str(i),'wh')
grapheme=[grapheme;{'w'}];
i=i+1;
elseif strcmpi(str(i),'x')
grapheme=[grapheme;{'x'}];
elseif strcmpi (str(i),'y') && strcmp('I')
grapheme=[grapheme;{'y'}];
elseif strcmpi(str(i),'z')
grapheme=[grapheme;{'z'}];
elseif strcmpi(str(i),'zz')||strcmpi(str(i),'ze')
grapheme=[grapheme;{'z'}];
i=i+1;
elseif strcmpi(str(i),'sh')
grapheme=[grapheme;{'sh'}];
i=i+1;
elseif strcmpi(str(i),'zh')
grapheme=[grapheme;{'z'}];
i=i+1;
elseif strcmpi(str(i),'ch')
grapheme=[grapheme;{'ch'}];
i=i+1;
elseif strcmpi(str(i),'th')
grapheme=[grapheme;{'th'}];
i=i+1;
elseif strcmpi(str(i),'a')
grapheme=[grapheme;{'a'}];
elseif strcmpi(str(i),'e')
grapheme=[grapheme;{'e'}];
elseif strcmpi(str(i),'i')
grapheme=[grapheme;{'i'}];
elseif strcmpi(str(i),'o')
grapheme=[grapheme;{'o'}];
elseif strcmpi(str(i),'u')
grapheme=[grapheme;{'u'}];
end
end
display(grapheme);
hangi ile çalışır ve hala bir belirsizlik-ish ise döngü içinde sıkışmış olmadığını görmek gerekir en basit dize girişi ile dener misin ? Ben 'hg' bir giriş dizesi ile denedim ve içeride sıkışmış. Korunacak geçerli bir dize kriteri var mı? – Divakar
Birkaç sorun görüyorum: strcmpi (str (i), 'th') ve diğer iki harfli karşılaştırmalar. Ayrıca str (i: i + 1) 've' str (i: i + 2) 'gibi şeyler de dışarıdan çıkmış olabilir. Ayrıca bu daha karmaşıktır: grapheme = [grapheme; {'d'}]', daha iyi preallocate – Amro
@Divakar Evet, en basit dizeler bile sıkışmış .. Ben 'bd' ile denedim ve 'meşgul' gösterdi. Dizi ölçütlerine gelince, giriş için sadece alfabe (tercihen küçük harf) olmalıdır. Henüz bir şey doğrulanmadı. – Meraki