SQL数据库VB.net中的语音识别

kaa*_*y03 7 sql database vb.net speech-recognition speech

我有一个SQL数据库应用程序,我想要合并语音搜索功能.我已经知道如何搜索数据库,但我不知道如何从数据库中的表格中创建语法.到目前为止,这是我的代码.

Dim WithEvents reco As New Recognition.SpeechRecognitionEngine


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    reco.SetInputToDefaultAudioDevice()

    Dim gram As New Recognition.SrgsGrammar.SrgsDocument

    Dim RecipeRule As New Recognition.SrgsGrammar.SrgsRule("recipe")

    Dim colorsList As New Recognition.SrgsGrammar.SrgsOneOf(DataSet1.Table.ToString)

    RecipeRule.Add(colorsList)

    gram.Rules.Add(RecipeRule)

    gram.Root = RecipeRule

    reco.LoadGrammar(New Recognition.Grammar(gram))

    reco.RecognizeAsync()

End Sub

Private Sub reco_RecognizeCompleted(ByVal sender As Object, ByVal e As System.Speech.Recognition.RecognizeCompletedEventArgs) Handles reco.RecognizeCompleted

    reco.RecognizeAsync()

End Sub

Private Sub reco_SpeechRecognized(ByVal sender As Object, ByVal e As System.Speech.Recognition.RecognitionEventArgs) Handles reco.SpeechRecognized
    Try
        Me.TableTableAdapter.Recipe(Me.DataSet1.Table, e.Result.Text & "%")
    Catch ex As System.Exception
        System.Windows.Forms.MessageBox.Show(ex.Message)
    End Try
End Sub
Run Code Online (Sandbox Code Playgroud)

我需要在DataSet1中的配方行中创建项目.Table the grammar.

mei*_*n99 1

SrgsOneOf有一个接受 astring[]作为参数的构造函数:https://msdn.microsoft.com/en-us/library/ms554280 (v=vs.110).aspx

您当前的代码尝试将表转换为字符串,但这是行不通的。相反,您可以通过迭代表来创建字符串数组。

从帖子中不清楚该表是否包含单个单词/短语作为行,或者包含单词/短语列表的单行。

假设每一行都有一个单词或短语

例子:

DataTable
---------
red
green
blue
indigo
Run Code Online (Sandbox Code Playgroud)

有多种方法可以做到这一点(创建 ArrayList、使用 LINQ),但这里有一个非常基本的方法:

Dim rowCount As Integer = DataSet1.Table.Rows.Count
Dim arrWords(rowCount) As String 
For i = 0 to rowCount - 1 
  arrWords(i)=DataSet1.Table.Rows(i)(0).ToString();
Next

Dim colorsList As New Recognition.SrgsGrammar.SrgsOneOf(arrWords)
Run Code Online (Sandbox Code Playgroud)

假设有一行包含所有单词/短语

在这种情况下,我将假设它们是用逗号分隔的。

例子:

DataTable
---------
red,green,blue,indigo
Run Code Online (Sandbox Code Playgroud)

在这种情况下,只需使用 Split 创建一个数组:

Dim strWords as String = DataSet1.Table.Rows(i)(0).ToString()
Dim arrwords As String() = strWords.Split(New Char() {","c})

Dim colorsList As New Recognition.SrgsGrammar.SrgsOneOf(arrWords)
Run Code Online (Sandbox Code Playgroud)