2017-12-09 2 views
1

Ich versuche, eine Textdatei aus der Spracherkennung mit Audio in . WAV Format zu erstellen. Das ist der Untertitel. Ich habe bereits die Textdatei, aber das Problem ist, dass der Text in einer langen Zeile produziert wird.Schreiben einer Textdatei Zeile für Zeile aus der Spracherkennung mit Audio

Ich möchte sie Zeile für Zeile (vielleicht nach 5 Worten wird es in die nächste Zeile gehen), weil ich den Untertitel in der TKinter Windows anzeigen möchte. wie ich schon sagte, ich habe sie schon auf tkinter windows angezeigt, nur das problem ist die textdatei, die nicht in linien nach linien produziert. Bitte hilf mir. Dies ist für mein letztes Jahr Projekt, da ich noch ein Student des Grades bin.

vielleicht können Sie ein Array schreiben, um die Textdatei aus Audio Zeile für Zeile zu erstellen/schreiben. Ich wiederhole ich möchte "LINE by LINE".

Dies sind die Fehler, die ich bekam. Bitte hilf mir.

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

immer volle Fehlermeldung (Traceback) in Frage gestellt (als Text, nicht Screenshot). Es gibt andere nützliche Informationen. – furas

+0

wird für das nächste Mal tun. Sorry, bcs bin neu hier drin. trotzdem danke, dass du sie für mich redest. – jennisa

Antwort

1

Ihre Fehler auf b = a.split("\n\n") ist, weil Sie scheinen zu denken, dass f.writelines() etwas zurück. Tut es nicht, also a hat den Wert None und kann nicht geteilt werden.

Die Dokumentation sagt dies über das, was writelines() tut:

writelines (Linien)

eine Liste von Linien in den Stream schreiben. Linientrennzeichen werden nicht hinzugefügt, daher ist es üblich, dass für jede der bereitgestellten Linien am Ende eine Trennlinie vorhanden ist.

Also, wenn Sie es wollen Zeilenvorschübe in der Ausgabedatei sein, müssen Sie sie setzen dort vor Sie writelines() nennen.

Aber Sie sollten überhaupt nicht writelines() aufrufen, weil es eine Liste von Zeichenfolgen erwartet, und recognize_google() gibt eine Zeichenfolge zurück.

Da Sie eine lange Zeichenfolge erhalten und 5 pro Zeile möchten, müssen Sie den Text in Zeilen mit 5 Wörtern aufteilen und write() für jede Zeile aufrufen. So etwas wie das:

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

danke, ich habe versucht, wie diese Methode, wie Sie sagten, aber es scheint ein Alphabet pro Zeile zu sein. Ich möchte, dass sie wie ein Satz erscheinen, der 5 Wörter enthält, und nach 5 Wörtern wird es in die nächste Zeile gehen. Kannst du die Array-Methode anzeigen? – jennisa

+0

Bearbeitet. Ich sah, dass Ihr Code 'writelines()' aufruft und dummerweise angenommen wird, dass Sie ihm eine Liste von Strings übergeben, was er erwartet. – BoarGules

+0

DANKE soooooo viel! Sie helfen mir bereits einen Schritt näher, um mein Abschlussjahr abzuschließen. :))))) Ich hab es geschafft! – jennisa

Verwandte Themen