Code Monkey home page Code Monkey logo

rhvoice-dictionary's Introduction

RHVoice-dictionary

Русский словарь в формате поддерживаемом RHVoice v0.5+

Установка словаря

LINUX

  • Пакет в AUR для Arch пользователей rhvoice-dictionary-git
  • Остальным, положить словари в директорию со словарями (по умолчанию /etc/RHVoice/dicts/Russian/)

WINDOWS

  • Путь для русских словарей: %AppData%\RHVoice\dicts\Russian\

ANDROID

  • Путь для русских словарей: /sdcard/Android/data/com.github.olga_yakovleva.rhvoice.android/files/dicts/Russian/

Примечание: После добавления словарей синтезатор необходимо перезагрузить (закрыть все программы, которые его используют), чтобы новые словари начали действовать.

Дополнительные инструменты

Более подробное описание инструментов "/tools"

  • Предварительная обработка текста

    • Ведётся разработка предварительной обработки текста на Питоне "/tools/preprocessing".
  • Скрипты на Питоне

    • Вспомогательные скрипты.
    • Воспроизведение с помощью rhvoice_say.
    • GUI для настройки rhvoice_config.

Обратная связь

Замечания, предложения, исправления и дополнения всегда приветствуются!
Их можно оставить во вкладке Issues.

rhvoice-dictionary's People

Contributors

capricorn2001 avatar toxblh avatar vantu5z avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

rhvoice-dictionary's Issues

Немецкие названия

Подготовил с десяток правил чтения немецких названий, в основном наиболее часто упоминаемые СМИ. Не знаю, стоит ли их включить? Сам я использую.

Определение падежа + Рефакторинг

Я тут подумал вынести определение падежа, рода, числа в отдельный класс. Основан будет на том словаре который уже есть, но немного в другом формате с описанием одного слова в разных формах, что упростит его пополнение.
Использоваться будет в виде:
words.get_gender('слово') -> мужской / женский
words.get_case('слово') -> [список совпавших падежей] например [0, 1, 0, 1, 1, 0]


Буду рад услышать предложения, а также пожелания к необходимым запросам к этому классу.
Через пару дней покажу первый вариант.

Please install dictionaries to the same location that RHVoice looks in

RHVoice installs its dictionaries into /usr/local/share/RHVoice/voices, for example:

	/usr/local/share/RHVoice/voices/natalia/16000/bap.pdf
	/usr/local/share/RHVoice/voices/natalia/16000/bap.win1
	/usr/local/share/RHVoice/voices/natalia/16000/bap.win2
	/usr/local/share/RHVoice/voices/natalia/16000/bap.win3
	/usr/local/share/RHVoice/voices/natalia/16000/bpf.txt
	/usr/local/share/RHVoice/voices/natalia/16000/dur.pdf
	/usr/local/share/RHVoice/voices/natalia/16000/lf0.pdf
	/usr/local/share/RHVoice/voices/natalia/16000/lf0.win1
	/usr/local/share/RHVoice/voices/natalia/16000/lf0.win2
	/usr/local/share/RHVoice/voices/natalia/16000/lf0.win3
	/usr/local/share/RHVoice/voices/natalia/16000/mgc.pdf
	/usr/local/share/RHVoice/voices/natalia/16000/mgc.win1
	/usr/local/share/RHVoice/voices/natalia/16000/mgc.win2
	/usr/local/share/RHVoice/voices/natalia/16000/mgc.win3
	/usr/local/share/RHVoice/voices/natalia/16000/tree-bap.inf
	/usr/local/share/RHVoice/voices/natalia/16000/tree-dur.inf
	/usr/local/share/RHVoice/voices/natalia/16000/tree-lf0.inf
	/usr/local/share/RHVoice/voices/natalia/16000/tree-mgc.inf
	/usr/local/share/RHVoice/voices/natalia/16000/voice.data
	/usr/local/share/RHVoice/voices/natalia/24000/bap.pdf
	/usr/local/share/RHVoice/voices/natalia/24000/bap.win1
	/usr/local/share/RHVoice/voices/natalia/24000/bap.win2
	/usr/local/share/RHVoice/voices/natalia/24000/bap.win3
	/usr/local/share/RHVoice/voices/natalia/24000/bpf.txt
	/usr/local/share/RHVoice/voices/natalia/24000/dur.pdf
	/usr/local/share/RHVoice/voices/natalia/24000/lf0.pdf
	/usr/local/share/RHVoice/voices/natalia/24000/lf0.win1
	/usr/local/share/RHVoice/voices/natalia/24000/lf0.win2
	/usr/local/share/RHVoice/voices/natalia/24000/lf0.win3
	/usr/local/share/RHVoice/voices/natalia/24000/mgc.pdf
	/usr/local/share/RHVoice/voices/natalia/24000/mgc.win1
	/usr/local/share/RHVoice/voices/natalia/24000/mgc.win2
	/usr/local/share/RHVoice/voices/natalia/24000/mgc.win3
	/usr/local/share/RHVoice/voices/natalia/24000/tree-bap.inf
	/usr/local/share/RHVoice/voices/natalia/24000/tree-dur.inf
	/usr/local/share/RHVoice/voices/natalia/24000/tree-lf0.inf
	/usr/local/share/RHVoice/voices/natalia/24000/tree-mgc.inf
	/usr/local/share/RHVoice/voices/natalia/24000/voice.data
	/usr/local/share/RHVoice/voices/natalia/voice.info
	/usr/local/share/RHVoice/voices/natalia/voice.params

Could you please add a makefile that would also install your files there?

Отдельные символы (например греческие)

В рассылке RHvoice поднялась тема по чтению греческих символов:
http://tiflo.info/pipermail/rhvoice-users_tiflo.info/2016-July/thread.html

@capricorn2001 сделал скрипт для их обработки, но это решение не для всех и должно задействовать предобработку текста (до передачи в движок).

В словаре с примерами есть описание, как задать символ его кодом.
Я попробовал и кодом и символом - работает.
Но!
Почему-то у меня не читает эти символы, если они находятся в тексте. Я подумал, что RHvoice считает их пунктуацией (в wiki и конфиг файле есть упоминания об этом), но у меня не получилось заставить его читать символы расположенные в тексте.

Какие будут предложения?
Может это просто у меня что-то с руками :)

Перекрывающиеся правила не отрабатывают

Если два шаблона в словаре частично перекрывают друг друга, то второй не работает.
Например:
есть правила:
{в,на,о,при} друг+ом
*{е,о}м бок+у

фраза "на другом боку" читается как "на друг+ом б+оку"

словари с автообновлением

https://github.com/RHVoice/dicts

тут делаю словари с автообновлением.
идея - собрать все самое-самое в одном месте...
...и автоматизировать прием новых слов, и обновлеие словарей на машинах пользователей

(пока под винду)

расширить словарь

вот тут есть большой словарь произношения
http://golosknigi.com/page3.html
можно адаптировать под формат rhvoice если заменить записи вида

криологи*=ъъкриолQогиъъ
на
(к=ъък)риол+ог(и=иъъ)*

например как нибудь так
sed 's/\(ъъ\(\w\)\)/\(\2\=ъъ\2\)/ig;s/\(\(\w\)ъъ\)/\(\2\=\2ъъ\)/ig;' /tmp/rhvoice/Sapi5_RHvoice_2.dic

На тему интеграции с другими приложениями

А конкретнее, с веб-браузером Firefox.
Попалась такая новость:
Улучшения, представленные в бета-версии Firefox 49
В режим читателя (Reader Mode) добавлена возможность использования синтезатора речи для голосового чтения содержимого страницы. Имеется возможность регулирования темпа речи и выбора голосового набора (мужской или женский голос). Чтение может вестись в фоне и продолжается при переключении на другую вкладку. При остановке чтения Firefox запоминает позицию и в дальнейшем возобновляет чтение с сохранённого момента. Для синтеза речи используются средства, предоставляемые операционной системой.

И так далее.
Даст ли это какие-либо дополнительные возможности при использовании RHVoice?

Расширить «арсенал» инструментов

Может быть, стоит добавить возможность выполнять какие-то узкие задачи? У меня есть скрипт, озвучивающий дату, день недели и погоду с Яндекс.Погода. Проблема в том, что этот скрипт на bash и он не универсален относительно локации — делал для себя. Есть скриптик для долготы светового дня. Возможно, было бы удобно озвучивать какие-то другие подобные мелочи.

Некорректно работает CountRule_36

Пока исключил это правило из-за непонятного срабатывания.
18 день -> восемнадцатый день: существительное мужского рода единственного числа в именительном/винительном падеже, то есть attr.have([M_GENDER], False, [0]) должно быть истинно. Тут всё правильно.
18 мегаватт не должно обрабатываться при совпадении с формой множественного числа в родительном падеже, то есть если attr.have([M_GENDER], True, [1]) тоже истинно. Но в этом случае attr.have([M_GENDER], True, [1]) почему-то ложно.
Условие

    if (attr.have([M_GENDER], False, [0])
        and not attr.have([M_GENDER], True, [1])):
        ...

не работает во второй своей части.

Местный падеж

Столкнулся с этим, уточняя CountRule_4. Некоторые существительные имеют особую форму в предложном падеже, которую иногда выделяют в отдельный падеж — местный: в лесу, на полу, в полку и т.д.
Можно решить по-разному.
Создать список соответствующих слов (предпочитаю данный вариант):
(..., 'лесу', 'полку', 'саду').
Добавить ещё одну форму в список словаря:
('полк', 'полка', 'полку', 'полок', 'полком', 'полке', 'полку').
Вопрос в том, как это решено в pymorphy2 и решено ли?
Пока буду делать предварительно с отдельным списком слов-исключений

Не по теме

В AUR'е, похоже, "осиротел" пакет mailru-cloud - даже ссылка ведет на страницу 404. Я отредактировал PKGBUILD и поместил ссылку в комментариях. Пожалуй, даже взялся бы вести пакет. Но 2 "но": 1) у меня система только i686, не могу проверить для x86_64, 2) слишком мало опыта - не знаю, что и как. А пакет, полагаю, нужный.
Какие-нибудь соображения по этому поводу?

разница между именем существительным единственного числа и множественного числа

можно ли сделать что бы синьтезатор делал разницу помежду именем существительным ’д+ома и дом+a? одное имя существителное в единственном числе в прымере Я дома.. а в другом примере Это наши дома

Где скачать установщик RHVoice?

Здравствуйте. Где взять готовую программу с русским женским языком или множеством разных одновременно для Windows 10?

Что будем делать с выходом новой верии RHVoice?

Что-то меня мысль посетила.
Вот пилим пилим мы словарик, а с выходом новой версии движка половину правил в нём учтут.
Как перепроверить правила?

Как вариант написать небольшой скриптик, который делает из словаря список слов (словосочетаний) без указания ударения (исправления) и записывает его в файлик. Потом этот файлик скармливается другому скрипту, который по нажатию читает первое слово и ждёт реакции (правильно / неправильно / прочитать ещё раз), по результатам реакции составляются новые списки: 1. на удаление, 2. на включение. Дальше либо вручную корректируется словарь, либо придумать автоматизацию для этого.

Эту штуковину можно будет также использовать для проверки сторонних словарей, предварительно подготовив их.

Права у словарей

у всех словарей кроме phrase_dict.txt проставлен флаг на выполнение(755):
-rwxr-xr-x 1 user user 153 окт 31 11:05 abbr_dict.txt*
-rwxr-xr-x 1 user user 1027 окт 31 11:05 locations_dict.txt*
-rwxr-xr-x 1 user user 129 окт 31 11:05 names_dict.txt*
-rwxr-xr-x 1 user user 3083 окт 31 11:05 person_names_dict.txt*
-rw-r--r-- 1 user user 14798 окт 31 11:05 phrase_dict.txt
-rw-r--r-- 1 user user 2030 окт 31 11:05 README.md
drwxr-xr-x 3 user user 4096 окт 31 11:05 tools/
-rwxr-xr-x 1 user user 4386 окт 31 11:05 yo_dict.txt*

Просьба о помощи

Здравствуйте! Все это время я работал над словарем Acapela Alyona. Прошу Вашей пмощи.
Вот 3 словаря от Infovox 4:

rur.dca_85786.txt
rur.ldi_5089.txt
rur_extra_alyona.ldi_113.txt

А это - словари от Infovox 2:
propernoun.txt
_punctuation.txt
1_YO_lex.txt
2_YO_lex.txt
Alyona22k_mytts_.txt
Geografic.txt
omograph_auto.txt
omograph_lex_mytts_.txt

Надо из словарей для Infovox 2 отобрать слова, которые уже есть в словарях от Infovox 4. Может, можно скрипт для автоматического перебора написать? Я буду очень благодарен!

Читалка для книг

Всем привет!

Со мной связался Максим и попросил написать, что-то похожее на читалку для книг наподобие Балаболки для Windows, т.к. для Linux такого рода программ не много.

Начал изобретать велосипед, попутно изучая Python, вот, что пока из этого получилось:
https://github.com/vantu5z/PyBookReaderTTS

Если есть желание помочь, присоединяйтесь.

Старая проблема, которую не удается решить в общем случае

Покажу на примере. Текст:

Аппарат рассчитан на 500 погружений на глубину более 4 тыс. м. При этом его конструкция позволяет опускаться на глубину до 6 тыс. м.

Обработанный текст:

Аппарат рассчитан на 500 погружений на глубину более четырёх тысяч метроветров. При этом его конструкция позволяет опускаться на глубину до шести тысяч м.

То есть скрипт обнаруживает два отрывка тысяч м и производит две замены, но только на первом отрывке: более четырёх тысяч метров. Затем, не доходя до второго отрывка: более четырёх тысяч метроветров.
Периодически сталкиваюсь с этим. Пока добавил в некоторые шаблоны дополнительные группы, не нужные при обработке, но позволяющие различить их.
Но это не гарантия - ошибки всё равно не исключены. Пока ничего не придумал.

test_templates.py -d

У меня перестал работать скрипт test_templates.py в режиме debug. Выдает:

Traceback (most recent call last):
File "/home/myhomedir/Files/Git/RHVoice-dictionary/tools/test_templates.py", line 103, in
text = text_prepare(txt[0], debug)
File "/home/myhomedir/Files/Git/RHVoice-dictionary/tools/preprocessing/text_prepare.py", line 67, in text_prepare
for sample in stress_marker_samples(stress_marker):
File "/home/myhomedir/Files/Git/RHVoice-dictionary/tools/preprocessing/templates.py", line 1623, in stress_marker_samples
('а́', marker + 'а'),
TypeError: unsupported operand type(s) for +: 'bool' and 'str'

Если это не только у меня, помоги разобраться.

Docker-образ и REST-API

Сделал вокруг RHVoice и вашего кода Docker-образ и легкую REST-обертку для использования как TTS-движка в системах типа Умный дом.

Кому пригодится - вот ссылка на репозиторий

https://github.com/mgarmash/rhvoice-rest

Не проходит тест

Несколько ошибок при выполнении теста:

ВНИМАНИЕ! неверное преобразование: "(1,5±0,2)×10^-9" -> "(одна целая 5 десятых плюс-минус 0 целых две десятых) на десятом в степени минус 9"
                      должно быть: "(одна целая 5 десятых плюс-минус 0 целых две десятых) на десять в степени минус 9"
ВНИМАНИЕ! неверное преобразование: "в 20 в." -> "в двадцатом в."
                      должно быть: "в двадцатом веке"

Ошибка обработки текста

Если в тексте попадается подобное

80-летней

то выдаёт ошибку

Traceback (most recent call last):
  File "###/tools/test_templates.py", line 92, in <module>
    text = text_prepare(txt)
  File "###/tools/preprocessing/text_prepare.py", line 57, in text_prepare
    text = rule.run(text)
  File "###/tools/preprocessing/rules.py", line 39, in run
    new = self.check(m)
  File "###/tools/preprocessing/rules.py", line 670, in check
    num = sub('ста', 'сто', num)
NameError: name 'sub' is not defined

"Морской" глюк

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

Скрипт предварительной обработки текста

Хочу предложить внести свой скрипт в пакет. Конечно он исправляет чтение далеко не во всех случаях, но во многих. Как оказалось, скрипт на языке Python работает намного быстрее, чем редактор SED. В настоящее время продолжаю его пополнять и улучшать.
Скрипт считывает текст из файла /tmp/clip.txt и в него же записывает результат обработки.

Географические и т.п. названия

А вот куда вносить названия рек? Подозреваю, что могут потребоваться правила для морей, озёр, гор, стран, звёзд, планет, астероидов.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.