Google STTエンジンを使用して音声を認識し、結果を返すpythonコードがありますが、「引用符」を含む文字列で結果を取得します。私はそれを使用して多くのコマンドを実行し、機能しないため、コード内にその引用符は必要ありません。何も試していないので、今まで何も試していない!これは、音声を認識するpythonコード内の関数です。
def recog():
p = subprocess.Popen(['./speech-recog.sh'], stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
global out,err
out, err = p.communicate()
print out
これはspeech-recog.shです。
#!/bin/bash
hardware="plughw:1,0"
duration="3"
lang="en"
hw_bool=0
dur_bool=0
lang_bool=0
for var in "$@"
do
if [ "$var" == "-D" ] ; then
hw_bool=1
Elif [ "$var" == "-d" ] ; then
dur_bool=1
Elif [ "$var" == "-l" ] ; then
lang_bool=1
Elif [ $hw_bool == 1 ] ; then
hw_bool=0
hardware="$var"
Elif [ $dur_bool == 1 ] ; then
dur_bool=0
duration="$var"
Elif [ $lang_bool == 1 ] ; then
lang_bool=0
lang="$var"
else
echo "Invalid option, valid options are -D for hardware and -d for duration"
fi
done
arecord -D $hardware -f S16_LE -t wav -d $duration -r 16000 | flac - -f --best --sample-rate 16000 -o /dev/shm/out.flac 1>/dev/shm/voice.log 2>/dev/shm/voice.log; curl -X POST --data-binary @/dev/shm/out.flac --user-agent 'Mozilla/5.0' --header 'Content-Type: audio/x-flac; rate=16000;' "https://www.google.com/speech-api/v2/recognize?output=json&lang=$lang&key=key&client=Mozilla/5.0" | sed -e 's/[{}]/''/g' | awk -F":" '{print $4}' | awk -F"," '{print $1}' | tr -d '\n'
rm /dev/shm/out.flac
これは、Raspberry Pi用に作成されたSteven HicksonのVoicecommand Programから取られました。
文字列メソッド.replace()
を使用するのは、それらが全体に発生する場合、または.strip()
が開始および/または終了時にのみ発生する場合です:
a = '"sajdkasjdsak" "asdasdasds"'
a = a.replace('"', '')
'sajdkasjdsak asdasdasds'
# or, if they only occur at start and end...
a = a.strip('\"')
'sajdkasjdsak" "asdasdasds'
# or, if they only occur at start...
a = a.lstrip('\"')
# or, if they only occur at end...
a = a.rstrip('\"')
この目的のためにeval()を使用できます
>>> url = "'http address'"
>>> eval(url)
'http address'
eval()はリスクをもたらしますが、この文脈では安全だと思います。
これにはいくつかの方法があります。
組み込みの文字列関数.replace()
を使用して、指定された文字列内のすべての引用符を置換できます。
>>> s = '"abcd" efgh'
>>> s.replace('"', '')
'abcd efgh'
>>>
文字列関数.join()
とジェネレーター式を使用して、特定の文字列からすべての引用符を削除できます。
>>> s = '"abcd" efgh'
>>> ''.join(c for c in s if c not in '"')
'abcd efgh'
>>>
正規表現を使用して、特定の文字列からすべての引用符を削除できます。これには、見積りをいつ、どこで削除するかを制御できるという利点があります。
>>> s = '"abcd" efgh'
>>> import re
>>> re.sub('"', '', s)
'abcd efgh'
>>>
次のように、「引用」文字を空の文字列に置き換えることができます。
>>> a = '"sajdkasjdsak" "asdasdasds"'
>>> a
'"sajdkasjdsak" "asdasdasds"'
>>> a = a.replace('"', '')
>>> a
'sajdkasjdsak asdasdasds'
あなたの場合、out
変数についても同じことができます。
if string.startswith('"'):
string = string[1:]
if string.endswith('"'):
string = string[:-1]