2017-01-27 10 views
7

У меня есть приложение базы данных SQL, и я хочу включить функцию голосового поиска. Я уже знаю, как искать базу данных, но я не знаю, как я могу сделать грамматику из таблицы в моей базе данных. Вот мой код.Распознавание речи в базе данных SQL VB.net

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 

Мне нужно сделать элементы в строке рецепта в DataSet1.Table грамматики.

ответ

1

SrgsOneOf имеет конструктор, который принимает в качестве параметра string[]: https://msdn.microsoft.com/en-us/library/ms554280(v=vs.110).aspx

Ваш текущий код пытается преобразовать таблицу в строку, которая не будет работать. Вместо этого вы можете создать массив строк, перебирая таблицу.

Непонятно из сообщения, содержит ли таблица отдельные слова/фразы в виде строк или одиночную строку со списком слов/фраз.

Предполагая, что в каждой строке есть слово или фразу

Пример:

DataTable 
--------- 
red 
green 
blue 
indigo 

Есть несколько способов сделать это (создавая 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) 

Предполагая, что есть одна строка, содержащая все слова/фразы

В этом случае я собираюсь предположить, что они разделены запятой.

Пример:

DataTable 
--------- 
red,green,blue,indigo 

В этом случае, просто использовать 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) 

 Смежные вопросы

  • Нет связанных вопросов^_^