Hello,
Just recently started using Vox and its wonderful!!
I was wondering, how do I dictate numbers?
I tried saying 11 but it came out as "eleven" (same result in windows sr), then I tried "numeral 11" which works in windows sr to produce "11" but in Vox it came out as "numeral eleven"
Am I missing something, or is there a way to convert it to number?
Thanks!
edit: For background this is to put a digit into a map field.
Hi Methos, Welcome to VC.
It kind of depends on how you want to use it. If you want to be able to mix it in with normal dictation words you will have some difficulty, but if you are using it as a stand alone command you can just using spelling dictation instead of normal dictation.
We just happened to be discussing something similar today and you can grab the xml for the command here:
http://voxcommando.com/forum/index.php?topic=1645.0
Note: you can double-click a payload dictation node in the tree to toggle it between spelling and normal dictation mode.
Thanks for the quick response.
I'll try that out, but to be sure if I want to output "76" I would have to say "7" and then "6", correct? Is there a way to say "76"?
Not with dictation, but you can say "seventy six", just don't pronounce the "ty". :)
Depending on your needs you may want to use a payload range or a payload list, but only for a limited set of numbers.
Actually it is pretty simple to convert words to a number using a short python script. You must first enable the python plugin to use this.
Here is the python code:
def text2int(textnum, numwords={}):
if not numwords:
units = [
"zero", "one", "two", "three", "four", "five", "six", "seven", "eight",
"nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen",
"sixteen", "seventeen", "eighteen", "nineteen",
]
tens = ["", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"]
scales = ["hundred", "thousand", "million", "billion", "trillion"]
numwords["and"] = (1, 0)
for idx, word in enumerate(units): numwords[word] = (1, idx)
for idx, word in enumerate(tens): numwords[word] = (1, idx * 10)
for idx, word in enumerate(scales): numwords[word] = (10 ** (idx * 3 or 2), 0)
current = result = 0
for word in textnum.split():
if word not in numwords:
raise Exception("Illegal word: " + word)
scale, increment = numwords[word]
current = current * scale + increment
if scale > 100:
result += current
current = 0
return result + current
I "borrowed" this python code from here: http://stackoverflow.com/questions/493174/is-there-a-way-to-convert-number-words-to-integers-python
It works great. Once you have defined the function by running this code once you can use the PY.ExecString action any time to convert your payload
<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.0.0.0-->
<command id="947" name="text to num (python)" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>PY.ExecString</cmdType>
<params>
<param>result=text2int("thirty one thousand three hundred thirty seven")</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>OSD.ShowText</cmdType>
<params>
<param>{LastResult}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</command>
Its funny, I found this exact same script. It works really well.
Although I am having an issue with voxwav app (free version) when using this script. It causes it to run twice. I'm trying to nail down a procedure to replicate the error (trying to rule out that it also may be other things I'm doing).
Will let you know.
That sounds very strange. Usually looking at the history panel and/or log is a good place to start.