おそらく、句バンクの音節分割アルゴリズムから始めます。子供たちに音節を分割することを教える簡単なリソースを使用して、大まかな分割方法を作成することもできます。
http://www.ewsdonline.org/education/components/scrapbook/default.php?sectiondetailid=7584
より技術的で完全に正確な方法が必要な場合は、博士号がありました。それを行う方法についての論文:
http://www.tug.org/docs/liang/
次に、自分でロールするものまたは metaphone() を使用して、各音節を音声表現に変換します。母音の規則を説明している同様のサイトを使用できます。これらは一般化にすぎません。独自にロールする場合は、子音とは別に母音を処理します。Metaphone は子音のみを使用します。これは問題ありませんが、母音も考慮した場合ほどクールではありません。
母音:
http://www.eslgold.com/pronunciation/english_vowel_sounds.html
子音:
http://usefulenglish.ru/phonetics/english-consonant-sounds
次に、単語バンク用の英単語の辞書があります。MySQL テーブルに貼り付けることができるオープンソースの辞書が多数あります。
最初の音節から始めて、soundex テストに一致する単語を辞書でランダムに探します。見つからない場合 (これは通常、1 つの音節の単語のみを検索します)、追加の音節を追加して、再度検索します。
例:
「論理的帰結」
A. 音節分割
「論理的帰結」
B. 適用された母音
「lah gee cahl con see quince」
C.子音の適用
「lah jee kahl kon see quinse」
D. サウンドテキスト テスト (1 音節の soundex - 推測するのは明らかに簡単ですが、概念を証明します)
「ロージーコールコンシークインツ」
Soundex strcmp は数値を返します。したがって、必要に応じて、単語バンク内のすべてのサウンドの値を事前に取得できます。その後、すぐに strcmp を実行できます。
Soundex MySQL 比較の例は次のとおりです。
select strcmp(soundex('lah'), soundex('law'));
大規模なデータベースからランダムな結果が必要で、辞書テーブルのフィールドに既に soundex 値を取得している場合は、PHP soundex テストよりも MySQL soundex を使用する方が簡単だと思います。
私の提案は非効率的かもしれませんが、最適化は別の問題です。
アップデート:
私の解決策が 1 音節の単語しか生成しないことを意味するつもりはありませんでした。例として 1 つの音節を使用しましたが、2 つの音節を一緒にすると、複数の音節の一致が得られます。実際、すべての音節を一緒に詰め込み、mysql で soundex を実行することから始めることもできます。あなたが答えを見つけたら、素晴らしいです。ただし、可能な限り最長の一致が得られるまで、音節をロールオフできます。次に、フレーズの終わりが残っているので、それらをまとめて試合を行うことができます。それが他の貢献者からの以下のソリューションの本質だと思いますが、スペースなしですべての文字を一緒に詰め込まないようにする必要があると思います. 英語では、そのように情報を失うことになります。「th」の音で始まるフレーズを考えてみましょう。フレーズを詰め込むと、どの「th」が失われますか 音が必要です。「テルミン」(楽器)は、「あれ、男」とは違う「目」の音を持っています。