0

我正在使用 Google Chrome (55.0.2883.87) 使用 Google 的Web Speech API,我遇到了一些非常奇怪的行为。

当试图说出名字时,后跟一个数字(如John 4),它通常只是说出名字和数字,因为它应该- 但对于某些名字,它会将单词chapter放在名字和数字之间,所以Daniel 4变成Daniel Chapter 4.

我选择了一些随机名称并使用以下代码对其进行了测试:

<script>
var names = ['Brian', 'John', 'Mike', 'Julia', 'Daniel', 'Michael', 'David', 'Jason', 'Jack'];

names.forEach(function(name) {
  var msg = new SpeechSynthesisUtterance(name + ' 4');
  window.speechSynthesis.speak(msg);
});
</script>

msg变量在记录时不包括单词 chapterconsole.log()

在这 9 个名字中,名字JohnDaniel是用它们之间的单词说出的chapter

问题

为什么会发生这种情况,哪些标准决定了哪些名称会受到影响?

4

2 回答 2

2

我认为你的同名词之一一本著名的书中写了一些东西,某个约翰也写了。我猜它对耶利米或其他人也是如此。

但我既不能在我的 55.0.2883.95 上也不能在我的 57.0.2954.0 在 mac 上复制...

也许这是一个圣诞复活节彩蛋

这个答案中有这么多宗教部分......

于 2016-12-17T13:01:18.370 回答
1

我不认为这是一个“复活节彩蛋”:
通常,语音合成引擎通常会尝试以某种有意义的方式解释文本片段,例如,如果该片段“看起来”像一个日期,则将带有标点符号的数字读取为日期。

解释

对于谷歌,我猜他们严重依赖统计数据来决定是否应该以一种或另一种方式解释文本片段。

在实践中,这对于特定情况可能会失败,原因如下:例如,如果特定情况确实是一些特殊情况;如果没有足够的“上下文”来得出正确/预期的含义(对于非常短的句子/片段尤其如此);如果用于导出统计数据的(文本)语料库不平衡,通常使用......

建议

根据引擎的不同,通常可以通过以不同方式格式化输入文本来控制行为。

例如,在 Chrome 中测试您的代码片段:如果您写出数字("four"而不是4),或在名称后插入逗号(即name + ', 4'),那么语音引擎将不会插入"chapter"请注意,逗号也会引入短暂的停顿)。

于 2017-01-09T12:43:46.487 回答