ruby – 从地图创建字符串
我目前正在开发一个项目,通过使用无上下文语法规则,我将生成随机句子.现在,我正在创建一个将接收哈希的函数,并遍历它选择正确的产品来创建一个句子并将其作为字符串返回.
例如,给定以下格式的哈希: { "<start>"=>[["The","<object>","<verb>","tonight."]],"<object>"=>[["waves"],["big","yellow","flowers"],["slugs"]],"<verb>"=>[["sigh","<adverb>"],["portend","like","<object>"],["die","<adverb>"]],"<adverb>"=>[["warily"],["grumpily"]] } 我应该能够产生一个随机的句子,例如:“今晚的波浪会变得非常糟糕”. 以下是生成此句子的整个过程: >它将始终在< start>处开始生成标记并继续填写所需的作品. 如何编写一个随机生成句子的方法? 解决方法
有趣的运动!
定义String#has_placeholder之后?检查<之间的单词和> 只要有占位符,算法就会选择一个起始句并迭代它.如果找到占位符,则将其替换为随机选择的子句. 它返回一个字符串,它也可以返回一个具有不同深度数组的树. class String def has_placeholder? self=~/<w+>/ end end grammar = { "<start>"=>[["The",["grumpily"]] } sentence = grammar["<start>"].sample.join(' ') while sentence.has_placeholder? do puts sentence sentence.sub!(/(<w+>)/){grammar[$1].sample.join(' ')} end puts sentence 它输出: The <object> <verb> tonight. The slugs <verb> tonight. The slugs portend like <object> tonight. The slugs portend like slugs tonight. 要么 The <object> <verb> tonight. The big yellow flowers <verb> tonight. The big yellow flowers portend like <object> tonight. The big yellow flowers portend like slugs tonight. 编辑: 您想要的方法可能如下所示: def expand(grammar,nonterm = "<start>") sentence = grammar[nonterm].sample.join(' ') while sentence.has_placeholder? do sentence.sub!(/(<w+>)/){grammar[$1].sample.join(' ')} end sentence end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |