我需要生成一个m文件,它会生成遵循某些规则的随机“伪词”的大型列表。
脚本将允许的字母设置为集合,并将它们出现在单词中。对于这个特定的应用,一个单词可以有2到4个“音节”,它可以由一组C中的一个成员组成,一个来自V,或者一个来自C,一个来自V,另一个来自V.
以下代码一次只能生成一个单词,但我希望能够一次生成50或100个单词。
到目前为止我所做的工作如下:
clc
word = [];
wlist = {};
C = ['KGBNSLMTVx_']; prob_C = [0.13, 0.12, 0.11, 0.10, 0.107, 0.066,
0.09, 0.066,0.066, 0.065, 0.06];
C2 = ['KLNT']; prob_C2 = [0.2575,0.2525,0.2475,0.2425];
V = ['AIUE']; prob_V = [0.275,0.265,0.245,0.24];
for m = 1:randint(1,1,[2 4])
add_C2 = mod(randint(1,1,[1,100]),6);
if add_C2 == 5
syl = [randsample(C,1,true,prob_C) randsample(V,1,true,prob_V)
randsample(C2,1,true,prob_C2)];
else
syl = [randsample(C,1,true,prob_C) randsample(V,1,true,prob_V)];
end
word = [word syl];
end
new = char(word);
wlist = {wlist{:}, new};
disp(wlist')
将不胜感激。
答案 0 :(得分:1)
以下代码为您的问题生成100个可接受的单词。
clc, clear
nWords = 100;
wList = {};
C = 'KGBNSLMTVx_';
probC = [0.13, 0.12, 0.11, 0.10, 0.107, 0.066, 0.09, 0.066,0.066, 0.065, 0.06];
C2 = 'KLNT';
probC2 = [0.2575, 0.2525, 0.2475, 0.2425];
V = 'AIUE';
probV = [0.275,0.265,0.245,0.24];
probAddC2 = 0.16;
for i=1:nWords
word = [];
nSyl = randi([2 4]);
for j = 1:nSyl
syl = strcat(randsample(C,1,true,probC), randsample(V,1,true,probV));
if rand < probAddC2
syl = strcat(syl, randsample(C2,1,true,probC2));
end
word = strcat(word, syl);
end
wList{end+1} = word;
end
wList'
注意:我不明白为什么你在[1,100]中生成一个随机整数,取mod并与5比较。在[1,100]中有16个数字的mod为5,因此比率为0.16。