需要有关Windows语音识别脚本的帮助才能复合字符串

时间:2009-10-04 22:27:46

标签: string windows-vista speech-recognition spaces

以下Windows语音识别命令强制语音识别引擎使用文字文本(“所有七十六人支付五美元”)而不是默认值(“所有76人支付5美元”)。

我正在尝试调整此命令以删除单词之间的空格,以便我可以使用语音进行编程,例如:

"Security Manager"
-> "Security Manager"
"Compound That"
-> "SecurityManager"

我认为这可行的方法是使用正则表达式删除所选文本之间的空格。因此,在以下代码中:

  <command priority="5">
    <listenFor>literal that</listenFor>
    <emulateRecognition>select that</emulateRecognition>
    <sendKeys>{250 WAIT}{{CTRL}}c{250 WAIT}</sendKeys>
      <!-- Works by first inserting the word " literal " before each word
           example "all 76 people paid $5"
           is emulated as "literal all literal 76 literal people literal paid literal $5"
           which produces the result "all seventy six people paid five dollars"

           EmulateRecognition can fail if the text contains improper formatting or nonsense words
           (which can easily happen if only part of a word in the document is included in the text selection).
           When the failure can be handled by "On Error Resume Next", such as EmulateRecognition("literal s")
           or EmulateRecognition("multiple  spaces"), we restore the original text and show feedback message.
           Unfortunately, some failures, such as EmulateRecognition("nonsens"), cause macros to immediately
           halt. This is why "replace that with " is used. Either it succeeds, or it fails non-destructively
           (before any text is deleted). Unfortunately, this can be confusing for the user because the macro
           can fail without doing anything visible to the user (no changes to the text, and no SetTextFeedback.)
      -->
    <script language="VBScript">
      <![CDATA[
      that = Application.clipboardData.GetData("text")
      Set regEx = New RegExp
      regEx.Pattern = "[^\s\w,;:]"
      If regEx.Test(that) Then
        Application.SetTextFeedback("Try again without any punctuation selected")
      Else
        regEx.Pattern = "(\s) *(\S)"
        regEx.Global = True
        that = regEx.Replace(" " & that, "$1literal $2")
        On Error Resume Next
        Application.EmulateRecognition("replace that with" & that)
        If 0 <> Err.Number Then
          Application.SetTextFeedback("Try again with only the digits selected")
        End If
      End If
    ]]>
    </script>
  </command>

而不是写这个:

        regEx.Pattern = "(\s) *(\S)"
        regEx.Global = True
        that = regEx.Replace(" " & that, "$1literal $2")

我认为需要使用一些其他正则表达式模式来提取单词之间的空格并在新输出中将单词推到一起。

我不知道该怎么做。如果有人有任何建议,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

由于您已经在使用'literal'命令,因此您还可以使用'nospace'命令来抑制单词之间的空格。请参阅我博客上的examples