DataFrame übersetzen per Google Translate

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
sophiesautter
User
Beiträge: 7
Registriert: Freitag 13. August 2021, 16:51

Hallo,

ich würde gerne aus einem DataFrame zwei Spalten mit Text ins Französische übersetzen und anschließend wieder ins Englische.
Das wären die Spalten 'title' und 'description'. Ich habe bisher immer nur Beispiele gefunden in denen einzelne Wörter übersetzt wurden. Gibt es eine Möglichkeit, in der ich das DataFrame eingeben kann und nur die beiden Spalten übersetzt werden?

Dankeschön für die Hilfe
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich denke nicht, dass ein Dataframe als Eingabe funktioniert. Das ist ein zu spezielles Ding. Du wirst jede einzelne Zelle des Frames einem solchen Dienst vorwerfen müssen, und dann das Ergebnis wieder einpflegen. Warum sind denn die einzelnen Wörter nicht gut genug?
sophiesautter
User
Beiträge: 7
Registriert: Freitag 13. August 2021, 16:51

__deets__ hat geschrieben: Samstag 14. August 2021, 01:23 Ich denke nicht, dass ein Dataframe als Eingabe funktioniert. Das ist ein zu spezielles Ding. Du wirst jede einzelne Zelle des Frames einem solchen Dienst vorwerfen müssen, und dann das Ergebnis wieder einpflegen. Warum sind denn die einzelnen Wörter nicht gut genug?
Es würde alternativ auch mit einer Liste funktionieren, wenn das geht. Es geht darum Bilder mit Texten zusammen zu Kategorien zuzuordnen. Die Texte möchte ich gerne etwas verändern, um die Anzahl dieser zu erhöhen. Als Quelle habe ich ein Dataframe. Die Texte separiere ich aber sowieso in einer Liste "corpus". Wenn diese zu übersetzen wäre würde das auch gehen.

Vielen Dank für die Antwort!
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mir ist unklar, ob es wichtig ist, einen Satz zu übersetzen, der als Liste von Wörtern gegeben ist. Oder ob wortweise einzeln ok ist. Wenn letzteres, und du hast einen Weg, ein Wort zu übersetzen, dann musst du das eben für jedes Element der Liste machen. Mit einer simplen for-Schleife.
sophiesautter
User
Beiträge: 7
Registriert: Freitag 13. August 2021, 16:51

__deets__ hat geschrieben: Samstag 14. August 2021, 09:18 Mir ist unklar, ob es wichtig ist, einen Satz zu übersetzen, der als Liste von Wörtern gegeben ist. Oder ob wortweise einzeln ok ist. Wenn letzteres, und du hast einen Weg, ein Wort zu übersetzen, dann musst du das eben für jedes Element der Liste machen. Mit einer simplen for-Schleife.
Die einzelnen Wörter wären okay. Ich bin nur bisher auf keine Lösung gekommen mit einer For-Schleife.

from translate import Translator
translator= Translator(to_lang="French")
translist=[]
for einzelwert in corpus:
translation = translator.translate(einzelwert)
translist.append(einzelwert)

Das war meine Lösung. Da kommt aber die Fehlermeldung: 'list' object has no attribute 'expandtabs'
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Kannst du mal bitte die vollständige Fehlermeldung posten? In Code Tags. Das ist der Knopf </> im vollständigen Editor.

Und dann auch mal print(einzelwert) vor dem verfüttern an den translator.
sophiesautter
User
Beiträge: 7
Registriert: Freitag 13. August 2021, 16:51

Code: Alles auswählen

---------------------------------------------------------------------------

AttributeError                            Traceback (most recent call last)

<ipython-input-48-1343d4d9ff99> in <module>()
      3 translist=[]
      4 for einzelwert in corpus:
----> 5   translation = translator.translate(einzelwert)
      6   translist.append(einzelwert)

4 frames

/usr/lib/python3.7/textwrap.py in _munge_whitespace(self, text)
    152         """
    153         if self.expand_tabs:
--> 154             text = text.expandtabs(self.tabsize)
    155         if self.replace_whitespace:
    156             text = text.translate(self.unicode_whitespace_trans)

AttributeError: 'list' object has no attribute 'expandtabs'

Das ist der Output, wenn ich die For-Schleife mit print(Einzelwert) durchlaufen lasse. Also quasi der Inhalt der Liste corpus.
Die Liste ist zu lange um sie hier einzufügen, aber hier ein Ausschnitt davon:

['black', 'Mounting', 'Mount', 'Articulating', 'ProMounts', 'PRO', 'Arm', 'Medium']
['marked', 'effectiveness', 'genuine', 'deer', 'independent', 'single', 'organization', 'Blue', 'true', 'Ounce', 'life', 'one', 'animal', 'taken', 'Urine', 'certified', 'ounce', 'use', 'Code', 'bottle', 'Perfect', 'article', 'Every', 'number', 'registration', 'urine', 'long', 'Buck', 'season']
['BLUSH', 'BSB', 'hours', 'blush', 'Applicator', 'Use', 'contour', 'true', 'beautifully', 'color', 'Colors', 'touch', 'Spice', 'Silky', 'cheeks', 'Professional', 'stays', 'smooth', 'highlight', 'adds', 'Series']
['model', 'trim', 'parts', 'interior', 'appreciate', 'Rebecca', 'seatbelts', 'die', 'done', 'wheel', 'smartly', 'respond', 'inch', 'trunk', 'offering', 'Lamborghini', 'steering', 'even', 'The', 'roadster', 'independent', 'Hughes', 'metal', 'Inside', 'removable', 'best', 'lovers', 'Each', 'fast', 'Turn', 'seater', 'ultrasporty', 'open', 'spring', 'car', 'right', 'wanted', 'scale', 'thoughtful', 'shoulder', 'back', 'black', 'white', 'upward', 'come', 'next', 'Maisto', 'touch', 'harness', 'doors', 'red', 'built', 'owning', 'engine', 'plastic', 'Legend', 'Have', 'Diablo', 'actual', 'spare', 'always', 'Best', 'wheels', 'thing', 'seats', 'tire', 'smoothest', 'cast', 'also', 'front', 'bookLamborghini', 'This', 'bucket', 'long', 'rides', 'suspension']
['Creek', 'chips', 'choice', 'bacon', 'wood', 'ideal', 'rich', 'pork', 'soaked', 'gas', 'grill', 'chicken', 'Our', 'Recommended', 'distinct', 'smoker', 'game', 'creates', 'electric', 'also', 'used', 'beef', 'flavor', 'perfect', 'wild', 'need', 'Wood', 'smokers', 'premium', 'Hickory', 'charcoal', 'meat', 'gives', 'They', 'Chips', 'smoky', 'like', 'full', 'Chigger']
['ewe', 'expel', 'depicts', 'veggies', 'salads', 'sweetness', 'Basque', 'traditional', 'word', 'contact', 'country', 'stacked', 'high', 'textured', 'salt', 'apples', 'ewes', 'lovely', 'transhumance', 'purchase', 'Made', 'lowlands', 'olives', 'picnic', 'name', 'aged', 'whole', 'The', 'yet', 'summer', 'comes', 'close', 'similar', 'late', 'pressed', 'Etorki', 'buffet', 'pound', 'cut', 'creamy', 'French', 'like', 'September', 'shepherds', 'vertically', 'hour', 'takes', 'firm', 'Local', 'black', 'Manech', 'made', 'pears', 'oily', 'years', 'June', 'source', 'butterfat', 'red', 'texture', 'burnt', 'molds', 'pasteurized', 'wrap', 'plastic', 'pastures', 'Photo', 'faced', 'bath', 'cheese', 'cheeses', 'small', 'allow', 'whey', 'rubbed', 'mid', 'caramel', 'curd', 'brine', 'Please', 'After', 'supple', 'sheep', 'flock', 'origin', 'later', 'Pyrenees', 'press', 'raw', 'form', 'item', 'two', 'six', 'soaked', 'modern', 'fine', 'dating', 'igourmet', 'impregnated', 'ounce', 'regenerate', 'July', 'From', 'flocks', 'would', 'This', 'December', 'months', 'milk', 'cloths', 'three']
['Grappling', 'ninja', 'approximately', 'Hook', 'iron', 'made', 'hook', 'true', 'weapon', 'casting', 'TMAS', 'grappling', 'Ninja', 'foot', 'nylon', 'rope', 'long', 'attached']
['original', 'specs', 'instructions', 'brings', 'back', 'power', 'marine', 'pump', 'Kit', 'needles', 'seats', 'Carburetor', 'carburetors', 'diaphragms', 'carburetor', 'new', 'gaskets', 'condition', 'Holley', 'valves', 'rings', 'complete', 'detailed', 'This', 'renew', 'kit', 'necessary', 'rebuild', 'Renew', 'like', 'includes', 'hardware']
['Caps', 'Zinc', 'TwinLab', 'capsules', 'Twinlab', 'cap']
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na da ist doch dein Problem. Du hast keine Liste von strings. Sondern eine Liste mit Listen mit strings. Du brauchst also eine zweite Schleife um die strings da rauszuholen. Und dann erst zu übersetzen.
sophiesautter
User
Beiträge: 7
Registriert: Freitag 13. August 2021, 16:51

__deets__ hat geschrieben: Samstag 14. August 2021, 09:57 Na da ist doch dein Problem. Du hast keine Liste von strings. Sondern eine Liste mit Listen mit strings. Du brauchst also eine zweite Schleife um die strings da rauszuholen. Und dann erst zu übersetzen.
Das hat schon einmal sehr geholfen danke! Der Code wird dann auch ausgeführt, aber läd nur. Er hängt dann an der Stelle " translation = translator.translate(wort)

Code: Alles auswählen

from translate import Translator
translator= Translator(to_lang="French")
translist=[]
for einzelwert in corpus:
  for wort in einzelwert:
    translation = translator.translate(wort)
    translist.append(wort)
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das klingt so, als ob der Übersetzer ein online Service ist. Und nicht oder langsam antwortet. Darauf habe ich erstmal auch keine Antwort. Hast du den vorher am Laufen gehabt? Hat der Ggf eine drosselung bei zu vielen Anfragen?
sophiesautter
User
Beiträge: 7
Registriert: Freitag 13. August 2021, 16:51

__deets__ hat geschrieben: Samstag 14. August 2021, 10:14 Das klingt so, als ob der Übersetzer ein online Service ist. Und nicht oder langsam antwortet. Darauf habe ich erstmal auch keine Antwort. Hast du den vorher am Laufen gehabt? Hat der Ggf eine drosselung bei zu vielen Anfragen?
Hi,
ja genau das habe ich gerade auch festgestellt. Ich habe testweise die Übersetzung mal ausgeben lassen. Dann kommt die Info, dass die Anzahl an kostenlosen Übersetzungen aufgebraucht sind für heute. Das bringt mir dann wohl nicht sehr viel, da das schon viele Wörter sind, die übersetzt werden sollen.
Danke trotzdem für die Hilfe!
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Du übersetzt doch nicht wirklich. Du brauchst nur ein Wörterbuch Englisch-Französisch.
sophiesautter
User
Beiträge: 7
Registriert: Freitag 13. August 2021, 16:51

Sirius3 hat geschrieben: Samstag 14. August 2021, 10:28 Du übersetzt doch nicht wirklich. Du brauchst nur ein Wörterbuch Englisch-Französisch.
Was heißt das? Ich bin ziemlich neu in dem Thema, kenne mich da nicht wirklich aus.
Gibt es da Wörterbücher die man sich herunterladen kann?
Antworten