2016-12-05 64 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)); 
}