Ошибки пунктуации при распознавании потоков с помощью Cloud Speech API и DialogFlow - PullRequest
0 голосов
/ 03 февраля 2019

Я создал клиент NodeJS DialogFlow с потоковым распознаванием речи.Это прекрасно работает для меня, за исключением того, что облачный Speech API неправильно указывает на мои запросы, когда я говорю «точка».Например, я задам вопрос типа: "when does first period end", и он будет исправлен на "when does first. End", что может быть чрезвычайно сложно обойти.

Есть ли способ заставить Cloud Speech API прекратить преобразовывать это,или есть способ изучить альтернативы перед отправкой запроса в DialogFlow?

У меня отключен enableAutomaticPunctuation, но он все еще добавляет знаки пунктуации, когда я диктую знак пунктуации, такой как "запятая" или "period. "

Вот мой код для клиента DialogFlow:

const projectId = 'foo';
const sessionId = 'bar'

const languageCode = 'en-US';

const pump = require('pump');
const through2 = require('through2')

const record = require('node-record-lpcm16');

// Instantiate a DialogFlow client.
const dialogflow = require('dialogflow');
const sessionClient = new dialogflow.SessionsClient();

// The encoding of the audio file, e.g. 'AUDIO_ENCODING_LINEAR16'
const encoding = 'AUDIO_ENCODING_LINEAR16';

// The sample rate of the audio file in hertz, e.g. 16000
const sampleRateHertz = 16000;

// The BCP-47 language code to use, e.g. 'en-US'

let sessionPath = sessionClient.sessionPath(projectId, sessionId);

const initialStreamRequest = {
  session: sessionPath,
  queryParams: {
    session: sessionClient.sessionPath(projectId, sessionId),
  },
  queryInput: {
    audioConfig: {
      audioEncoding: encoding,
      maxAlternatives: 4,
      sampleRateHertz: sampleRateHertz,
      languageCode: languageCode,
    },
    singleUtterance: true,
  },
};

// Create a stream for the streaming request.
const detectStream = sessionClient
  .streamingDetectIntent()
  .on('error', console.error)
  .on('data', data => {
    if (data.recognitionResult) {

      console.log(data);

      if(data.recognitionResult.isFinal) {

        record.stop();

      }

    } else {

      logQueryResult(sessionClient, data.queryResult);

    }
  });

// Write the initial stream request to config for audio input.
detectStream.write(initialStreamRequest);

const recordingAudio = record
  .start({
    sampleRateHertz: sampleRateHertz,
    threshold: 0,
    // Other options, see https://www.npmjs.com/package/node-record-lpcm16#options
    verbose: false,
    recordProgram: 'rec', // Try also "arecord" or "sox"
    silence: '10.0'
  }).on('error', console.error);

//Streams the microphone to it
pump(
  recordingAudio,
  // Format the audio stream into the request format.
  through2.obj((obj, _, next) => {
    next(null, {inputAudio: obj});
  }),
  detectStream
);

function logQueryResult(sessionClient, result) {
  // Imports the Dialogflow library
  const dialogflow = require('dialogflow');

  // Instantiates a context client
  const contextClient = new dialogflow.ContextsClient();

  if (result) {

    console.log(result.Alternatives);

    console.log(`  Query: ${result.queryText}`);
    console.log(`  Response: ${result.fulfillmentText}`);
    if (result.intent) {
      console.log(`  Intent: ${result.intent.displayName}`);
    } else {
      console.log(`  No intent matched.`);
    }

  }

}

А вот пример запроса потоковой речи:

{ responseId: '',
  recognitionResult: { messageType: 'TRANSCRIPT', transcript: 'why', isFinal: false },
  queryResult: null,
  webhookStatus: null }
{ responseId: '',
  recognitionResult: { messageType: 'TRANSCRIPT', transcript: 'when', isFinal: false },
  queryResult: null,
  webhookStatus: null }
{ responseId: '',
  recognitionResult: 
   { messageType: 'TRANSCRIPT',
     transcript: 'when do',
     isFinal: false },
  queryResult: null,
  webhookStatus: null }
{ responseId: '',
  recognitionResult: 
   { messageType: 'TRANSCRIPT',
     transcript: 'when does',
     isFinal: false },
  queryResult: null,
  webhookStatus: null }
{ responseId: '',
  recognitionResult: 
   { messageType: 'TRANSCRIPT',
     transcript: 'when does fall',
     isFinal: false },
  queryResult: null,
  webhookStatus: null }
{ responseId: '',
  recognitionResult: 
   { messageType: 'TRANSCRIPT',
     transcript: 'when does for',
     isFinal: false },
  queryResult: null,
  webhookStatus: null }
{ responseId: '',
  recognitionResult: 
   { messageType: 'TRANSCRIPT',
     transcript: 'when does far',
     isFinal: false },
  queryResult: null,
  webhookStatus: null }
{ responseId: '',
  recognitionResult: 
   { messageType: 'TRANSCRIPT',
     transcript: 'when does first',
     isFinal: false },
  queryResult: null,
  webhookStatus: null }
{ responseId: '',
  recognitionResult: 
   { messageType: 'TRANSCRIPT',
     transcript: 'when does first',
     isFinal: false },
  queryResult: null,
  webhookStatus: null }
{ responseId: '',
  recognitionResult: 
   { messageType: 'TRANSCRIPT',
     transcript: 'when does first',
     isFinal: false },
  queryResult: null,
  webhookStatus: null }
{ responseId: '',
  recognitionResult: 
   { messageType: 'TRANSCRIPT',
     transcript: 'when does 1st Peter',
     isFinal: false },
  queryResult: null,
  webhookStatus: null }
{ responseId: '',
  recognitionResult: 
   { messageType: 'TRANSCRIPT',
     transcript: 'when does first.',
     isFinal: false },
  queryResult: null,
  webhookStatus: null }
{ responseId: '',
  recognitionResult: 
   { messageType: 'TRANSCRIPT',
     transcript: 'when does first. End',
     isFinal: false },
  queryResult: null,
  webhookStatus: null }
{ responseId: '',
  recognitionResult: 
   { messageType: 'TRANSCRIPT',
     transcript: 'when does first. End to',
     isFinal: false },
  queryResult: null,
  webhookStatus: null }
{ responseId: '',
  recognitionResult: 
   { messageType: 'TRANSCRIPT',
     transcript: 'when does first. End today',
     isFinal: false },
  queryResult: null,
  webhookStatus: null }
{ responseId: '',
  recognitionResult: 
   { messageType: 'TRANSCRIPT',
     transcript: 'when does first. End today',
     isFinal: false },
  queryResult: null,
  webhookStatus: null }
{ responseId: '',
  recognitionResult: 
   { messageType: 'TRANSCRIPT',
     transcript: 'when does first. End today',
     isFinal: false },
  queryResult: null,
  webhookStatus: null }
{ responseId: '',
  recognitionResult: 
   { messageType: 'TRANSCRIPT',
     transcript: 'when does first. End today',
     isFinal: true },
  queryResult: null,
  webhookStatus: null }
undefined
  Query: when does first. End today
  Response: There is no Period 1 on Saturdays.
  Intent: Bell Schedule

Как я могуотключить автокоррекцию этой пунктуации перед отправкой строки в DialogFlow?Спасибо за тонну!

...