Web Speech API "Обнаружение известных слов"
Я нахожусь в процессе разработки приложения, которое может определять определенные ключевые слова. Я использую веб-речь Google.
Я могу записать голос пользователя и распечатать его, но я хочу быть в состоянии обнаружить определенные слова.
Я не могу найти способ сделать это. Я нашел этот вопрос Обнаружение известных слов с помощью Web Speech API, но сайт в ответе, на который он ссылается, пропал.
Кто-нибудь может пролить свет на это? любая помощь будет отличной. Ура! вот скрипка
var recognition = new webkitSpeechRecognition(); // google voice recognition start
recognition.continuous = true; //so that recognition will continue even if the user pauses while speaking
document.getElementById('startSpeech').addEventListener('click', function() {
startSpeech();
});
document.getElementById('stopRecognizing').addEventListener('click', function() {
stopRecognizing();
});
var startSpeech = function(){
var lang = ['en-GB', 'United Kingdom'];
final_transcript = '';
recognition.lang = recognition.lang
recognition.start() //activates the speech recognizer
}
var stopRecognizing = function(){
recognition.stop();//stops the mic from listening
return;
}
recognition.onresult = function(event) {
console.log('event', event);
// This handler concatenates all
// the results received so far into two strings final_transcript & interim_transcript
var interim_transcript = '';
for (var i = event.resultIndex; i < event.results.length; ++i) {
if (event.results[i].isFinal) {
final_transcript += event.results[i][0].transcript;
} else {
interim_transcript += event.results[i][0].transcript;
}
}
//final_transcript = capitalize(final_transcript);
final_span.innerHTML = linebreak(final_transcript);
interim_span.innerHTML = linebreak(interim_transcript);
// console.log('final_transcript' , typeof final_transcript);
// console.log('interim_transcript' , interim_transcript);
if (final_transcript.length > 0) {
matchingKeyWords(final_transcript);
}
};
function linebreak(s) {
var two_line = /\n\n/g;
var one_line = /\n/g;
return s.replace(two_line, '<p></p>').replace(one_line, '<br>');
}
function capitalize(s) {
var first_char = /\S/;
return s.replace(first_char, function(m) { return m.toUpperCase(); });
}
var matchingKeyWords = function(conversation){
var keyWords = ['power', 'tie', 'imaginary' ,'bomb', 'drink', 'underwear', 'chance', 'type', 'historical',
'society' ,'collect' ,'sugar']
for (var i = 0; i < keyWords.length; ++i) {
console.log(conversation[0]);
if (conversation === keyWords[1]) {
console.log('hit');
}
// console.log('keyWords[i]', keyWords[i]);
}
}
3 ответа
Вы категорически не можете каким-либо образом изменять API, чтобы добавлять словари или влиять на результаты.
ОДНАКО вы можете свести результаты к словам, которые фонетически похожи, чтобы повлиять на интерпретацию вашего кода.
В данный момент вы выполняете "точные" совпадения для определенных слов. Так что, если двигатель думает, что слышит "тайский" вместо "галстук"... этот результат не приведет к совпадению.
Решение состоит в том, чтобы добавить "нечеткость" к соответствующей логике. Рассматривали ли вы такую библиотеку, как FuzzySet.js?
Вы можете найти множество других примеров, выполнив поиск по слову "нечеткое совпадение строк JS" или "фонетически похожий JS".
Внутри функции matchKeyWords для цикла. Измените keyWords[1] на keyWords[i], затем попробуйте. Также измените условие if на
if(conversation.indexof(keyWords[i]) > -1)
Я вижу, что этому вопросу восемь месяцев, и вы, вероятно, уже нашли ответ, но в случае, если кто-то еще ищет - я думаю, вам нужно дать приложению некоторую "грамматику" для проверки, например так:
var colors = [ 'aqua' , 'azure' , 'beige', 'bisque', 'black', 'blue', 'brown', 'chocolate', 'coral' ... ];
var grammar = '#JSGF V1.0; grammar colors; public <color> = ' + colors.join(' | ') + ' ;'
У MDN есть демо для Web Speech API, которое похоже на то, что вы пытаетесь сделать (если я правильно понимаю). Вы читаете фразу вслух, и она говорит вам, поняла ли она.