Я использую Google Speech-to-Text API для преобразования аудио файла в текст. Он может идентифицировать ораторов, что действительно круто, но он форматирует информацию так, что у меня возникают проблемы. Вот их документы о разделении динамиков.
Моя цель - создать единую строку, разделяющую строки по динамикам, что-то вроде этого:
Speaker1: Hello Tom
Speaker2: Howdy
Speaker1: How was your weekend
Если Я посылаю аудио файл для расшифровки, я получаю что-то вроде этого:
wordsObjects =
[
{
startTime: { seconds: '1'},
endTime: { seconds: '1'},
word: 'Hello',
speakerTag: 1
},
{
startTime: { seconds: '2'},
endTime: { seconds: '2'},
word: 'Tom',
speakerTag: 1
},
]
Конечно, для каждого слова есть объект, я просто хочу сэкономить место. Все, что Том говорит в этом примере, должно быть представлено как speakerTag: 2
Вот самое близкое, что я получил до сих пор:
const unformattedTranscript = wordsObjects.map((currentWord, idx, arr) => {
if (arr[idx + 1]) {
if (currentWord.speakerTag === arr[idx + 1].speakerTag) {
return [currentWord.word, arr[idx + 1].word];
} else {
return ["SPEAKER CHANGE"];
}
}
});
const formattedTranscript = unformattedTranscript.reduce(
(acc, wordArr, idx, arr) => {
if (arr[idx + 1]) {
if (wordArr[wordArr.length - 1] === arr[idx + 1][0]) {
wordArr.pop();
acc.push(wordArr.concat(arr[idx + 1]));
} else {
acc.push(["\n"]);
}
}
return acc;
},
[]
);
Это решение не работает, если говорящий говорит более двух слова подряд. Мне удалось полностью запутаться в этом, поэтому я бы с удовольствием подтолкнул в правильном направлении.
Заранее благодарен за любой совет.