automatisierte Umwandlung von "ersten" in Integer

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
JakobPrie
User
Beiträge: 91
Registriert: Sonntag 21. Juni 2020, 11:12

Hallo,
gibt es ein package oder irgendwas in der Art, was einem direkt den integer-Wert aus dem String "ersten"/"zweiten"/... zurückgibt?
greetings1
User
Beiträge: 51
Registriert: Donnerstag 22. Oktober 2020, 18:19

Nein, müsstest ein Wörterbuch anlegen.
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

@JakobPrie: Dafür musst du den entsprechenden Wert aus der Zeichenkette herauslösen?
Was würdest du denn ohne Programm tun?
Schau dir mal die Methoden an, die Zeichenketten haben. Speziell .split() sollte dir im ersten Schritt weiter helfen.

@greertings1: Ein Wörterbuch ist eine Datenstruktur, die die Beziehung zwischen Schlüsseln und Werten darstellt. Ich sehe nicht, wo das hier hilft.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@sparrow: soweit ich das verstanden habe, enthält der String schon nur das Wort "ersten". Dann wäre ein Wörterbuch der erste Schritt. Wenn der OP aber auch den dreimillionensiebenhundertdreiundfünfzigtausendvierundachzigsten haben möchte, wird das mit einem Wörterbuch schwierig.
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Hmm... ok.
Ich habe das so verstanden, dass es eine Zeichenkette gibt, deren Elemente Zahlen sind und die durch "/" getrennt sind - und davon möchte @JakobPrie den ersten haben.
greetings1
User
Beiträge: 51
Registriert: Donnerstag 22. Oktober 2020, 18:19

sparrow hat geschrieben: Montag 26. Oktober 2020, 06:42 @greertings1: Ein Wörterbuch ist eine Datenstruktur, die die Beziehung zwischen Schlüsseln und Werten darstellt. Ich sehe nicht, wo das hier hilft.
Dann lies den Beitrag noch mal... String gegeben, int gewünscht - und zumindest die ersten zehn Zahlen sind aus dem String nicht ableitbar -> Wörterbuch.

Ansonsten kannst du auch gerne ein mathematisches Kunststück vollführen und "drei, "vier", "eins" in Zahlen umwandeln. Bin gespannt.
JakobPrie
User
Beiträge: 91
Registriert: Sonntag 21. Juni 2020, 11:12

Also tatsächlich möchte ich eine x-beliebige Zahl, die als String gegeben ist in einen int umwandeln, also auch fünfmillionendreihunderttausendundfünf. Ich habe jetzt mal nen Algorithmus für alle Zahlen bis Hundert gemacht
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Mit third-party modulen:

Code: Alles auswählen

from word2number import w2n
import goslate

def translate_to_english(word):
    return goslate.Goslate().translate(word, 'eng')

def main():
    print(w2n.word_to_num(translate_to_english(input("Gib die Zahl ein die umgewandelt werden soll: "))))

if __name__ == '__main__':
    main()
Leider ist der Spaß nur von kurzer Dauer, da goslate einen HTTPError (HTTP Error 429: Too Many Requests) wirft (der Grund dafür steht auch auf der goslate Seite), auch bei wenigen Anfragen. Bei mir hat es Anfangs aber geklappt. Man muss allerdings statt "fünfmillionendreihunderttausendundfünf" das so eingeben "fünfmillionendreihunderttausend und fünf".

Kennt jemand ein gutes Modul zum Übersetzen von Deutsch nach Englisch, eventuell könnte es damit klappen?
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Das ist nicht ganz trivial und hat mit der relativen Komplexität der deutschen Sprache zu tun. Das wird auch aus den Posts von JakobPrie deutlich.
Im ersten Post wird nach "ersten" oder "zweiten" gefragt. "ersten" ist aber keine einfach Zahl als Zeichenkette sondern ein Zahlwort bzw. die Ordinalzahl zu "Eins". Und das könnte auch "erste", "erstes" oder "erster" heißen.
Möglicherweise soll auch das Adverb "erstens" noch berücksichtigt werden. "erstehen" aber sicher nicht und "erstechen" auch nicht.
Sicher nicht weniger trivial als das Auseinanderflücken einer Zeichenkette die eine Zahl direkt audrückt.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1020
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Das ist ambitioniert, könnte dir aber beim Verständnis der Muttersprache helfen.
Dennoch ist es nicht einfach das zu programmieren. Fang erst mal mit römischen Zahlen an.
Das ist einfacher.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Habe eine Möglichkeit gefunden:

Code: Alles auswählen

import requests
from word2number import w2n

HEADERS = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0"}


def translate_to_english(word):
    return requests.get(f"https://api.mymemory.translated.net/get?q={word}&langpair=de|en", headers=HEADERS).json()["responseData"]["translatedText"]


def main():
    while True:
        try:
            print(w2n.word_to_num(translate_to_english(input("Gib die Zahl ein die umgewandelt werden soll: "))))
        except ValueError:
            print("Diese Zahl kann nicht umgewandelt werden")

if __name__ == '__main__':
    main()

>> Gib die Zahl ein die umgewandelt werden soll: Fünfmillionendreihunderfünfundzwanzigtausendundelf
>> Ausgabe: 5325011

>> Gib die Zahl ein die umgewandelt werden soll: Neunundfünfzigtausenddreihundertzweiundzwanzig
>> Ausgabe: 59322

>> Gib die Zahl ein die umgewandelt werden soll: Viermilliardenvierhundertvierundvierzigmillionenvierhundervierundvierzigtausendvierhundereinundvierzig
>> Ausgabe: 4444444441
Antworten