#flutter #dart #split #text-to-speech
#flutter #dart #сплит #преобразование текста в речь
Вопрос:
Пример:
var предложение = (привет, я Боб.)
var результат = [‘он’, ‘эл’, ‘лл’, ‘ло’, », ‘й’, ‘он’, ‘эр’, ‘ре’, ‘,’, ‘ ‘, ‘ Я’, », ‘есмь’, », «бо», «об», «.»]
Я нашел здесь рабочий пример, хотя он написан на Javascript, и я действительно не знаю, как использовать его для Dart, и не уверен, как будет вести себя после добавления пробелов и знаков препинания. Знаки препинания и пробелы мне всегда нужны сами по себе, а не в сочетании с буквами, они мне тоже нужны, так как я буду использовать их для добавления пауз между словами и предложениями.
Спасибо
var a = 12345678;
a= a.toString();
var arr=[];
for (var i =0; i<a.length-1; i ) {
arr.push(Number(a[i] '' a[i 1]));
}
console.log(arr);
Ответ №1:
Вы могли бы использовать регулярные выражения для разделения предложения. Например:
void main() {
var exp = RegExp('([A-Za-z]{1,2}|[,!.?s ])');
var str = "hello there, I am Bob.";
var matches = exp.allMatches(str);
for (var m in matches) {
print(m.group(0));
}
}
Это поиск букв (от А до Я или от а до я) в группах по 1 или 2, или одиночных знаков препинания (,!.?) s представляет пробел.
Выполнение вышеизложенного приведет к:
he
ll
o
th
er
e
,
I
am
Bo
b
.
Комментарии:
1. Спасибо, хотя мне это нужно так [var result = [‘он’, ‘эл’, ‘лл’, ‘ло’, », ‘й’, ‘он’, ‘эр’, ‘ре’, ‘,’, ‘ ‘, ‘ Я»,’ ‘, ‘am’, ‘ ‘, ‘bo’, ‘ob’, ‘.’]. Проверю, смогу ли я понять, как принять ваш код, если это возможно
2. Да, вместо того, чтобы печатать его, как у меня в моем примере, вы можете поместить результат в список. Это должно дать вам результат, который вы ищете.
Ответ №2:
Другой подход
void main() {
var a = "1234!5678";
a = a.toString();
var arr = [];
for (var i = 0; i < a.length - 1; i ) {
if (a[i 1] == '!') {
continue;
}
if (a[i] == '!') {
arr.add(a[i]);
continue;
}
arr.add(a[i] '' a[i 1]);
}
print(arr);
}
Я не очень разбираюсь в dart, но я написал этот простой алгоритм на dartpad, и он работает
Комментарии:
1. Спасибо, это написано в правильном коде dart или вы просто написали вариацию на JavaScript-коде? Поскольку он не работает в DartPad?
2. О, извините, мой плохой, да, это работает, спасибо, хотя все еще есть проблема, что он группирует пробелы и знаки препинания буквами, он всегда должен разделять пробелы и знаки препинания отдельно на своем собственном примере = «как я?, результат = [‘ho’,’ow’,»,’I’,’am’,’?’] . Пытаюсь понять, смогу ли я туда добраться, но это выглядит действительно многообещающе
Ответ №3:
Если у кого-то возникла такая же проблема, вот как я ее решил
void main(String string) {
var test = "I Hello there I am Bob 23!";
List<String> nameArray = test.split('');
for (int curIndex = 0; curIndex < nameArray.length; curIndex ) {
if (curIndex >= 1 amp;amp; nameArray[curIndex].contains(new RegExp(r'[a-zA-Z]')) amp;amp; nameArray[curIndex-1].contains(new RegExp(r'[a-zA-Z]'))) {
print(nameArray[curIndex-1] nameArray[curIndex]); // checks if current curIndex and previous curIndex are letters, if so returns previous and curent letters joined
} else {
if (curIndex >= 1 amp;amp; nameArray[curIndex].contains(new RegExp(r'[a-zA-Z]')) amp;amp; nameArray[curIndex 1].contains(new RegExp(r'[a-zA-Z]'))) {
null; // checks if curIndex and next curIndex are letters, if so returns null
}else{
print(nameArray[curIndex]);
}
}
}
}
Который возвращает
I
He
el
ll
lo
th
he
er
re
I
am
Bo
ob
2
3
!