private SpeechRecognitionEvent ParseRecognizeResponse(IDictionary resp) { if (resp == null) { return(null); } try { List <SpeechRecognitionResult> results = new List <SpeechRecognitionResult>(); IList iresults = resp["results"] as IList; if (iresults == null) { return(null); } foreach (var r in iresults) { IDictionary iresult = r as IDictionary; if (iresults == null) { continue; } SpeechRecognitionResult result = new SpeechRecognitionResult(); result.final = (bool)iresult["final"]; IList iwordAlternatives = iresult["word_alternatives"] as IList; if (iwordAlternatives != null) { List <WordAlternativeResults> wordAlternatives = new List <WordAlternativeResults>(); foreach (var w in iwordAlternatives) { IDictionary iwordAlternative = w as IDictionary; if (iwordAlternative == null) { continue; } WordAlternativeResults wordAlternativeResults = new WordAlternativeResults(); if (iwordAlternative.Contains("start_time")) { wordAlternativeResults.start_time = (double)iwordAlternative["start_time"]; } if (iwordAlternative.Contains("end_time")) { wordAlternativeResults.end_time = (double)iwordAlternative["end_time"]; } if (iwordAlternative.Contains("alternatives")) { List <WordAlternativeResult> wordAlternativeResultList = new List <WordAlternativeResult>(); IList iwordAlternativeResult = iwordAlternative["alternatives"] as IList; if (iwordAlternativeResult == null) { continue; } foreach (var a in iwordAlternativeResult) { WordAlternativeResult wordAlternativeResult = new WordAlternativeResult(); IDictionary ialternative = a as IDictionary; if (ialternative.Contains("word")) { wordAlternativeResult.word = (string)ialternative["word"]; } if (ialternative.Contains("confidence")) { wordAlternativeResult.confidence = (double)ialternative["confidence"]; } wordAlternativeResultList.Add(wordAlternativeResult); } wordAlternativeResults.alternatives = wordAlternativeResultList.ToArray(); } wordAlternatives.Add(wordAlternativeResults); } result.word_alternatives = wordAlternatives.ToArray(); } IList ialternatives = iresult["alternatives"] as IList; if (ialternatives != null) { List <SpeechRecognitionAlternative> alternatives = new List <SpeechRecognitionAlternative>(); foreach (var a in ialternatives) { IDictionary ialternative = a as IDictionary; if (ialternative == null) { continue; } SpeechRecognitionAlternative alternative = new SpeechRecognitionAlternative(); alternative.transcript = (string)ialternative["transcript"]; if (ialternative.Contains("confidence")) { alternative.confidence = (double)ialternative["confidence"]; } if (ialternative.Contains("timestamps")) { IList itimestamps = ialternative["timestamps"] as IList; TimeStamp[] timestamps = new TimeStamp[itimestamps.Count]; for (int i = 0; i < itimestamps.Count; ++i) { IList itimestamp = itimestamps[i] as IList; if (itimestamp == null) { continue; } TimeStamp ts = new TimeStamp(); ts.Word = (string)itimestamp[0]; ts.Start = (double)itimestamp[1]; ts.End = (double)itimestamp[2]; timestamps[i] = ts; } alternative.Timestamps = timestamps; } if (ialternative.Contains("word_confidence")) { IList iconfidence = ialternative["word_confidence"] as IList; WordConfidence[] confidence = new WordConfidence[iconfidence.Count]; for (int i = 0; i < iconfidence.Count; ++i) { IList iwordconf = iconfidence[i] as IList; if (iwordconf == null) { continue; } WordConfidence wc = new WordConfidence(); wc.Word = (string)iwordconf[0]; wc.Confidence = (double)iwordconf[1]; confidence[i] = wc; } alternative.WordConfidence = confidence; } alternatives.Add(alternative); } result.alternatives = alternatives.ToArray(); } IDictionary iKeywords = iresult["keywords_result"] as IDictionary; if (iKeywords != null) { result.keywords_result = new KeywordResults(); List <KeywordResult> keywordResults = new List <KeywordResult>(); foreach (string keyword in Keywords) { if (iKeywords[keyword] != null) { IList iKeywordList = iKeywords[keyword] as IList; if (iKeywordList == null) { continue; } foreach (var k in iKeywordList) { IDictionary iKeywordDictionary = k as IDictionary; KeywordResult keywordResult = new KeywordResult(); keywordResult.keyword = keyword; keywordResult.confidence = (double)iKeywordDictionary["confidence"]; keywordResult.end_time = (double)iKeywordDictionary["end_time"]; keywordResult.start_time = (double)iKeywordDictionary["start_time"]; keywordResult.normalized_text = (string)iKeywordDictionary["normalized_text"]; keywordResults.Add(keywordResult); } } } result.keywords_result.keyword = keywordResults.ToArray(); } results.Add(result); } return(new SpeechRecognitionEvent(results.ToArray())); } catch (Exception e) { Log.Error("SpeechToText.ParseRecognizeResponse()", "ParseJsonResponse exception: {0}", e.ToString()); return(null); } }
private SpeechResultList ParseRecognizeResponse(IDictionary resp) { if (resp == null) { return(null); } try { List <SpeechResult> results = new List <SpeechResult>(); IList iresults = resp["results"] as IList; if (iresults == null) { return(null); } foreach (var r in iresults) { IDictionary iresult = r as IDictionary; if (iresults == null) { continue; } SpeechResult result = new SpeechResult(); result.Final = (bool)iresult["final"]; IList ialternatives = iresult["alternatives"] as IList; if (ialternatives == null) { continue; } List <SpeechAlt> alternatives = new List <SpeechAlt>(); foreach (var a in ialternatives) { IDictionary ialternative = a as IDictionary; if (ialternative == null) { continue; } SpeechAlt alternative = new SpeechAlt(); alternative.Transcript = (string)ialternative["transcript"]; if (ialternative.Contains("confidence")) { alternative.Confidence = (double)ialternative["confidence"]; } if (ialternative.Contains("timestamps")) { IList itimestamps = ialternative["timestamps"] as IList; TimeStamp[] timestamps = new TimeStamp[itimestamps.Count]; for (int i = 0; i < itimestamps.Count; ++i) { IList itimestamp = itimestamps[i] as IList; if (itimestamp == null) { continue; } TimeStamp ts = new TimeStamp(); ts.Word = (string)itimestamp[0]; ts.Start = (double)itimestamp[1]; ts.End = (double)itimestamp[2]; timestamps[i] = ts; } alternative.Timestamps = timestamps; } if (ialternative.Contains("word_confidence")) { IList iconfidence = ialternative["word_confidence"] as IList; WordConfidence[] confidence = new WordConfidence[iconfidence.Count]; for (int i = 0; i < iconfidence.Count; ++i) { IList iwordconf = iconfidence[i] as IList; if (iwordconf == null) { continue; } WordConfidence wc = new WordConfidence(); wc.Word = (string)iwordconf[0]; wc.Confidence = (double)iwordconf[1]; confidence[i] = wc; } alternative.WordConfidence = confidence; } alternatives.Add(alternative); } result.Alternatives = alternatives.ToArray(); results.Add(result); } return(new SpeechResultList(results.ToArray())); } catch (Exception e) { Log.Error("SpeechToText", "ParseJsonResponse exception: {0}", e.ToString()); return(null); } }