2016-12-05 5 views
1

私はRiTaライブラリのDaniel Shiffmanのデモからインスパイアされたワードジェネレータに取り組んでいます。今、コード行を使用して、すべての単語や句読点の間にスペースを追加します。RiTa.jsランダムワードジェネレータからスペースを削除するには?

output += " "; 

私はスペースが(このような期間など)句読点の間で表示されないようにコードを変更する方法を見つけ出すしようとしていると言葉。これを行う最も簡単な方法は、句読点を変更せずに単語にスペースを追加するif/else文を使用することですが、文法と同様にwhat functions from the Rita library to use for thisを調べるのは苦労しています。

アイデア?今すぐ私のコードがあります:

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] == "!"){ 出力+ = words [i]; } else { 出力+ = "";

だから、全体のコードは次のようになります。あなたは、ライブラリの機能を使用する場合

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)); 
} 
関連する問題