Генерация списка случайных слов в MATLAB - PullRequest
1 голос
/ 14 ноября 2011

Мне нужно создать 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')

Помощь будет оценена.

1 Ответ

1 голос
/ 14 ноября 2011

Следующий код генерирует 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'

Примечание: я не понимаю, почему вы генерируете случайное целое число в [1100], берете мод и сравниваете с 5. Есть 16 чисел, у которых мод равен 5 в [1100], поэтому отношение равно 0,16.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...