Если я правильно понимаю вас, вы хотите, чтобы ваш клиент получил LexResponse и обрабатывал его в клиенте, а не в Lambda или backend API. Если это правильно, вы можете попробовать следующую реализацию Lex-Audio.
// This will handle the event when the mic button is clicked on your UI.
scope.audioClick = function () {
// Cognito Credentials for Lex Runtime Service
AWS.config.credentials = new AWS.CognitoIdentityCredentials(
{ IdentityPoolId: Settings.AWSIdentityPool },
{ region: Settings.AWSRegion }
);
AWS.config.region = Settings.AWSRegion;
config = {
lexConfig: { botName: Settings.BotName }
};
conversation = new LexAudio.conversation(config, function (state) {
scope.$apply(function () {
if (state === "Passive") {
scope.placeholder = Settings.PlaceholderWithMic;
}
else {
scope.placeholder = state + "...";
}
});
}, chatbotSuccess
, function (error) {
audTextContent = error;
}, function (timeDomain, bufferLength) {
});
conversation.advanceConversation();
};
Функция успеха, вызванная после ответа Лекса, выглядит следующим образом:
chatbotSuccess = function (data) {
var intent = data.intent;
var slots = data.slots;
// Do what you need with this data
};
Надеюсь, это даст вам некоторое представление о том, что вам нужно сделать. Если вам нужна ссылка для Lex-Audio, есть замечательная статья об этом в блоге Amazon, которую вы должны проверить: https://aws.amazon.com/blogs/machine-learning/capturing-voice- вход-в-браузере /
Ваши ключи словаря не могут быть списками †. Вы, вероятно, хотите строки, а не списки с одним элементом.
то есть. 'Jane'
вместо ['Jane']
.
Вы можете использовать словарь-понимание; итерация со второго подсписка и далее. Мы также используем списки для преобразования оценок в целые числа.
{name:[int(score) for score in scores] for name,*scores in student_grades[1:]}
, что дает:
{
"Jane": [
100,
90,
80
],
"John": [
88,
99,
111
],
"David": [
45,
56,
67
]
}
† Причина, по которой вы не можете иметь списки в качестве ключей для словарей, потому что они не не могут быть обработаны . Словарь - это, по сути, хеш-таблица, в которой элементы хранятся в ячейках памяти, связанных с их хэшами, так что вы можете быстро «искать» элемент в словаре. Однако это работает только в том случае, если каждый ключ может быть хеширован , а список - нет. Почему не может это? Потому что хеш должен учитывать все составляющие элемента объекта и не должен изменяться. Однако элементы списка могут измениться, потому что это изменяемая структура данных (в отличие от неизменяемой строки или кортежа и т. Д.), Следовательно, он не может надежно вычислять тот же хэш, поэтому не может / не может реализовать эту функциональность.
#Convert digits in string to numbers.
student_grades_int = [[int(i) if i.isdigit() else i for i in myList] for myList in student_grades]
student_grades_int = student_grades_int[1:]
#Using list comprehensions to create the structure.
student_grades_final = {[x for x in myList if isinstance(x, str)][0]:[x for x in myList if isinstance(x, int)] for myList in student_grades_int}
student_grades_final
{'David': [45, 56, 67], 'Jane': [100, 90, 80], 'John': [88, 99, 111]}