2012-08-02 5 views
1

Я студент-инженер, просто пытаюсь создать что-то, чтобы я мог изучать несколько областей дизайна на мачте - в основном мой проект работает над системой inter-com во всем моем доме, который общается по беспроводной сети. Я могу в конечном итоге сделать какую-то обработку голоса, чтобы увидеть, могу ли я разобрать текст, как Сири, и заставить его в конечном итоге вызвать функцию из речи. Это означало бы, что я мог бы иметь постоянный поток текста для синтаксического анализа в течение достаточного времени.На каком языке для моего регулярного выражения?

Таким образом, у меня вопрос состоит из нескольких частей.

1) Я предполагаю, что регулярное выражение - это путь к анализу текста и совпадение с командой, которую я хочу, чтобы какой-либо текст был введен в мою систему? Если нет, пожалуйста, укажите мне в другом направлении!

2) Я понимаю, что Perl кажется стандартным, но мое фоновое приложение работает на C++ или C#, поэтому я бы предпочел использовать регулярные методы на любом из этих языков.

-Я вижу, что существует Regex ++ или http://www.pcre.org/, было бы достаточно одного из них или использовать Perl?

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

СПАСИБО!

+1

Ваше время обработки будет на распознавании речи, а не на скорости ваших регулярных выражений. Вы просто ищете простые голосовые команды/фразы. Любой анализатор регулярных выражений будет достаточно хорош. – paddy

+2

На самом деле, многие системы распознавания речи требуют или используют грамматику. В этом случае результат от речи к тексту уже будет известен, и вы можете использовать обычные сравнения строк. Во всяком случае, забавный проект. Я только что получил малину-пи и подумал о том, чтобы подключить мой дом ... Не было бы здорово иметь дом «Звездный путь»! «Компьютер, снизьте свет до 30%», «Компьютер, сыграйте 100 песен для ухаживания дам», «Компьютер, верните меня в реальность» – paddy

+0

Будут ли обычные сравнения строк иметь возможность выбрать число «30» из вашей фразы там, правда? У меня не так много опыта в работе с строками, и регулярное выражение было правильным. Получил ли я выгоду от отклонения регулярного выражения и просто перехода на этот маршрут? EDIT: Спасибо за быстрые ответы! – user1569980

ответ

3

Regex - это решение для реализации. На данный момент вы далеко от решений по внедрению.

Какое оборудование вы используете? Будет ли аппаратное обеспечение поддерживать язык, который вы выберете? (например, C# имеет очень ограниченную поддержку ни на чем другом, кроме Windows)

Может оказаться, что вам не нужно ничего сложного, как регулярное выражение.

Followup на основе замечаний OP в ниже:

Что ваши комментарии делают начинают собирать некоторые из требований, предъявляемых к системе. Команды, основанные

  • Текста
  • Runnable на окнах и OSX
  • платформы должны быть способны говорить с «схемой»
    • Есть определенные протоколы, которые нужны?

Самые большие требования здесь, как это относится к первоначальному вопросу является «команды на основе текста». Являются ли эти 1 слово команд или откликов такими, как комментарий к падди выше?

+0

Как я буду использовать его, единственным входом в мою программу будет текст. Я хочу построить эту логику, прежде чем я действительно позабочусь о вводе какого-либо голоса, хотя у меня есть схема для этого. C++ - это то, что я действительно хочу использовать, но я просто имел в виду, что использование другого языка оказалось бы легче, чем я бы не стал переходить к этому. – user1569980

+0

Кроме того, я планирую запустить это на своем компьютере с Windows, но кто знает, работает ли он, и друг хочет, у кого OSX я могу попытаться перевернуть это. – user1569980

+0

Это были бы предложения, a.k.a., если я говорю в комнате с моим блоком, мне нужно было бы обнаружить, когда я обращаюсь к системе, ла-падди, говорящий «компьютер» каждый раз. Нет конкретного протокола, прямо сейчас я просто общаюсь по сериалу. Когда я покупаю беспроводной чип, я все равно, возможно, подключу к компьютеру, чтобы общаться через последовательный порт, а затем выходить в эфир на моем устройстве, где бы он ни находился. – user1569980

0

Perl Regexes - это, безусловно, самый передовой двигатель регулярных выражений. Но есть вопрос, действительно ли вам нужна эта сила. Возможно нет.

Я бы посоветовал подумать о что первый. Классовые диаграммы, ваша архитектура программного обеспечения, алгоритмы и т. Д.Если вы хотите написать быстрый вариант/прототип, используйте либо Python (красивый язык, нравится Windows, полностью объектно-ориентированный, не медленный) или Perl (сила богов у вас под рукой. Нет, модуль уже доступен практически для всех, но программирование Perl называется «взломать» по какой-то причине, и, хотя оно хорошо работает с Windows, это не так забавно, как на * nix) или любые другие причудливые сценарии язык.

После некоторого профилирования подумайте о переписывании критически важного или системного уровня на C/C++. Perl имеет отличные языковые привязки; вы можете написать C/C++ inline. Согласование регулярных выражений не будет важной частью.

C# не очень портативен, если вы не раскошелитесь на .NET и не идете в рамки Mono.

+0

Интересно, спасибо. Это все полезно, я думаю, я никогда не понимал, что Perl полезен для кодирования всего, что я хочу. Трудно ли использовать оба Perl и C++ в одном приложении для одного приложения? Смогу ли я наткнуться на какие-то непонятные проблемы? – user1569980

+0

Если Perl является основным языком, нет. Вы просто пишете одни критические функции в C++ с помощью модуля 'Inline'. Но есть дополнительная работа при передаче нетривиальных аргументов или возврате значений между Perl и C++. Вы можете делиться только пространством имен функций между ними, нет общих классов. Если ваш код на C++ растет, вы можете вместо этого создать библиотечную оболочку. perl написан на C и имеет богатый API, который вы можете использовать. Просто посмотрите документацию (http://search.cpan.org/~sisyphus/Inline-0.50/Inline.pod) и решите, может ли это быть чем-то для вас. Затем передумайте ;-) – amon

+0

@ user1569980 Возможно создание графических интерфейсов с помощью Perl. Имеются привязки к Tk, GTK, Qt, Wx и не переносным Win32. Нет WPF. В общем, для них мало документации, но использовать ее невозможно. Я предпочитаю PerlQt4, потому что это просто оболочка для (очень богатых) библиотек C++ и выглядит на каждой платформе (и потому я использую Linux ...) – amon

Смежные вопросы