我正在开发javascript程序,该程序需要文本并使用它来生成句子 乍一看似乎有道理。
我正在实现一个马尔可夫模型。
我有例如:
[{word:"hello", prob: 0.5}, {word: "world", prob: 0.25},...]
我的模型要复杂得多,我不打算解释每一个细节。
我想知道的是,当知道某个单词出现的概率时,如何在 Javascript 中创建句子生成器?
我目前所拥有的似乎正在这样做,但当真正考虑它时,它只是随机的。 我尝试的是将表中每个单词的概率值与从 0 到 1 的随机选择值进行比较。
例如,我会选择
randomValue = Math.Random().toFixed(2)
使用 toFixed 使值为 0.33 而不是 0.3455343...。然后我会将其与每个单词的不同概率值进行比较,看看它是否匹配。一旦匹配,我就会选择这个词。
至少让单词被概率选择的正确方法是什么,而不是我所做的,这似乎只是随机选择。
我对马尔可夫模型不太熟悉,但我觉得我可以在这里伸出援手——特别是考虑到到目前为止这里还没有答案。
首先,您提供的代码:
randomValue = Math.Random().toFixed(2)
有几个问题。随机的"R"应该是小写的,toFixed(2( 返回一个字符串,而不是一个数字。该行的正确版本是:
var randomValue = Number(Math.random().toFixed(2));
话虽如此,要纯粹根据最高概率选择下一个单词,无论如何您都不需要使用该行代码。你会做一些事情:
var nextWordProbabilities = [{word:"hello", prob: 0.5}, {word: "world", prob: 0.25}];
nextWordProbabilities.sort(function(a, b){
if(a.prob < b.prob)return 1;
if(a.prob > b.prob)return -1;
return 0;
});
var nextWord = nextWordProbabilities[0].word;
如果你想加入一点随机性,这样你就不会总是得到最高概率的单词,而可能是一个足够接近最高可能性的单词,你可以继续在前面的代码块中添加这个:
var TENDENCY_TOWARDS_MOST_PROBABLE_WORDS = .5;
for(var i = 0; i < nextWordProbabilities.length; i++){
if(Math.random() > TENDENCY_TOWARDS_MOST_PROBABLE_WORDS){
nextWord = nextWordProbabilities[i].word;
}
}
我也不确定你如何确定何时结束一个句子。如果您不只是连续执行一定数量的单词,那么当最可能的单词不是超级可能的单词时,结束句子可能是个好主意,如下所示:
if(nextWordProbabilities[0].prob < .2){
//end the sentence
}
希望这是有帮助的。
试试这个
var b =Math.floor(Math.random() * 6);
if (b=="1"){var a=("i ")}
else if(b=="2"){var a=("a bean ")}
else if(b=="3"){var a =("a xbox ")}
else if(b=="0"){var a =("sport drink ")}
else if (b=="4"){var a =("some grass ")}
else if(b=="5"){var a =("a rock ")}
var e=Math.floor(Math.random() * 5);
if(e=="0"){var p =("fell on ")}
else if(e=="1"){var p =("jumped on ")}
else if(e=="2"){var p =("bounced over ")}
else if(e=="3"){var p =("slid on")}
else if(e=="4"){var p =("slipped on")}
var n=Math.floor(Math.random() * 7);
if(n=="0"){var q=("a mountain ")}
if(n=="1"){var q =("a candlestick ")}
else if(n=="2"){var q =("a raw potato ")}
else if(n=="3"){var q=("a book ")}
else if(n=="4"){var q=("a glass bottle ")}
else if(n=="5"){var q =("water ")}
else if(n=="6"){var q =("fish soup ")}
var o=Math.floor(Math.random() * 4);
if(o=="0"){var v =("in the dark")}
if (o=="1"){var v =("in the light")}
if(o=="2"){var v=("in the middle of nowhere")}
if(o=="3"){var v=("in a giant lemon")}
document.write(a+p+q+v)
document.open()