2011-11-14 61 views
1

我需要生成一個m文件,該文件會生成遵循特定規則的隨機「僞單詞」的大型列表。在MATLAB中生成隨機單詞列表

該腳本給出了允許的字母集合,以及它們出現在單詞中的概率。對於這個特定的應用,一個單詞可以有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

你能舉一些例子'可以接受'的話來說清楚嗎? – petrichor

+0

字樣; 'KITLANSU', 'SABEVABA', 'SILU', 'TULKATESI', 'GESA', 'MUNAxAT' 'KI_ATVA', '' TIGAGE是可接受的。 –

+0

@InspectorBumstead:您可能有興趣使用馬爾可夫鏈等概率模型。以下是我之前編寫的生成隨機單詞的示例:http://stackoverflow.com/questions/2650982/anagram-solver-based-on-statistics-rather-than-a-dictionary-table/3341080#3341080 – Amro

回答

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' 

注:我不明白爲什麼你產生[1100]一個隨機整數,取模,並用5相比較有16個數字,其模爲5 [1100],這樣的比例是0.16。