2016-12-05 65 views
1

我正在通過麗塔庫的丹尼爾Shiffman的演示啓發字發生器。眼下,該代碼將使用線上的所有文字和標點符號之間的空間:如何從RiTa.js隨機單詞生成器中移除空格?

output += " "; 

我一直在試圖找出如何更改代碼,使空間不標點符號之間(如週期)出現,話。我認爲,要做到這一點最簡單的方法是使用一個if /離開標點不變,但增加了空間的話,但我有一個很難搞清楚what functions from the Rita library to use for this,以及語法else語句。

任何想法?這裏是我的代碼現在:

var input; 
var button; 
var lexicon; 

function setup() { 
    noCanvas(); 
    lexicon = new RiLexicon(); 

    input = createInput('As I say a noun is the name of a thing.'); 
    button = createButton('submit'); 
    input.changed(processRita); 
    button.mousePressed(processRita); 
    input.size(400); 
} 

function processRita() { 
var s = input.value(); 
var rs = new RiString(s); 
var words = rs.words(); 
var pos = rs.pos(); 
console.log(words); 
console.log(pos); 

var output = ''; 

for (var i = 0; i < words.length; i++) { 
    if (/nn.*/.test(pos[i])) { 
     var alliterations = lexicon.alliterations(words[i]); 
     if(alliterations.length == 0){ 
     output+=words[i]; 
     }else{ 
     output += alliterations[Math.floor(Math.random() * alliterations.length)]; 
     } 
     //console.log("noun"); 
     //console.log(alliterations.length); 
    } else if (/jj.*/.test(pos[i])) { 
     var alliterations = lexicon.alliterations(words[i]); 
     output += alliterations[Math.floor(Math.random() * alliterations.length)]; 
     //console.log("adjective"); 
    } else if (/vb/.test(pos[i])) { 
     var alliterations = lexicon.alliterations(words[i]); 
     output += alliterations[Math.floor(Math.random() * alliterations.length)]; 
     //console.log("verbs"); 
    } 
    else { 
     //console.log(words[i]); 
     output += words[i]; 
    } { 
     output += " "; 
    } 
    } 
    createP(output); 

} 

回答

0

多的試驗和錯誤之後,我不得不從編碼教授,誰幫我解決這個問題,這是更復雜,比我原先預計的幫助。爲了使這個代碼正常工作,我們在for循環的開頭添加了這一位:

if(words [i] ==「。」|| words [i] ==「,」| | words [i] ==「?」|| words [i] ==「!」){ output + = words [i]; } else { output + =「」;

所以整個代碼現在看起來是這樣的:

for (var i = 0; i < words.length; i++) { 



if(words[i] == "." || words[i] == "," || words[i] == "?" || words[i] == "!"){ 
    output += words[i]; 
    }else{ 
    output += " "; 
    if (/nn.*/.test(pos[i])) { 
     var alliterations = lexicon.alliterations(words[i]); 
     if(alliterations.length == 0){ 
     output+=words[i]; 
     }else{ 
     output += alliterations[Math.floor(Math.random() * alliterations.length)]; 
     } 
     //console.log("noun"); 
     //console.log(alliterations.length); 
    } else if (/jj.*/.test(pos[i])) { 
     var alliterations = lexicon.alliterations(words[i]); 
     output += alliterations[Math.floor(Math.random() * alliterations.length)]; 
     //console.log("adjective"); 
    } else if (/vb/.test(pos[i])) { 
     var alliterations = lexicon.alliterations(words[i]); 
     output += alliterations[Math.floor(Math.random() * alliterations.length)]; 
     //console.log("verbs"); 
    } 
    else { 
     //console.log(words[i]); 
     output += words[i]; 
    } 

} 


    } 
    createP(output); 

} 
0

爲什麼你需要一個這樣的庫?你就不能使用常規String功能來測試String是否是一個標點符號?

你可以只使用一個正則表達式來測試是否String一個標點字符匹配。或者對每個您關心的標點符號使用一系列的平等檢查。

您還可以檢查出the startsWith() functionthe endsWith() function

+0

>「你可以只使用正則表達式測試一個字符串是否與標點符號相匹配,或者只是對您關心的每個標點符號使用一系列相等性檢查。「我正在考慮這樣做,但我不知道如何在函數中設置它。我嘗試了各種各樣的東西,但它破壞了代碼或使間距不均勻(僅在原始代碼中的POS後添加空格)。 –

0

簡單,如果你使用這個庫的功能:

function processRita() { 

    var all, output = [], 
    words = RiTa.tokenize(input.value()), 
    pos = RiTa.getPosTags(words); 

    for (var i = 0; i < words.length; i++) { 
    if (/[nn|kk|vb|jj].*/.test(pos[i]) && (all = lexicon.alliterations(words[i])).length) { 
     output.push(RiTa.randomItem(all)); 
    } else { 
     output.push(words[i]); 
    } 
    } 

    createP(RiTa.untokenize(output)); 
}