3

関数IsWordPronounceable(SomeWord:String): boolean;を作成したいと思います。「英語」 私は SAPI 音声認識を使用しており、この機能が必要です。Delphi コンパイラ、C/C#/C++、または任意の言語を使用しています。助けてください。どうやって始めればいいのかわからない...

最初から、文法規則を追加することで問題を解決できると思っていました。シナリオは、ユーザーに言われているテキストを強調表示することです。しかし、エンジンは発音できない単語を認識できません。

4

4 に答える 4

4

これを行うのは簡単ではありません。私がそれを行う方法は、単純な統計分析を使用することです。

英単語の辞書をダウンロードすることから始めます (または、実際には任意の言語 - 「発音可能な」単語の辞書が必要です)。次に、辞書の各単語を 3 文字のブロックに分割します。したがって、「辞書」という単語を考えると、「dic」、「ict」、「cti」、「tio」、「ion」、「ona」、「nar」、および「ary」に分割できます。次に、辞書内のすべての単語の各 3 文字ブロックを、3 文字ブロックを出現回数にマップするコレクションに追加します。このようなもの:

"dic" -> 36365
"ict" -> 2721
"cti" -> 532

などなど... 次に、各数値を辞書内の単語の総数で割って、数値を正規化します。このようにして、3 文字の組み合わせを、その 3 文字の組み合わせを含む辞書内の単語の割合にマッピングします。

最後に、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

この機能は通常、音声エンジン自体によって処理されます。テキスト読み上げエンジンに何かを発音させ、別の文字を綴らせることが目的である場合は、デフォルト以外の音声認識エンジンで十分に機能する可能性があります。たとえば、アカペラをチェックしてください。

この機能を自分で作成するには、最初に容易に達成できる目標を達成します。

  • 数字/発音できない文字の入力をチェックし、見つかった場合は失敗します
  • 単語の辞書に対して入力をチェックし、見つかった場合はパスします

codeka のソリューションに似たより高度な手法は、有効な音節パターンのリストを作成し、入力をそれらに対して照合することです。もっと複雑なテクニックがあるかもしれませんが、そこに行くには言語学に精通する必要があります。

于 2010-05-27T07:15:08.640 に答える
-2

これは、テキスト読み上げだけを使用することはできませんが、指定された単語が言語どおりに適切であるかどうかも確認する必要があることを意味します。また、テキスト読み上げデータにはトレーニング エンジンのようなものを使用する必要があります。そのデータが関数に使用できるようにします。

単語の正確性のみを確認したい場合 (つまり、音声がないことを意味し、単語の有効性のみを確認します)、codekaが提供する回答は非常にクールです。特定の言語の辞書から確認できます。

ありがとう。

于 2010-05-27T06:57:14.427 に答える