I have a python Code that will recognize speech using the Google STT engine and give me back the results but I get the results in strings with "quotes". I don't want that quotes in my code as I will use it to run many commands and it doesn't work. I haven't tried anything so far as I didn't get anything to try! This is the function in the python code that will recognize speech:
我有一个python代码,可以识别使用谷歌STT引擎的语音并给我回复结果,但我得到的结果是带有“引号”的字符串。我不想在我的代码中使用引号,因为我将使用它来运行许多命令,但它不起作用。到目前为止,我没有尝试任何东西,因为我没有尝试任何东西!这是python代码中将识别语音的函数:
def recog():
p = subprocess.Popen(['./speech-recog.sh'], stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
global out,err
out, err = p.communicate()
print out
This is speech-recog.sh:
这是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
This was taken from Steven Hickson's Voicecommand Program made for Raspberry Pi
这取自Steven Hickson为Raspberry Pi制作的Voicecommand Program
5 个解决方案
#1
44
Just use string methods .replace()
if they occur throughout, or .strip()
if they only occur at the start and finish:
如果它们在整个过程中出现,只需使用字符串方法.replace(),如果它们仅在开始和结束时出现,则使用.strip():
a = '"sajdkasjdsak" "asdasdasds"'
a.replace('"', '')
'sajdkasjdsak asdasdasds'
# or, if they only occur at start and finish
a.strip('\"')
'sajdkasjdsak" "asdasdasds'
#2
3
You can replace "quote" characters with an empty string, like this:
您可以用空字符串替换“quote”字符,如下所示:
>>> a = '"sajdkasjdsak" "asdasdasds"'
>>> a
'"sajdkasjdsak" "asdasdasds"'
>>> a = a.replace('"', '')
>>> a
'sajdkasjdsak asdasdasds'
In your case, you can do the same for out
variable.
在您的情况下,您可以对out变量执行相同的操作。
#3
3
There are several ways this can be accomplished.
有几种方法可以实现。
-
You can make use of the builtin string function
.replace()
to replace all occurrences of quotes in a given string:您可以使用内置字符串函数.replace()来替换给定字符串中出现的所有引号:
>>> s = '"abcd" efgh' >>> s.replace('"', '') 'abcd efgh' >>>
-
You can use the string function
.join()
and a generator expression to remove all quotes from a given string:您可以使用字符串函数.join()和生成器表达式来删除给定字符串中的所有引号:
>>> s = '"abcd" efgh' >>> ''.join(c for c in s if c not in '"') 'abcd efgh' >>>
-
You can use a regular expression to remove all quotes from given string. This has the added advantage of letting you have control over when and where a quote should be deleted:
您可以使用正则表达式删除给定字符串中的所有引号。这样做的另一个好处是可以控制删除引号的时间和位置:
>>> s = '"abcd" efgh' >>> import re >>> re.sub('"', '', s) 'abcd efgh' >>>
#4
2
if string.startswith('"'):
string = string[1:]
if string.endswith('"'):
string = string[:-1]
#5
2
You can use eval() for this purpose
您可以使用eval()来实现此目的
>>> url = "'http address'"
>>> eval(url)
'http address'
while eval() poses risk , i think in this context it is safe.
虽然eval()带来了风险,但我认为在这种情况下它是安全的。
#1
44
Just use string methods .replace()
if they occur throughout, or .strip()
if they only occur at the start and finish:
如果它们在整个过程中出现,只需使用字符串方法.replace(),如果它们仅在开始和结束时出现,则使用.strip():
a = '"sajdkasjdsak" "asdasdasds"'
a.replace('"', '')
'sajdkasjdsak asdasdasds'
# or, if they only occur at start and finish
a.strip('\"')
'sajdkasjdsak" "asdasdasds'
#2
3
You can replace "quote" characters with an empty string, like this:
您可以用空字符串替换“quote”字符,如下所示:
>>> a = '"sajdkasjdsak" "asdasdasds"'
>>> a
'"sajdkasjdsak" "asdasdasds"'
>>> a = a.replace('"', '')
>>> a
'sajdkasjdsak asdasdasds'
In your case, you can do the same for out
variable.
在您的情况下,您可以对out变量执行相同的操作。
#3
3
There are several ways this can be accomplished.
有几种方法可以实现。
-
You can make use of the builtin string function
.replace()
to replace all occurrences of quotes in a given string:您可以使用内置字符串函数.replace()来替换给定字符串中出现的所有引号:
>>> s = '"abcd" efgh' >>> s.replace('"', '') 'abcd efgh' >>>
-
You can use the string function
.join()
and a generator expression to remove all quotes from a given string:您可以使用字符串函数.join()和生成器表达式来删除给定字符串中的所有引号:
>>> s = '"abcd" efgh' >>> ''.join(c for c in s if c not in '"') 'abcd efgh' >>>
-
You can use a regular expression to remove all quotes from given string. This has the added advantage of letting you have control over when and where a quote should be deleted:
您可以使用正则表达式删除给定字符串中的所有引号。这样做的另一个好处是可以控制删除引号的时间和位置:
>>> s = '"abcd" efgh' >>> import re >>> re.sub('"', '', s) 'abcd efgh' >>>
#4
2
if string.startswith('"'):
string = string[1:]
if string.endswith('"'):
string = string[:-1]
#5
2
You can use eval() for this purpose
您可以使用eval()来实现此目的
>>> url = "'http address'"
>>> eval(url)
'http address'
while eval() poses risk , i think in this context it is safe.
虽然eval()带来了风险,但我认为在这种情况下它是安全的。