Ik heb een Python-code die spraak zal herkennen met behulp van de Google Stt-motor en me de resultaten teruggeven, maar ik krijg de resultaten in snaren met “Quotes”. Ik wil niet die citaten in mijn code zoals ik het zal gebruiken om vele commando’s uit te voeren en het werkt niet. Ik heb niets gedaan voor zover ik niets heb getroffen!
Dit is de functie in de Python-code die spraak zal herkennen:
def recog():
p = subprocess.Popen(['./speech-recog.sh'], stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
global out,err
out, err = p.communicate()
print out
Dit 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;' "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
Dit is overgenomen van Steven Hickson’s Voicecommand-programma gemaakt voor Raspberry Pi
Antwoord 1, autoriteit 100%
Gebruik gewoon tekenreeksmethoden .replace()
als ze overal voorkomen, of .strip()
als ze alleen aan het begin en/of einde voorkomen:
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('\"')
Antwoord 2, autoriteit 11%
U kunt hiervoor eval() gebruiken
>>> url = "'http address'"
>>> eval(url)
'http address'
hoewel eval() een risico vormt, denk ik dat het in deze context veilig is.
Antwoord 3, autoriteit 5%
Er zijn verschillende manieren waarop dit kan worden bereikt.
-
U kunt de ingebouwde tekenreeksfunctie
.replace()
gebruiken om alle aanhalingstekens in een bepaalde tekenreeks te vervangen:>>> s = '"abcd" efgh' >>> s.replace('"', '') 'abcd efgh' >>>
-
U kunt de tekenreeksfunctie
.join()
en een generatoruitdrukking gebruiken om alle aanhalingstekens uit een bepaalde tekenreeks te verwijderen:>>> s = '"abcd" efgh' >>> ''.join(c for c in s if c not in '"') 'abcd efgh' >>>
-
Je kunt een reguliere expressie gebruiken om alle aanhalingstekens uit een gegeven string te verwijderen. Dit heeft als bijkomend voordeel dat u controle heeft over wanneer en waar een offerte moet worden verwijderd:
>>> s = '"abcd" efgh' >>> import re >>> re.sub('"', '', s) 'abcd efgh' >>>
Antwoord 4, autoriteit 3%
if string.startswith('"'):
string = string[1:]
if string.endswith('"'):
string = string[:-1]
Antwoord 5, autoriteit 3%
De gemakkelijkste manier is:
s = '"sajdkasjdsaasdasdasds"'
import json
s = json.loads(s)
Antwoord 6, autoriteit 2%
Je kunt “aanhalingstekens” vervangen door een lege tekenreeks, zoals deze:
>>> a = '"sajdkasjdsak" "asdasdasds"'
>>> a
'"sajdkasjdsak" "asdasdasds"'
>>> a = a.replace('"', '')
>>> a
'sajdkasjdsak asdasdasds'
In jouw geval kun je hetzelfde doen voor de variabele out
.
Antwoord 7
Toevoegen aan de opmerking van @Christian:
Vervang alle enkele of dubbele aanhalingstekens in een tekenreeks:
s = "'asdfa sdfa'"
import re
re.sub("[\"\']", "", s)