Python Benötige Unterstützung bei der Benutzung eines fertigen Programms (deep-translator)

wickedgonewild

Commander
Registriert
Sep. 2004
Beiträge
2.656
Hallo,

ich bin weder Programmierer noch versiert im Umgang mit Python. Ich möchte gerne mehrere Dateien vom englischen ins deutsche übersetzten lassen und das kostenfrei. Alternativlos geht das mit dem Programm hier

https://pypi.org/project/deep-translator/#id1 (Abschnitt Google Translate)

PIP habe ich installiert und auch das Tool via "pip install deep-translator", ebenso Python (ist auch in PATH hinterlegt).

Nach der Installation gelingt es mir das Programm wie folgt aufzurufen

Code:
PS C:\WINDOWS\system32> deep-translator.exe
Usage: deep-translator [OPTIONS] COMMAND [ARGS]...

Options:
  --help  Show this message and exit.

Commands:
  languages  Retrieve the list of available languages from the given...
  list       Lists available translators.
  translate  Use TRANSLATOR to translate source material into another...
PS C:\WINDOWS\system32>

und auch die Übersetzung mit dem einfachen Befehl (hier mit Ausgabe) funktioniert

Code:
PS C:\WINDOWS\system32> deep-translator translate -src "en" -tgt "de" -txt "keep it up, you are awesome"
 | Translation from en to de |
Translated text:
 mach weiter so du bist toll
PS C:\WINDOWS\system32>

Allerdings komme ich unter anderem mit den "from" Befehlen nicht klar, diese quittieren mir mit Fehler in meiner Shell (Powershell mit elevated rights). Ich denke hier bin ich einfach zu blöd das Notwendige korrekt anzuwenden.

"Fehler" wie folgt

Code:
PS C:\WINDOWS\system32> from deep_translator import GoogleTranslator
In Zeile:1 Zeichen:1
+ from deep_translator import GoogleTranslator
+ ~~~~
Das Schlüsselwort "from" wird in dieser Version der Sprache nicht unterstützt.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : ReservedKeywordNotAllowed

-----

Mein Ziel ist es (ohne API Key, der bei fixen Angaben der Sprache(n) (hier en nach de) wohl nicht notwendig ist), mehrere Dateien wie folgt zu übersetzen.

https://pypi.org/project/deep-translator/#id21 (Abschnitt Google Translate)

Translate from file

translated = GoogleTranslator(source='en', target='de').translate_file('path/to/file')

Kann mir hierbei bitte jemand helfen oder mir einen Denkanstoß geben? Vielen Dank.

Die zu übersetzenden Dateien sind zahlreiche englische SRT (Untertitel) Dateien. Die sonstigen Angebote im Netz sind auf einzelne Dateien beschränkt oder kostenpflichtig (und z. T. direkt mit Abo).
 
Zuletzt bearbeitet:
der code gehört in eine eigene datei (z.b. "my_translator.py"), die du dann mit python aufrufst, also z.b. "python c:\my_translator.py". die powershell kann mit dem python-code nichts anfangen.
 
  • Gefällt mir
Reaktionen: wickedgonewild
Das nenne ich einen Denkanstoß. Ich probiere und berichte. Danke.
 
Imho sollte das ja kein großes Drama sein, aber ich bekomm es nicht hin

Code:
from deep_translator import GoogleTranslator
translated = GoogleTranslator(source='en', target='de').translate_file('./test2.txt')

ist der Inhalt des Scriptes. Die Datei liegt im selben Pfad wie das Script (Backslash schmeckt Python nicht?), ich habe es aber auch aus einem anderen Pfad heraus probiert.

Das Script per Doppelklick aufgerufen macht... nichts. Per cmd

Code:
python.exe new.py

gibt es ebenfalls keine Ausgabe (auch keinen Fehler). Mir ist auch nicht ganz klar, wie die Ausgabe (bei einer Datei mit mehreren Zeilen) aussehen soll.

Das Beispiel

Code:
from deep_translator import GoogleTranslator
translated = GoogleTranslator(source='en', target='de').translate("keep it up, you are awesome")

funktioniert ebenfalls nicht (keine Ausgabe).

Habt ihr noch eine Idee? Meine Python Version ist 3.10.0 (x64), pip 21.3.1.
 
wickedgonewild schrieb:
(Backslash schmeckt Python nicht?)
backslashes verwendet man ja auch eigentlich auch, um zeichen zu "escapen". \n stellt z.b. das steuerzeichen für ein "newline" (enter) dar. deswegen waren backslashes in pfadangaben nie eine gute idee und selbst windows versteht wie unixoide systeme den normalen slash in pfaden.

wickedgonewild schrieb:
gibt es ebenfalls keine Ausgabe (auch keinen Fehler).
dann hat dein code funktioniert :)

wickedgonewild schrieb:
Code:
from deep_translator import GoogleTranslator
translated = GoogleTranslator(source='en', target='de').translate("keep it up, you are awesome")

der übersetzte text steht jetzt in der variable "translated", jetzt musst du damit noch irgendwas machen, z.b. wieder in eine datei schreiben. ein print(translated) sollte dir schon mal was anzeigen.

aber ich sags gleich: *.srt dateien enthalten nicht nur text sondern auch zeitangaben. du kannst nicht einfach so die datei übersetzen. du musst zeile für zeile durchgehen und nur die zeilen nehmen, die auch wirklich text sind.
 
  • Gefällt mir
Reaktionen: wickedgonewild
So wird ein Schuh draus. Das hat funktioniert.

Der Aufbau der SRT war mir bekannt, das hab ich mir dann wohl zu einfach vorgestellt, denn das funktioniert tatsächlich nicht. Die Logik die für ein ordentliches Script erforderlich wäre das nur auf Text prüft bin ich nicht in der Lage zu schreiben.

Außerdem gibt es ein Zeichenlimit (was mir jetzt, nachdem ich den Inhalt der Variable ausgeben konnte) von 5000, somit ist hier eh erst einmal Ende der Fahnenstange.

Ich mache mir noch mal anderweitig Gedanken und möchte mich für eure Unterstützung bedanken.
 
für das meiste hat sich schon mal jemand die arbeit gemacht und was gebastelt. für srt-dateien gibt es bereits ein modul. damit kann man die datei einlesen und alle untertitel durchgehen und dann jeweils den inhalt übersetzen. der inhalt kann aber auch noch formatierungsanweisungen enthalten, die müsste man eigentlich für die übersetzungsfunktion vorher rausfiltern. was einfaches wäre dieses script (pip install srt nicht vergessen):

Python:
from deep_translator import GoogleTranslator
import srt


with open('bla.srt') as f:
    subtitles = list(srt.parse(f.read()))

for subtitle in subtitles:
    subtitle.content = GoogleTranslator(source='auto', target='de').translate(text=subtitle.content)

with open('bla_new.srt', 'w') as f:
    f.write(srt.compose(subtitles))
 
Na das schau ich mir dann doch noch mal an :).
 
Alternativ könntest du deepl.com nutzen mit der Funktion, docx-Dateien reinzuziehen. Die haben anschließend eine deepl-Kopfzeile und Schreibschutz, aber den Schreibschutz von docx-Dateien kann man aushebeln.

Oder du kopierst den Text einer Datei in eine Zelle in Google Tabellen und nutzt die =googletranslate() Funktion
 
Zuletzt bearbeitet:
Zurück
Oben