Forum: PC-Programmierung "50 Leute nahmen teil -> Fünfzig Leute nahmen teil" Konverter


von Christoph Haus (Gast)


Lesenswert?

Ich habe eine lange Tabelle unter oo calc.
Sie enthält Zeilen wie

Ich nehme 4 Eier
50 Leute nahmen teil

Das soll konvertiert werden in

Ich nehme vier Eier
Fünfzig Leute nahmen teil

Wie kann ich das in oo calc oder irgendeinem Onlineprogramm schnell 
automatisch ändern?

von Test (Gast)


Lesenswert?

Mach ein Pythonscript

von iop (Gast)


Lesenswert?

In welchem Bereich liegen die Zahlen?
Kann eine Textersetzung a la sed (stream editor) vorgenommen werden?

von MicNic (Gast)


Lesenswert?

Kann man net dafür einfach die gute alte "Suchen und Ersetzen" Funktion 
verwenden? 4 -> vier, 50 -> fünfzig?

von Tipster (Gast)


Lesenswert?

Die Zahlen in absteigender Reihenfolge abarbeiten.

Nicht dass es so rauskommt:
Die Hose war eine 501. --> Die Hose war eine fünfzigeins. ## NEIN!

Mit folgendem Suchmuster arbeiten: '[^\d]501[^\d]'

von nachtmix (Gast)


Lesenswert?

Christoph Haus schrieb:
> Ich nehme 4 Eier
> 50 Leute nahmen teil
>
> Das soll konvertiert werden in
>
> Ich nehme vier Eier
> Fünfzig Leute nahmen teil

Soll das wirklich so?
Ich habe mal gelernt, dass Zahlen bis zehn ausgeschrieben werden, 
größere bleiben als Ziffern stehen.

von foobar (Gast)


Lesenswert?

> Ich habe mal gelernt, dass Zahlen bis zehn ausgeschrieben werden,
> größere bleiben als Ziffern stehen.

Vor dieser "Regel" warnt der Duden schon seit über 100 Jahren ;-)

http://faql.de/typographie.html#zahlen

von iop (Gast)


Lesenswert?

>Kann man net dafür einfach die gute alte "Suchen und Ersetzen"
>Funktion verwenden?
Genau das kann sed.exe mit regulären Ausdrücken in einem Script 
vollautomatisch.
Tolles command line tool.

von Walter K. (walter_k488)


Lesenswert?

iop schrieb:
> Kann man net dafür einfach die gute alte "Suchen und Ersetzen"
> Funktion verwenden?
>
> Genau das kann sed.exe mit regulären Ausdrücken in einem Script
> vollautomatisch.
> Tolles command line tool.

sed.exe?

Das wird für die exe-Generation aber sehr schwierig / zumal die bisher 
kaum was von regular expressions gehört haben

von Rolf M. (rmagnus)


Lesenswert?

foobar schrieb:
>> Ich habe mal gelernt, dass Zahlen bis zehn ausgeschrieben werden,
>> größere bleiben als Ziffern stehen.

Zahlen bis zwölf.

> Vor dieser "Regel" warnt der Duden schon seit über 100 Jahren ;-)

Sie wird aber doch erstaunlich häufig penibel befolgt, was besonders 
dämlich aussieht bei Zahlenbereichen, die im "ausgeschriebenen Bereich" 
beginnen und im "Ziffernbereich" enden, wie "zwischen acht und 16"...
"Vier Jugendliche im Alter zwischen zehn und 15 Jahren haben beim Lotto 
"sechs aus 49" den Jackpot gewonnen. Nun bekommt jeder drei komma fünf 
von den 14 Millionen."

iop schrieb:
>>Kann man net dafür einfach die gute alte "Suchen und Ersetzen"
>>Funktion verwenden?
> Genau das kann sed.exe mit regulären Ausdrücken in einem Script
> vollautomatisch.

In oo-Calc-Dateien? Ganz automatisch mit allen Zahlen von - sagen wir 
mal - Null bis eine Million, also ohne dabei das Schreiben des regulären 
Ausdrucks zu einer Lebensaufgabe zu machen? Oder was meinst du genau mit 
"vollautomatisch"?

> Tolles command line tool.

Das ist es. Aber dass es das kann, glaub ich nicht so ganz.

von Christoph Haus (Gast)


Lesenswert?

iop schrieb:
> Genau das kann sed.exe mit regulären Ausdrücken in einem Script
> vollautomatisch.

Wie sieht dieses Skript aus?

von ooo (Gast)


Lesenswert?

Wozu wenns nur ein paar sind?

tools -> macro -> record macro, bereich auswaehlen, f3 oder 
find&replace, ersetzungen durchfuehren, abspeichern

von georg (Gast)


Lesenswert?

Rolf M. schrieb:
> Ganz automatisch mit allen Zahlen von - sagen wir
> mal - Null bis eine Million

Das gab es zu Zeiten als man Geld-Überweisungen noch real ausgedruckt 
hat, da stand dann 
"Einemillionzweihundertsechsundfünzigtausenddreihunderteinund achtzig". 
Ist wahrscheinlich verlorengegangenes Knowhow, für einen Programmierer 
aber kein ernsthaftes Problem.

Georg

von ooo (Gast)


Lesenswert?

Walter K. schrieb:

> Das wird für die exe-Generation aber sehr schwierig / zumal die bisher
> kaum was von regular expressions gehört haben


sed 's/4/vier/g; s/50/fünfzig/g' <<< 'Ich nehme 4 Eier, 50 Leute ...'


Ein script zu machen welches Ersetzungen durchführt ist nicht sonderlich 
schwierig aber eine Liste der natürlichen Zahlen in Wortform zu 
generieren durch die das gefundene im Zahlenraum  ersetzt wird ist dann 
schon anspruchsvoller ...

von Rolf M. (rmagnus)


Lesenswert?

georg schrieb:
> Rolf M. schrieb:
>> Ganz automatisch mit allen Zahlen von - sagen wir
>> mal - Null bis eine Million
>
> Das gab es zu Zeiten als man Geld-Überweisungen noch real ausgedruckt
> hat, da stand dann
> "Einemillionzweihundertsechsundfünzigtausenddreihunderteinund achtzig".

TTS-Systeme machen sowas auch als Teil des ersten 
Preprocessing-Schrittes.

> Ist wahrscheinlich verlorengegangenes Knowhow, für einen Programmierer
> aber kein ernsthaftes Problem.

Nein, das sollte recht einfach sein für Sätze wie die obigen Beispiele. 
Schwieriger wird's dann schon, wenn aus einen 3. ein Dritter werden 
soll. Dann muss man nämlich auch teilweise die Grammatik des Satzes 
verstehen.

von Statistik-Statist (Gast)


Lesenswert?

50 Personen haben achtundzwanzig Eier. Wieviele Personen haben statt 
dessen Eierstöcke?

von imonbln (Gast)


Lesenswert?

es wird wohl auch ein einfaches Suchen/ersetzen hinauslaufen.
Die Kunst für dich ist es irgendwie die Wörter für die Zahlen zu 
bekommen.

Da gibt es zum Glück ein paar Regeln die helfen können. von 0-13 ist 
unregelmäßig und muss Kodiert werden, 14-19 nennt erst denn einer dann 
den Zehner also vierzehn und ab 20-100 ist "einer + 'und + 'Zehner'", ab 
Hundert nennt man erst die hundert und dann folgt man den bisherigen 
Regeln.

Das sollte sich Programmieren lassen, oder wenn es nicht lohnt weil es 
nicht soviel unterschiedliche Zahlen sind kann man mit einer Tabelle 
arbeiten. Notfalls mit einer einfachen Eingabe dannach könnte man zum 
Beispiel in Python ein script schreiben was die Zahlen von groß nach 
klein Konvertiert
Hier wäre ein Rumpf wie das ungefähr gehen könnte.
1
def int2string(string):
2
    new = string
3
    numbers = set(re.findall('\d+', string))
4
    for num in sorted(numbers, reverse=True):
5
        name = input('Sage mir wie heist {} :'.format(num))
6
        new = new.replace(num, name.strip())
7
    return ne

Wenn du statt der input Zeile dort noch was intelligentes einfügst was 
den Namen bildet oder sich wenigstens merkt was es kennt sollte der Code 
dir helfen können.

von Tipster (Gast)


Lesenswert?

ooo schrieb:
> Walter K. schrieb:
>
>> Das wird für die exe-Generation aber sehr schwierig / zumal die bisher
>> kaum was von regular expressions gehört haben
>
>
> sed 's/4/vier/g; s/50/fünfzig/g' <<< 'Ich nehme 4 Eier, 50 Leute ...'
>

Wo versteckt sich da nun ein Regulärer Ausdruck?
Was geschieht mit 'Da kommen 450g Mehl rein...' und 'Die Distanz beträgt 
44504km...'

$ sed -e 's/[^\d]4[^\d]/vier/g; ...'

von ooo (Gast)


Lesenswert?

Tipster schrieb:

> Wo versteckt sich da nun ein Regulärer Ausdruck

Nirgends. Beispiel simpler Ersetzung.

Autor: imonbln
>> ein paar Regeln die helfen können. von 0-13 ist
>> unregelmäßig und muss Kodiert werden, 14-19 nennt erst denn einer dann
>> den Zehner also vierzehn und ab 20-100 ist "einer + 'und + 'Zehner'", ab
>> Hundert nennt man erst die hundert und dann folgt man den bisherigen
>> Regeln.


Und die Groß- und Kleinschreibung und ... k.A.

zuviel um das auf ein Backrezept loszulassen, wer Lust und zeit hat 
kriegt das schon hin oocalc kann wohl auch basic-, phyton-, java-, 
bean- Skripte wie es sich um shell-zugriffe bestellt weis ich nicht.

von iop (Gast)


Lesenswert?

http://faql.de/typographie.html#zahlen

Der Hammer! Sehr detailliert

Ralph Babel  hat einen recht amüsanten Schreibstil und ungewohnte Tiefe
(viele Beispiele, Erklärungen und Ausnahmen).
Die ganze Site faql.de gefällt mir.

von Hohnecker (Gast)


Lesenswert?

Walter K. schrieb:
> sed.exe?

Kennst du nicht die sed.exe? Die stammt noch aus DDR Zeiten ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.