2017-05-15 2 views
0

ランダムな俳句の人に返信するTwitterボットを作成しようとしていますが、JavaScriptの構造を作成するのに問題があります。私が付いたコードでは、p5.jsを使用していることがわかります。2つのテキストファイルをロードしました.1つは名詞の束を、もう1つは形容詞の束でロードしました。私は、私が見つけたいくつかのコードを使用してそれらを音節で分割しましたが、私のリストを音節ごとの別々の配列に再編成する方法を理解することはできません。単語数を音節数で区切る

のような「oneSyllable = []」、「twoSyllable = []」など

すべてのヘルプは大正規表現機能が役立つだろうん何のだけでも説明をappreciated-。だろう

また、javascriptでこれを行う簡単な方法はありますか?いいえ。 p5を使うということは、コマンドラインを使ってtwitterボットに走らなければならないということです。ハイクツイッターの作成に関する追加情報がありましたら、お知らせください!私はたくさんの研究をしましたが、そこにあるいくつかのソースコードを見つけることはできません。

これはすぐに終了する予定のコードのためのもので、私は自分の奥から出ています!誰かが助けることを願っています。

function setup() { 
createCanvas(600, 6000); 
fill(0); 

loadStrings("./nouns.txt", doText); 
loadStrings("./adjectives.txt", doText2); 
} 

function doText(data) { 
for (var i=0; i<data.length; i++) { 
text("Nouns list:", 5, 20); 
text(data[i]+ ": " + (new_count(data[i])), 5, 20*i+50); 
} 
} 

function doText2(data) { 
for (var j=0; j<data.length; j++) { 
text("Adjectives list:", 100, 20); 
text(data[j]+ ": " + (new_count(data[j])), 100, 20*j+50); 
} 
} 

function new_count(word) { 
word = word.toLowerCase(); 
if(word.length <= 3) { return 1; } 
word = word.replace(/(?=[^laeiouy]es|ed|[^laeiouy]e)$/, ''); 
word = word.replace(/^y/, ''); 
return word.match(/[aeiouy]{1,2}/g).length; 
} 

答えて

0

私はキーがそれぞれの音節数を持つ単語のリストであること音節数と値であることを辞書に音節数が主催する単語を格納することをお勧めします。

JavaScriptで任意のオブジェクトは、あなたがあなたのリストを再整理するために、次の関数になっている可能性があり、「辞書」のためだけに別の用語をである連想配列、提供:

function groupBySyllableCount(wordList) { 
 
    var wordsBySyllableCount = {}; 
 
    for (var i = 0, len = wordList.length; i < len; i++) { 
 
    var slblCount = new_count(wordList[i]); 
 
    if (wordsBySyllableCount[slblCount] === undefined) { 
 
     wordsBySyllableCount[slblCount] = [wordList[i]]; 
 
    } else { 
 
     wordsBySyllableCount[slblCount].push(wordList[i]); 
 
    } 
 
    } 
 
    return wordsBySyllableCount; 
 
} 
 

 

 
// TEST & DEMO: 
 

 
var nouns = ['air', 'time', 'community', 'year', 'people', 'woman', 'house', 'research']; 
 
var nounsBySyllableCount = groupBySyllableCount(nouns); 
 
console.log(nounsBySyllableCount); 
 

 
function new_count(word) { 
 
    word = word.toLowerCase(); 
 
    if(word.length <= 3) { return 1; } 
 
    word = word.replace(/(?:[^laeiouy]es|ed|[^laeiouy]e)$/, ''); 
 
    word = word.replace(/^y/, ''); 
 
    return word.match(/[aeiouy]{1,2}/g).length; 
 
}

(?=[^laeiouy]es|ed|[^laeiouy]e)$正規表現のよう

、それは

  • いずれかが先行しないesと一致します、aeiou、又はy
  • 又はed
  • 又はelaeiou、又はy

が先行だけではありません文字列の最後(あなたの場合は単語)の直前にある場合は、$というアンカーで示されます。 (?=...)は正のルックアヘッドであり、ここでは[^laeiouy]esed、および[^laeiouy]eのパターンをグループ化して、それぞれの後に文字列の末尾を付ける必要があることを示します。

実際には、肯定的な先読みを使用することはここでは過剰です。キャプチャ((...))または非キャプチャ((?:...))のグループ構成でグループ化すれば十分です。上記の私のデモで改正された正規表現を参照してください。

関連する問題