Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.09.2021, 01:52
Аспирант
Посмотреть профиль Найти все сообщения от p.rishard
 
Регистрация: 21.04.2018
Сообщений: 40

Google Cloud Text to Speech Pro
Начну, как водится, с самопиара и ссылок на себя любимого, затем постепенно перейду к официальной части.



Опубликовал новую advanced версию своего кода (на базе фреймворка ruby on rails), за пару лет приобретшего на гитхабе и ютюбе некоторую популярность в среде непрограммистов, и именно благодаря пошаговому описанию того, как легко и плавно все это пушится на heroku и затем неопределенно долго и полностью бесплатно там работает...



В трех словах: данный app (Ruby on Rails 6, Webpacker, Bootstrap 5, Ajax Flash Messages) позволяет, помимо конвертации текста в звук посредством расширенного (интерфейс включает практически все документированные Google опции и тригеры озвучки) использования сверточных нейронных сетей Cloud Text to Speech API - еще и ряд фичей, а именно: возможность присвоить звуковому файлу произвольное наименование, также на автомате загрузить (при желании) на Amazon ES3 либо в иное совместимое (Google Cloud Storage, Microsoft Azure Storage) хранилище, также теперь поддерживается прозрачный языковой перевод налету средствами Google Cloud Translate API. На данный момент это весь перечень функций; возможно, в дальнейшем что-то добавится... а пока что автор, в силу присущего разработчикам самолюбия - безмерно рад любой трехэтажной ругани в контексте г*внокода / легаси / многочисленных багов или же просто так, в плане экзистенциального релакса на прошедшие выборы в ГД. Репо для аудита и тестирования, велкам.

И заодно глобальное $thanks, если заставили себя дочитать до этого абзаца... ну, а теперь, собсно, основное. Раздумываю над целесообразностью добавления возможности автоматического разбиения конвертируемого стринга на блоки по 5К знаков каждый (максимум того, что принимает API за один запрос)... да, о лимитах выполнения скрипта на Heroku я помню, но тем не менее.

Логика (питончик, но все прозрачно) такова, разбиваем стринг регуляркой на предложения, затем динамически формируем массивы таким образом, чтобы каждый из них не превышал означенного количества знаков. Т.е. работают два условия, реализуемые примерно следующим образом:

Код:
import re
from functools import reduce

text = '''bluhbluhbluh
'''
print(len(text))

sentences = re.split('(?<!\w\.\w.)(?<![A-Z][a-z]\.)(?<=[.?])\s', text)
char_limit = 200

def groupByMaxSymbolsLen(result, item):
 # print(f"result=[{result}]; item=[{item.strip()}]")
 if (len(result[-1]) + len(item) + 1) <= char_limit:
  result[-1] = (result[-1] + ' ' + item).strip()
 else:
  result.append(item)
 return result

r = reduce(groupByMaxSymbolsLen, sentences, [''])
print(r)
print(len(r))
Внимание, вопрос. Сумеете посоветовать что-то более оптимальное в плане решения этой задачки? Возможно ли обойтись только regex? или как еще?

Последний раз редактировалось p.rishard, 26.09.2021 в 02:02.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Показать кнопку вниз Aruta jQuery 12 16.03.2020 15:48
Навигация по якорям вперед\назад donkey Элементы интерфейса 7 19.08.2016 18:10
Плагин для Chrome. Анти - мат. Проблема с обновлением. timedo Общие вопросы Javascript 1 30.05.2013 11:28
Горизонтальная прокрутка контента! andys Элементы интерфейса 5 26.06.2011 22:06
скролл для длинного текста не появляется... dschmitz (X)HTML/CSS 6 27.11.2010 01:34