【问题标题】:Odd behaviour in Google Web Speech APIGoogle Web Speech API 中的奇怪行为
【发布时间】:2016-12-17 12:47:49
【问题描述】:

我正在使用 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 变量在使用 console.log() 记录时不包含单词 chapter

在这 9 个名字中,John 和 Daniel 两个名字之间是 chapter。

问题

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

【问题讨论】:

    标签: javascript google-chrome text-to-speech google-text-to-speech webspeech-api


    【解决方案1】:

    我认为your homonyms 中的一个人在一本著名的书中写了一些东西,某个约翰也写了。我猜它对 Jeremiah 或 these others 也是如此。

    但我无法在我的 55.0.2883.95 和 mac 上的 57.0.2954.0 上重现...

    也许这是一个复活节彩蛋。

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

    【讨论】:

    • Lol Web API 中的复活节彩蛋,这就是东西!就像答案一样
    • 确认它还与 Jeremiah 一起放入 chapter
    【解决方案2】:

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

    说明

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

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

    建议

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

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

    【讨论】:

      猜你喜欢
      • 2020-06-03
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-12
      • 2011-06-06
      • 1970-01-01
      • 2021-04-28
      相关资源
      最近更新 更多