Научная статья на тему 'Программирование голосом, как необходимость'

Программирование голосом, как необходимость Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
981
127
i Надоели баннеры? Вы всегда можете отключить рекламу.

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Ильский А. А.

Тема работы предложена жизнью и связана с разработкой программного обеспечения для программирования голосом, для специализированной аудитории пользователей.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Программирование голосом, как необходимость»

Программирование голосом, как необходимость

Магистрант 2 курса Ильский А. А.

МИЭМ, НИУВШЭ, кафедра ИТАС

Аннотация. Тема работы предложена жизнью и связана с разработкой программного обеспечения для программирования голосом, для специализированной аудитории пользователей.

Данный проект ставит перед собой две цели: первая, разработка программного обеспечения компонентного типа для разработки компьютерного кода с применением голосового интерфейса, с совместимостью с любым пакетом программного обеспечения распознавания речи, для основных и мобильных платформ; второй целью является оценка возможности улучшения задачи программирования, а также функционала программного обеспечения, с голосовым интерфейсом распознавания речи, предоставляемым для этих целей.

В проекте не ставится целью разработать, реализовать или улучшить в какой-либо форме существующее программное обеспечение распознавания речи, а только использовать функционал, который им предоставляется, для выполнения специальных задач. Следовательно, точность распознавания речи зависит от программного обеспечения распознавания речи, а не программного обеспечения разрабатываемого в данном проекте.

Программное обеспечение распознавания речи сконцентрировано на диктовке, позволяя печатать документы, электронные письма, помогая специальностям, где работа связанна с длительными периодами печати, с повышенным риском получения заболевания и травм опорно-двигательной и нервной системы. Ряд профессий таких как журналисты, программисты, писатели и ученые, в условиях сжатых сроков продолжают работу несмотря на рекомендации и останавливаются только когда утомлены и в особенности при боли или дискомфорте,.Что в последствии проявляется в тендините, сильных шейных и спинных болях и приводят к потере самооценки, снижению качества жизни, ухудшению семейных отношений.

В настоящее время от Repetitive Stress Injury (RSI) или Repetitive Motion Injury и Синдром Канала Запястья (Carpal Tunnel Syndrome) страдают огромное количество 80% из них пользуются клавиатурой в течение длительных периодов времени ежедневно. В странах Европы лечение обходится индустрии не менее чем 3 миллиардов евро ежегодно. Но обычно люди не сообщают о заболевании RSI, т. к. это боятся, что скажется на их работе. По оценкам только в 40% случаев сообщаются/обращаются за помощью, что делает проблему еще серьезнее. Хотя RSI наиболее известная причина невозможности использовать клавиатуру, существует еще множество состояний влияющих на возможность пользоваться компьютером, на пример, ампутация рук или кистей, припадки, врожденные заболевания. Чтобы продолжить работу необходимо сменить метод ввода, например, на распознавание речи.

Круг заинтересованных лиц расширяется, при использовании мобильных платформ. Быстро растущая отрасль мобильных платформ и приложений IT индустрии позволит выполнять часть работ вне офиса и здоровым специалистам.

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

и/или аббревиатурами. Также в языках программирования использование символов отношения, равенства, объявления переменныгх и работы с параметрами синтаксически отличается от естественных языков. В результате требуется как минимум адаптированная или специализированная, а может и в целом иная по типу система для распознавания в программировании.

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

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

Программное обеспечение программирования голосом

VoiceCode - Open Source инициатива Института Информационной Технологии Национального Исследовательского Консульства Канады. Задачей является разработка инструментария совместимых компонентов поддерживающего текущие лучшие практики программирования голосом на всех основных платформах[1].

ShortTalk and EmacsListen — разработка специализированного разговорного языка для человека-компьютерного взаимодействия.[2]

Voice Grip[5] - дополнительный макрос для редактора Emacs созданный с целью упрощения использования коммерческого программного обеспечения распознавания речи программистами программистам.

Java by voice[6] — серия макросов для редактора Emacs спроектированные для упрощенного ввода кода на языке Java

Cache Pad - макрос для редактора Emacs для кэширования недавно продиктованных имен функций и переменных для последующего переиспользования. [3]

Emacs VR Mode - макрос для редактора Emacs добавляющий особенность Select and Say в редактор из ПО Dragon Naturally Speaking.[4]

Программирование голосом - область находящаяся еще в стадии исследования и конечно не применяемая большим числом программистов. Достаточно исследований было проведено доказывающих возможность программирования голосом, но пока не существует программного обеспечения специально спроектированного для этой задачи. Существующие проекты это демонстрируют.

Альтернативный подход был предложен Adam Janin[7] состоял в разработке нового «speech friendly» языка, но его исследование продвинулось дальше обсуждения особенностей такого языка т. к. его RSI пошло на поправку

Задача программирования

Программирование как задача можно разбить на 4 области:

• Написание

• Отладка

• Компиляция

• Исполнение

Программист обычно пишет небольшую секцию для решения конкретной проблемы. Затем эта часть кода компилируется, если компиляция успешна , запускается и тестируется с применением инструментов отладки. Когда код

исполняется правильно — он расширяется для выполнения большей задачи. Процесс повторяется до того как код решает всю поставленную задачу.

Таким образом за написанием следует исправление ошибок, тестирование и отладка. Программист обычно работает в среде, которая предоставляет инструменты для выполнения всех четырех функций, на пример, Microsoft Visual Studio.

Написание кода

В свою очередь обычно делится на последующие задачи (зависит от языка программирования)

[1] Определение имени класса

[2] Определение используемых функций

[3] Определение переменных используемых в функциях

[4] Манипуляция переменными с использованием вызова других функций или специфических конструкций for и while циклов или if и switch конструкций.

Если одно и тоже задание дать группе программистов результат будет разный, потому что у программистов есть личный стиль.

Несколько вещей определяющих стиль программиста:

1. Способ записи и именования переменных, классов и функций

2. Структура и группирование кода

3. Положение скобок

4. Отступы в коде

5. Использование комментариев

Иерархический анализ задачи.

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

Основные стадии написания кода:

7. Открытые файл

8. Редактирование файла

9. сохранение файла

10. Компилирование файла

11. Выход

Каждая стадия задачи будет раскрыта далее. Анализ проводится для объектно-ориентированных языков, таких как Java или С++, но основные задачи и их субзадачи будут одинаковы для любого используемого языка программирования.

Все задачи ниже второго уровня содержат все себе процесс печатания или диктовки в редакторе, а для задачах ниже уровнем редакторы предоставляют соответствующие инструменты.

Задачи выше второго уровня обобщенно больше представляют собой мыслительный процесс, чем реально исполняемые действия.

Где возможно задачи ниже четвертого уровня необходимо автоматизировать.

Открытие файла:

1. Выбор Открыть файл опции

2. Ввод имени открываемого файлы или

3. Щелчок курсором по имени файла в отображаемом списке

Редактирование Файла:

1. Уровень 1:

• Подключение необходимых библиотек

• Определение нового класса

• Определение новой функции/метода 2. Уровень 2:

• Ввод '#include'

• Ввод имени используемой библиотеки

• Ввод ключевого слова 'class'

• Ввод имени класса

• Определение области класса

• Определение классовых переменных

• Определение конструктора класса

• Определение области функции

• Определение типа результата функции

• Определение входных параметров функции

• Определение тела функции

• Определение новой переменной

• Присвоение значение переменной

• Использование функции Уровень 3:

• Определение наследуемого/расширяемого класса

• Ввод директивы наследования/расширения

• Ввод имени родительского/супер класса

• Ввод пар (тип/класс, имя) параметров

• Определение области переменной

• Определение типа переменной

• Определение имени переменной

• Определение параметров конструктора

• Определение тела конструктора

• Определение используемой функции/метода

• Определение параметров используемой функции/метода

• Определение используемых функцией переменных

• Определение переменной для присвоения

• Присвоение значений используемым функцией переменным

• Присвоение значения

• Использование 'if ' оператора

• Использование 'else' оператора

• Использование 'for' оператора

• Использование 'while' оператора

• Использование 'do.. while' оператора Уровень 4:

• Ввод ключевых слов 'if ', 'else', 'for', 'while', 'do.. while'

• Инициализация начальных значений переменных/итераторов

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

• Задание условия сравнения с переменной/константой или остановки цикла

• Постановка открывающих/закрывающих скобок

• Постановка символьных операторов языка

• Постановка точки с запятой Сохранение файла:

• Выбор Сохранить файл опции

• Ввод имени, с которым сохраняется файл или

• Выбор Сохранить опции (если файл был предварительно сохранен) Закрытие файла

• Выбор Закрыть файл опции

• Если запрошено сохранение изменений выбор между опциями Да или Нет Закрытие Приложения

• Выбор Выйти из приложения опции

Ниже третьего уровня действия синтаксически ориентированы (зависят от языка). Это там, где диктовка синтаксиса наиболее затруднена, и где происходит наибольшее количество опечаток. Если бы синтаксис языков содержал бы меньше скобок и позволял пробелы после пунктуации, тогда бы программирование голосом было проще.

Сложности при программировании речью

Все задачи связанные с написанием кода сложны, когда проговариваются. Трудно выполнимы или утомительны, доводя пользователя, до отказа от использования речи.

Определение имен переменных, классов и функций.

Если бы все имена переменных и классов были одиночным английским словом, тогда это не было бы проблематичным. В реальности это крайне редко, имена должны отражать исполняемую функцию или содержимое переменной. Компиляторы требуют чтобы имена переменных не содержали пробелов, так что программистам приходится находить различные методы концентрации слов, сохраняя простоту чтения. Проблема заключается в том что программное обеспечение распознавания речи спроектировано для задач диктовки текстов и автоматически добавляет пробел между словами. Например, продиктовать «CamelCase» или «under_score» используя Dragon Naturally Speaking потребуется произнести:

«came, no space, capitalise next, case» или «under, no space, underscore, no space, score»

Имена обычно длиннее, чем два слова, и чем длиннее имя, тем более значительно замедляется диктовка.

Написание конструкций for и while.

Все конструкции циклов и «if» утверждение обычно определяется наличием логического условия в скобках, при котором секция кода исполняется. Именно скобками затрудняется диктовка и использование этих конструкций становится затруднительным. Пример кода:

for(counter=0;counter<10;counter++) {

printf(counter); |}

Потребует произнести: «For, no space, open brackets counter equals-sign zero. semi-colon. counter less-than ten semi-colon. counter plus-sign plus-sign .close brackets. new line. open braces. print. no space. open brackets counter. close brackets. semi-colon. new line. cose braces».

Навигация

Эта проблема распространяется на все что связано с использованием речи. Мышь — великолепный инструмент для быстрой навигации в документах, т. к. позволяет перемещать курсор, «прокручивать» документ вверх и вниз в поисках необходимой секции. Но этот недоступен тем кто не может пользоваться своими руками. Типовыми решениями программного обеспечения распознавания речи являются переходы в начало или конец предложения, или абзаца, или номеру строки, или на определенное количество строк, но для программирования голосом необходимы более специализированные решения.

Использование опций меню

Из иерархического анализа видно, что множество задач требует использования опций меню (открытие, закрытие, сохранение файлов). Что легко реализуется мышью, но трудно когда при помощи одного голоса. Традиционно реализуется индикаций своих намерений воспользоваться опциями меню при помощи голосовой команды, на что в ответ программное обеспечение переходит режим «управления». Задача программирования потребует реализовать дополнительные режимы, диктуемые из потребности задачи программирования. Но основным ограничением является то, что обычно интерфейсы графически ориентированы и используют, флаг элементы, списки и другие диалоговые элементы. Затруднительное использование списков и диалоговых элементов возможно, но использование флаг элементов на первый взгляд кажется невозможным.

Список литературы

[ 1 ] http://sourceforge.net/apps/mediawiki/voicecode/index.php?title=VoiceCode/Programmi ng_by_voice_ressources

[ 2] http : //shorttalk- emac s. sourceforge.net/ShortTalk/index .html [ 3 ] http : //www.voicerecognition.org/developers/j ep stein/

[4] http://emacs-vr-mode.sourceforge.net/

[5] Desilets, Alain. «Voice Code, Programming by Voice Toolkit».

[6] Epstein, Jonathan. «Writing and Debugging Code by Voice»

[7] Janin,Adam «Design of a Speech Orientated Programming Language».

i Надоели баннеры? Вы всегда можете отключить рекламу.