Web Speech API Обнаружение известных слов

Я нахожусь в процессе разработки приложения, которое может определять определенные ключевые слова. Я использую Googles Web Speech.

Я могу записать голос пользователя и распечатать его, но я хочу иметь возможность распознавать определенные слова.

Кажется, я не могу найти способ сделать это. Я нашел этот вопрос Обнаружение известных слов с помощью 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]);
        }
}

person ronoc4    schedule 05.07.2016    source источник


Ответы (3)


Вы категорически не можете каким-либо образом изменять API, чтобы добавлять словари или влиять на результаты.

ОДНАКО вы можете свести результаты к словам, которые фонетически похожи, чтобы повлиять на интерпретацию вашего кода.

На данный момент вы, кажется, выполняете «точные» совпадения для определенных слов. Поэтому, если движок думает, что слышит «тайский» вместо «галстук»… такой результат не даст совпадения.

Решение состоит в том, чтобы добавить «нечеткость» к логике сопоставления. Вы рассматривали такую ​​библиотеку, как FuzzySet.js?

Вы можете найти еще много примеров, выполнив поиск по запросу «нечеткое сопоставление строк JS» или «фонетически похожий JS».

person 1owk3y    schedule 05.07.2016
comment
Это отличная замена ошибочной ошибке грамматики, о которой говорилось выше. Спасибо! - person Julian Dormon; 08.03.2021

В функции MatchingKeyWords внутри цикла for Измените keyWords[1] на keyWords[i], затем попробуйте. Также измените условие if на

if(conversation.indexof(keyWords[i]) > -1)
person Imran Mohammed    schedule 03.10.2016

Я вижу, что этому вопросу восемь месяцев, и вы, вероятно, уже нашли ответ, но на случай, если кто-то еще ищет — я думаю, вам нужно дать приложению некоторую «грамматику» для проверки, например:

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, которая похожа на то, что вы пытаетесь сделать (если я правильно понимаю). Вы читаете фразу вслух, и она говорит вам, понята ли она.

http://mdn.github.io/web-speech-api/phrase-matcher/

person Luisa de Miranda    schedule 10.03.2017
comment
Существует ошибка Chromium, которая делает использование грамматик бесполезным. stackoverflow.com/questions/41373579/ - person Julian Dormon; 08.03.2021