2017-01-27 13 views
7

Mam aplikację bazy danych SQL i chcę włączyć funkcję wyszukiwania głosowego. Już wiem, jak przeszukiwać bazę danych, ale nie wiem, jak utworzyć gramatykę z tabeli w mojej bazie danych. Oto mój kod do tej pory.Rozpoznawanie mowy w bazie danych 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 

Potrzebuję wykonać elementy w wierszu receptury w DataSet1. Ustaw gramatykę.

Odpowiedz

1

SrgsOneOf ma konstruktora, który pobiera string[] jako parametr: https://msdn.microsoft.com/en-us/library/ms554280(v=vs.110).aspx

Twój aktualny kod próbuje przekształcić tablicę na ciąg znaków, który nie będzie działać. Zamiast tego możesz utworzyć tablicę łańcuchów, powtarzając tabelę.

Z postu nie wynika, czy tabela zawiera pojedyncze słowa/wyrażenia jako wiersze, czy pojedynczy wiersz z listą słów/wyrażeń.

Zakładając, każdy wiersz ma słowo lub frazę

Przykład:

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

Istnieje wiele sposobów, aby to zrobić (tworzenie ArrayList przy użyciu LINQ), ale tutaj jest to bardzo prosty sposób:

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) 

Zakładając, że istnieje jeden wiersz zawierający wszystkie słowa/wyrażenia

W tym przypadku zamierzam założyć, że są one rozdzielane przecinkami.

przykład:

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

W tym przypadku, wystarczy użyć Split w celu utworzenia tablicy:

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) 
Powiązane problemy