以下のWindows音声認識のコマンドは、音声認識エンジンにデフォルト(「76人全員が5ドルを支払った」)の代わりにリテラルテキスト(「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")
単語間の空白を抽出し、新しい出力で単語を一緒にプッシュする他の正規表現パターンを使用する必要があると思います。
どうすればいいのかわかりません。誰か提案があれば幸いです。