3

我想做一个函数IsWordPronounceable(SomeWord:String): boolean; “英语语言” 我正在使用 SAPI 语音识别,我需要这个功能。我使用 delphi 编译器、C/C#/C++ 或任何语言都可以。请帮忙。我不知道如何开始...

从一开始,我就认为添加语法规则可以解决问题。该场景是突出显示对用户说的文本。但引擎无法识别不发音的单词。

4

4 回答 4

4

这并不容易做到。我这样做的方法是进行一些简单的统计分析。

首先下载一本英语单词词典(或任何语言,真的——你只需要一本“可发音的”单词词典)。然后,将字典中的每个单词分解成 3 个字母的块。所以给定“字典”这个词,你可以把它分解成“dic”、“ict”、“cti”、“tio”、“ion”、“ona”、“nar”和“ary”。然后将字典中所有单词中的每个三字母块添加到一个集合中,该集合将三字母块映射到它出现的次数。像这样的东西:

“dic”-> 36365
“ict”-> 2721
“cti”-> 532

依此类推......接下来,通过将每个数字除以字典中的单词总数来规范化数字。这样,您就可以将三字母组合映射到字典中包含该三字母组合的单词的百分比。

最后,实现你的IsWordPronounceable方法是这样的:

bool IsWordPronounceable(string word)
{
    string[] threeLetterBlocks = BreakIntoThreeLetterBlocks(word);
    foreach(string block in threeLetterBlocks)
    {
        if (blockFrequency[block] < THRESHOLD)
            return false;
    }
    return true;
}

显然,您需要“调整”一些参数。参数是 1,块的THRESHOLD大小也可能是 2 或 3 或 4 等更好。我认为,它需要一些按摩才能使它正确。

于 2010-05-27T06:51:22.743 回答
1

只是一个想法(也许很疯狂):我从未尝试过。
您可以将 Text-To-Speech 的输出输入到 Speech-To-Text 的输入中吗?
然后在一个完美的世界中,任何最终无法识别(或不匹配)的东西都是不可发音的。

于 2010-05-27T16:54:29.243 回答
0

此功能通常由语音引擎本身处理。如果您的目标只是让文本到语音引擎来发音某些东西并拼写其他东西,那么默认以外的语音引擎可能会做足够的工作。以Acapela为例。

要自己编写这个功能,我会先实现低垂的果实。

  • 检查输入的数字/不可发音的字符,如果找到则失败
  • 根据字典检查输入,如果找到则通过

类似于 codeka 解决方案的更高级技术是构建一个有效音节模式列表,然后将您的输入与它们匹配。可能还有更复杂的技术,但要到那里你需要熟悉语言学

于 2010-05-27T07:15:08.640 回答
-2

这意味着您不能只使用文本转语音,但您还需要检查给出的单词是否符合语言。您还需要将训练引擎之类的东西用于文本到语音的数据。以便该数据可用于您的功能。

如果你只想检查单词的正确性(我的意思是不说话,只检查单词的有效性),那么codeka给出的答案是相当酷的。您可以从特定语言的字典中查看它。

谢谢。

于 2010-05-27T06:57:14.427 回答