2016-12-03 5 views
12

У меня есть код python, который распознает речь с помощью движка Google STT и вернет мне результаты, но я получаю результаты в строках с «кавычками». Мне не нужны эти кавычки в моем коде, поскольку я буду использовать его для запуска многих команд, и это не сработает. Я ничего не пробовал, пока не пытался ничего попробовать! Это функция в коде питона, который будет распознавать речь:Удалить цитаты из String в 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 "[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 

Это была взята из программы Стивена Хиксон Голосовая сделал для Raspberry Pi

+0

Вы имеете в виду дополнительные кавычки для кавычек, представляющих строку в Python? Включите команду и вывод, которые у вас есть, и то, что вы специально хотите. – 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

Вы можете заменить символы «quote» пустой строкой, например:

>>> 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

Для этого используются строковые методы 'strip(), lstrip(), rstrip(). – smci

+0

'lstrip()' удаляет все символы одного и того же типа слева. ''" "" "hello'.lstrip ('" ') =' hello''. Возможно, это не то, что хочет OP. –

+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' 
    >>> 
    
  • Вы можете использовать регулярные выражения, чтобы удалить все цитаты из г строка. Это имеет дополнительное преимущество, что позволяет контролировать, когда и где цитата должна быть удалена:

    >>> s = '"abcd" efgh' 
    >>> import re 
    >>> re.sub('"', '', s) 
    'abcd efgh' 
    >>> 
    
Смежные вопросы