2016-07-05 8 views
0

Я занимаюсь разработкой приложения, которое может обнаруживать определенные ключевые слова. Я использую googles web speech.Web Speech API «Обнаружение известных слов»

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

Я не могу найти способ сделать это. Я нашел этот вопрос Detecting known words using the Web Speech API, но сайт в ответе, на который он ссылается, ушел.

Может ли кто-нибудь пролить свет на это? любая помощь была бы большой. Ура! here is a fiddle

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]); 
     } 
} 

ответ

0

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

HOWEVER Вы можете свести результаты к словам, которые фонетически подобны влиянию на интерпретацию вашего кода.

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

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

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

1

В matchingKeyWords функционирует внутри цикл Пожалуйста измените нужные слова [1] Ключевые слова [я] затем попробуйте. Кроме того, если изменить условие

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

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