2016-12-03 4 views
12

में स्ट्रिंग से उद्धरण निकालें मेरे पास एक पायथन कोड है जो Google एसटीटी इंजन का उपयोग करके भाषण को पहचान लेगा और मुझे परिणाम वापस देगा लेकिन मुझे परिणाम "उद्धरण" के साथ तारों में मिलेंगे। मैं अपने कोड में उद्धरण नहीं चाहता क्योंकि मैं इसे कई कमांड चलाने के लिए उपयोग करूंगा और यह काम नहीं करता है। मैंने अब तक कुछ भी कोशिश नहीं की है क्योंकि मुझे कोशिश करने के लिए कुछ भी नहीं मिला! यह अजगर कोड है कि भाषण पहचान लेंगे में समारोह है:पायथन

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 "[email protected]" 
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 

यह स्टीवन हिक्सन के Voicecommand कार्यक्रम से लिया गया है के लिए रास्पबेरी Pi

बनाया
+0

क्या आपके पास पाइथन में एक स्ट्रिंग का प्रतिनिधित्व करने वाले उद्धरणों के अतिरिक्त उद्धरण हैं? आपके पास कमांड और आउटपुट शामिल करें, और जो आप विशेष रूप से चाहते हैं। – ivan7707

+0

"[python] स्ट्रिंग कोट्स को हटाने के लिए कई डुप्लिकेट हैं" – smci

उत्तर

28

बस स्ट्रिंग तरीकों .replace() का उपयोग करता है, तो वे भर में पाए जाते हैं, या .strip() अगर वे केवल शुरू में पाए जाते हैं और यह बताने की आप कब और कहाँ एक उद्धरण हटा दिया जाना चाहिए पर नियंत्रण है अतिरिक्त लाभ है खत्म करें:

a = '"sajdkasjdsak" "asdasdasds"' 

a.replace('"', '') 
'sajdkasjdsak asdasdasds' 

# or, if they only occur at start and finish 
a.strip('\'') 
'sajdkasjdsak" "asdasdasds' 
1

आप रिक्त स्ट्रिंग वाले "उद्धरण" वर्णों को प्रतिस्थापित कर सकते हैं, जैसे:

>>> a = '"sajdkasjdsak" "asdasdasds"' 
>>> a 
'"sajdkasjdsak" "asdasdasds"' 
>>> a = a.replace('"', '') 
>>> a 
'sajdkasjdsak asdasdasds' 

अपने मामले में, आप out चर के लिए भी ऐसा कर सकते हैं।

1
if string.startswith('"'): 
    string = string[1:] 

if string.endswith('"'): 
    string = string[:-1] 
+3

स्ट्रिंग विधियों 'स्ट्रिप(), lstrip(), rstrip() 'इसके लिए हैं। – smci

+0

'lstrip() 'बाएं से उसी प्रकार के सभी पात्रों को हटा देता है। '' '"" "हैलो'। lstrip ('' ') =' हैलो '। यह ओपी चाहता है जो नहीं हो सकता है। –

+0

इसके अलावा, क्या आपको नहीं लगता कि यह दृष्टिकोण थोड़ा सा बेवकूफ है? क्या होगा यदि वह उद्धरण जो वह चाहता है हटाएं उसकी स्ट्रिंग के बीच में हैं? आपका समाधान टूट जाएगा। –

2

यह कई तरीके हैं जिन्हें पूरा किया जा सकता है।

  • आप किसी एक स्ट्रिंग में उद्धरण की सभी घटनाओं को बदलने के लिए निर्मित स्ट्रिंग समारोह .replace() का उपयोग कर सकते:

    >>> s = '"abcd" efgh' 
    >>> s.replace('"', '') 
    'abcd efgh' 
    >>> 
    
  • आप सभी को दूर करने के स्ट्रिंग समारोह .join() और एक जनरेटर अभिव्यक्ति का उपयोग कर सकते एक दिया स्ट्रिंग से बोलियां:

    >>> s = '"abcd" efgh' 
    >>> ''.join(c for c in s if c not in '"') 
    'abcd efgh' 
    >>> 
    
  • आप जी से सभी उद्धरण को दूर करने के लिए रेगुलर एक्सप्रेशन का उपयोग कर सकते हैं iven स्ट्रिंग।

    >>> s = '"abcd" efgh' 
    >>> import re 
    >>> re.sub('"', '', s) 
    'abcd efgh' 
    >>>