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:
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:
#!/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;' "" | 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
28 Answers
Just use string methods .replace() if they occur throughout, or .strip() if they only occur at the start and/or finish:
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('\"') 3You can use eval() for this purpose
>>> url = "'http address'" >>> eval(url) 'http address' while eval() poses risk , i think in this context it is safe.
4There 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:>>> 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:>>> 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' >>>
The easiest way is:
s = '"sajdkasjdsaasdasdasds"' import json s = json.loads(s) 3if string.startswith('"'): string = string[1:] if string.endswith('"'): string = string[:-1] 4You can replace "quote" characters with an empty string, like this:
>>> a = '"sajdkasjdsak" "asdasdasds"' >>> a '"sajdkasjdsak" "asdasdasds"' >>> a = a.replace('"', '') >>> a 'sajdkasjdsak asdasdasds' In your case, you can do the same for out variable.
To add to @Christian's comment:
Replace all single or double quotes in a string:
s = "'asdfa sdfa'" import re re.sub("[\"\']", "", s) This will remove the first and last quotes in your string
import ast example = '"asdfasdfasdf"' result = ast.literal_eval(example) print(result) Output:
asdfasdfasdf