News:

HOT TIP! Commands and groups can be copied and pasted directly from your command editor to the forum, and vice versa. This makes sharing command XML on the forum much easier!

Main Menu

"how do you spell ...."

Started by PegLegTV, November 24, 2014, 11:32:42 PM

Previous topic - Next topic

0 Members and 2 Guests are viewing this topic.

PegLegTV

I'm trying to create a command for spelling so i can say "how do you spell {measuring}" {measuring} = payload dictation regular
then have it say "measuring, m e a s u r i n g"  and have an OSD with the word

i know that in order to get it to spell the word out well enough to be understood by tts, I need to add a semicolon and space after each letter  "m: e: a: s: u: r: i: n: g:"

i thought i could have vox right the word to a text file and then have it add the semicolon and space after each letter but after messing around with vox the only way i could think of do this would be to have a batch or python script do it for me but i don't know enough about batch to do it my self and i don't know python at all. so i thought i would look here to see if anyone had a better idea on how to get this to work


simply put
me :"how do you spell measuring"
vox: "meausuring, m e a s u r i n g" with OSD

any help would be great
thanks

jitterjames

Easy one if you know how to use RegEx!

<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.1.2.0-->
<command id="374" name="how do you spell" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
  <action>
    <cmdType>Results.SetLastResult</cmdType>
    <params>
      <param>{1}</param>
    </params>
    <cmdRepeat>1</cmdRepeat>
  </action>
  <action>
    <cmdType>Results.RegExReplace</cmdType>
    <params>
      <param>(\w)</param>
      <param> $1 -</param>
    </params>
    <cmdRepeat>1</cmdRepeat>
  </action>
  <action>
    <cmdType>Results.RegExReplace</cmdType>
    <params>
      <param>-$</param>
    </params>
    <cmdRepeat>1</cmdRepeat>
  </action>
  <action>
    <cmdType>OSD.ShowText</cmdType>
    <params>
      <param>{LastResult}</param>
      <param>8000</param>
    </params>
    <cmdRepeat>1</cmdRepeat>
  </action>
  <action>
    <cmdType>TTS.Speak</cmdType>
    <params>
      <param>{1}, is spelled. {LastResult}</param>
    </params>
    <cmdRepeat>1</cmdRepeat>
  </action>
  <phrase>how do you spell</phrase>
  <payloadDictation>payloadDictation: Regular</payloadDictation>
</command>


In the making of this command I noticed that there is a bug in the latest beta when you try to create a new PayloadDictation in a command.  :bonk

I will try to release a new version today with a fix.  If you copy and paste or load an old command it should still work normally.

nime5ter

Since there's more than one way to skin a cat, here's my preferred solution:

<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.1.2.1-->
<command id="349" name="How do you spell {1}" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
  <action>
    <cmdType>Results.RegEx</cmdType>
    <params>
      <param>(\w)</param>
      <param />
      <param>{1}</param>
    </params>
    <cmdRepeat>1</cmdRepeat>
  </action>
  <action>
    <cmdType>Results.MatchConcat</cmdType>
    <params>
      <param> - </param>
    </params>
    <cmdRepeat>1</cmdRepeat>
  </action>
  <action>
    <cmdType>OSD.ShowText</cmdType>
    <params>
      <param>{LastResult}</param>
      <param>7000</param>
    </params>
    <cmdRepeat>1</cmdRepeat>
  </action>
  <action>
    <cmdType>TTS.Speak</cmdType>
    <params>
      <param>{1}, is spelt, {LastResult}</param>
    </params>
    <cmdRepeat>1</cmdRepeat>
  </action>
  <phrase>How do you spell</phrase>
  <payloadDictation>payloadDictation: Regular</payloadDictation>
</command>


Take your pick. :)
TIPS: POST VC VERSION #. Explain what you want VC to do. Say what you've tried & what happened, or post a video demo. Attach VC log. Link to instructions followed.  Post your command (xml)

PegLegTV

wow thanks, they both work great and a lot easier then what i was thinking i would have to do, i knew someone would have a better way to do it then i was thinking

thanks again

nime5ter

#4
Glad they meet your needs.

For VC users who may not be familiar with how regular expressions work, the above commands work as follows:

In each case, the word we want to spell is passed to the command (macro) as payload 1 --> {1} .

James's version:

1. He tells VC to make {LastResult} = {1}. This is needed for his next action, which only operates on the variable {LastResult}.

2. He tells VC to look for a particular regular expression pattern in {LastResult}, and to capture that pattern:
  - \w is RegEx speak for "any word character". Placing this in brackets is what tells VC to capture and store that pattern every time it is found.
-  in the second parameter, he tells VC to replace each match of pattern "\w" with " (matched character)"+ " -"

(see http://voxcommando.com/mediawiki/index.php?title=Actions#RegExReplace)

3. In the third action, he's chosen to correct the minor problem of the last matched character also being followed by " -", which doesn't look so nice in the OSD message. This action looks for dash character that is at the end of the string, and replaces it with nothing.

My version:

1. Using Results.RegEx, I have the option of telling VC to search for a pattern in a string other than {LastResult}. Because of this, I'm able to directly look for and capture the pattern "\w" in {1}.

2. In the next action I concatenate together all the matches found, adding the delimiter " - " between the matches to create one string of the form: "\w - \w - \w". This concatenated string is now my {LastResult}.
(see http://voxcommando.com/mediawiki/index.php?title=Actions#MatchConcat)

---------------------
A cheat sheet to learn common regular expressions: http://www.mikesdotnetting.com/article/46/c-regular-expressions-cheat-sheet.

The RegEx tool in VoxCommando actually includes a link to that cheat sheet and a couple other online resources.
TIPS: POST VC VERSION #. Explain what you want VC to do. Say what you've tried & what happened, or post a video demo. Attach VC log. Link to instructions followed.  Post your command (xml)

Kalle

@ nime5ter: Thank you for the inspiration  ;)
I think you have a better idea for the RegEx  ::hmm

Here is a group which contains following commands: spelling a word, spelling the word again , noun for a word, synonyms for a word
Copy and paste the code in your VC command tree and have fun.

<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.1.2.3-->
<commandGroup open="True" name="spelling a word" enabled="True" prefix="" priority="0" requiredProcess="" description="">
  <command id="359" name="How do you spell {1}" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
    <action>
      <cmdType>Results.RegEx</cmdType>
      <params>
        <param>(\w)</param>
        <param />
        <param>{1}</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>Results.MatchConcat</cmdType>
      <params>
        <param> - </param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>OSD.ShowText</cmdType>
      <params>
        <param>{LastResult}</param>
        <param>7000</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>TTS.Speak</cmdType>
      <params>
        <param>{1} is spelt, {LastResult}</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>Results.SetVar</cmdType>
      <params>
        <param>spell</param>
        <param>{1} is spelt, {LastResult}</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <phrase>How do you spell</phrase>
    <payloadDictation>payloadDictation: Regular</payloadDictation>
  </command>
  <command id="386" name="How do you spell {1} repeat" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
    <action>
      <cmdType>OSD.ShowText</cmdType>
      <params>
        <param>{Var.spell}</param>
        <param>7000</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>TTS.Speak</cmdType>
      <params>
        <param>no problem, please listen again: {Var.spell}</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <phrase>can you repeat it, please repeat, can you spell it again, I have not heard right</phrase>
  </command>
  <command id="369" name="noun of" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
    <action>
      <cmdType>Scrape</cmdType>
      <params>
        <param>http://www.thesaurus.com/browse/{1}</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>Results.RegEx</cmdType>
      <params>
        <param>class="ttl"&gt;(\w.*?)&lt;</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <if ifBlockDisabled="False" ifNot="False">
      <ifType>(A)==(B)</ifType>
      <ifParams>{#M}&amp;&amp;0</ifParams>
      <then>
        <action>
          <cmdType>OSD.ShowText</cmdType>
          <params>
            <param>no match found</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>Sorry, no match found.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </then>
      <else>
        <action>
          <cmdType>OSD.ShowText</cmdType>
          <params>
            <param>{Match.1}</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>the noun of {1} is, {Match.1}</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </else>
    </if>
    <phrase>how is the noun of</phrase>
    <payloadDictation>payloadDictation: Regular</payloadDictation>
  </command>
  <command id="377" name="synonym" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
    <action>
      <cmdType>Scrape</cmdType>
      <params>
        <param>http://www.thesaurus.com/browse/{1}</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>Results.RegEx</cmdType>
      <params>
        <param>&lt;span.class="text"&gt;(.*?)&lt;</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>Results.MatchConcat</cmdType>
      <params>
        <param>, {CR}</param>
        <param>5</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <action>
      <cmdType>OSD.ShowText</cmdType>
      <params>
        <param>{LastResult}</param>
      </params>
      <cmdRepeat>1</cmdRepeat>
    </action>
    <if ifBlockDisabled="False" ifNot="False">
      <ifType>(A)==(B)</ifType>
      <ifParams>{#M}&amp;&amp;0</ifParams>
      <then>
        <action>
          <cmdType>OSD.ShowText</cmdType>
          <params>
            <param>no match found.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>TTS.SpeakSync</cmdType>
          <params>
            <param>Sorry, no match found.</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
        <action>
          <cmdType>VC.StopMacro</cmdType>
          <params />
          <cmdRepeat>1</cmdRepeat>
        </action>
      </then>
      <else />
    </if>
    <if ifBlockDisabled="False" ifNot="False">
      <ifType>(A)&lt;(B)</ifType>
      <ifParams>{#M}&amp;&amp;2</ifParams>
      <then>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>here are a synonym for {1}: {LastResult}</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </then>
      <else>
        <action>
          <cmdType>TTS.Speak</cmdType>
          <params>
            <param>here are some synonyms for {1}: {LastResult}</param>
          </params>
          <cmdRepeat>1</cmdRepeat>
        </action>
      </else>
    </if>
    <phrase>did you have synonyms for</phrase>
    <payloadDictation>payloadDictation: Regular</payloadDictation>
  </command>
</commandGroup>
***********  get excited and make things  **********

nime5ter

Fun additions. You've taken PegLeg's request to a whole new level. :)

The synonym command works really well.

For me, it is hard to say the word "synonym" (it often comes out "cinnamon"), so I would probably change that command phrase (or add the phrase), "What's another word for ..."

I think that for the other definition command ("noun" = "das Substantiv", nicht "die Definition"), Thesaurus.com may not be the best choice. Sometimes it gives a definition, but sometimes it only gives associated words instead. Maybe we could find a better website for definitions?

TIPS: POST VC VERSION #. Explain what you want VC to do. Say what you've tried & what happened, or post a video demo. Attach VC log. Link to instructions followed.  Post your command (xml)

Kalle

Yes, I'm complete with you. I used this website, because it was easy to ge a match with regex  :)
***********  get excited and make things  **********

nime5ter

Yes, the dictionary websites are messy. For definitions, it's probably more reliable to adapt one of our Wolfram Alpha or Wikipedia commands.
TIPS: POST VC VERSION #. Explain what you want VC to do. Say what you've tried & what happened, or post a video demo. Attach VC log. Link to instructions followed.  Post your command (xml)

PegLegTV

now that's cool, just have to make sure my kids don't use it to cheat on there vocabulary home work >:D  once again you guys go above and beyond thanks again    :yay