使用音频从语音识别方法逐行写入文本文件

时间:2017-12-09 14:20:51

标签: python tkinter python-3.6

我正在尝试使用 .wav 格式的音频从语音识别中生成文本文件。这是为了获得副标题。我已经有了文本文件,但现在的问题是文本是在longgggg行中生成的。

我希望它们逐行排列(也许在5个单词之后它将转到下一行),因为我想在tkinter窗口中显示副标题。正如我所说,我已经让他们出现在tkinter窗口,只有问题是文本文件不是逐行产生的。请帮助我。这是我最后一年的项目,因为我还是学位的学生。

    AUDIO_FILE = path.get()

    r= sr.Recognizer()
    with sr.AudioFile(AUDIO_FILE) as source:
        audio = r.record(source)

    try:
        filename = ".txt"
        f = open( filename , "w+")

        a = f.writelines(r.recognize_google(audio))
        b = a.split("\n\n") 
        b[:] = (value for value in b if value is not '\t')
        f.close()

    except sr.UnknownValueError:
        print("Google could not understand audio")
    except sr.RequestError as e:
        print("Google error; {0}".format(e)) 

    return filename

也许你们知道如何编写一个数组来逐行生成/写入音频文本文件。我重复我想要" LINE by LINE"。

这些是我得到的错误。请帮我。

b = a.split("\n\n")
AttributeError: 'NoneType' object has no attribute 'split'

1 个答案:

答案 0 :(得分:1)

b = a.split("\n\n")上的错误是因为您似乎认为f.writelines()会返回一些内容。它没有,因此a的值为None且无法拆分。

文档说明了writelines()的作用:

  

writelines

     

将一个行列表写入流中。不添加行分隔符,因此通常为每个提供的行提供一行   最后的分隔符。

因此,如果您希望输出文件中有换行符,则必须在之前将它们放在中,然后调用writelines()

但你根本不应该调用writelines(),因为它需要一个字符串列表,而recognize_google()会返回一个字符串。

由于你得到一个长串的单词,并且你想要每行5个,你需要将文本分成5行单词并为每行调用write()。像这样:

recognized_text = r.recognize_google(audio)
remainder = recognized_text.split()
while remainder:
    line, remainder = remainder[:5], remainder[5:]
    f.write(' '.join(line) + "\n")