kleine Mathe-Spielereien

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
OSWALD
User
Beiträge: 547
Registriert: Freitag 18. März 2022, 17:32

1.7.23
Trotz aller Probleme mache ich ohne Rücksicht
auf Sinn oder Fehler mit meinen Versuchen
weiter. Ich hoffe , dass ich eines Tages
( mit der Funktion -sub) in meinem Text
einzelne Zeichen, Wörter oder gar Satzteile
austauschen kann. Das ist also mein Ziel.
Hier mit fange ich jetzt an.
OSWALD

Code: Alles auswählen

mport re
 
str = '''  Arm am Beutel, krank am Herzen 536678 
schleppt ich meine langen Tage.
Armut ist die größte Plage,
Reichthum ist das höchste Gut! 44,Kreise,Kreise
Und zu enden meine Schmerzen,
Ging ich einen Schatz zu graben.
Meine Seele sollst du haben!
Schrieb ich hin mit eignem Blut.
566
Und so zog ich Kreise  um Kreise,
Stellte wunderbare Flammen 3200
Kraut und Knochenwerk zusammen:
die Beschwörung war vollbracht.
Und auf die gelernte Weise124 , Kreis,Kreis,Kreis,Kreis
Grub ich nach dem alten Schatze
Auf dem angezeigten Platze;
Schwarz und stürmisch war die Nacht.2020-10-05
'''
 
pattern  =   "[A-Za-z]+"
#pattern  =   "[A-Z]|[0-9]-[a-z]"
#pattern   =  'Kreise+'     # 4 x   Match
#pattern =   'Kreise +'      # 1 xMatch
#pattern =  'Kreise'        #  4 mal Match
#pattern =  'Kreise|Kreis'
#pattern =   'Kreise|Kreis|Nacht|Schwarz und stürmisch'
#pattern =     '[\w]'   
#pattern    = '[\d]{1,3}'  
#pattern    = '[\d]{2,3}'  
#pattern    = '[\d]{3,3}'  
#pattern      = '\d+\s\.*'  
#pattern      = '[A-Z\w+\.*\d+\(a-z)]'


ergebnis = re.findall(pattern,str)
print(ergebnis)



OSWALD
User
Beiträge: 547
Registriert: Freitag 18. März 2022, 17:32

2.7.2023
Die SUB-Funktion von Regex ist eigentlich einfacher
als ich erwartet habe. Schwer ist das Auffinden der
richtigen pattern. Ich hoffe, dass sich die Fehlerquote
in Grenzen hält, aber es noch wesentlich schwerer.
Gute Zeit OSWALD

Code: Alles auswählen



# Entfernen aller   führenden  Leerzeichen

import re
target_str = '''  Arm am Beutel, krank am Herzen 536678 
schleppt ich meine langen Tage.
Armut ist die größte Plage,
Reichthum ist das höchste Gut! 44,Kreise,Kreise
Und zu enden meine Schmerzen,
Ging ich einen Schatz zu graben.
Meine Seele sollst du haben!
Schrieb ich hin mit eignem Blut.
566
Und so zog ich Kreise  um Kreise,
Stellte wunderbare Flammen 3200
Kraut und Knochenwerk zusammen:
die Beschwörung war vollbracht.
Und auf die gelernte Weise124 , Kreis,Kreis,Kreis,Kreis
Grub ich nach dem alten Schatze
Auf dem angezeigten Platze;
Schwarz und stürmisch war die Nacht.2020-10-05'''

#Zuerst aus Normalabstand 
pattern =  r"\s+" 
# + indicate 1 or more occurrence of a space
res_str = re.sub(pattern, "" , target_str)
# String after replacement
print(res_str)


#Nun öffnen wir wieder die Leerstellen, aber wir vergössern sie auf  4 Leerstellen
res_str = re.sub(pattern, "    " , target_str)
print(res_str) 
 
# (Nun setzen wir in jede Leerstelle     n u r  zwei Zeichen ein   

#    ^\s+$  reduzieert  auf begrenzte  Leerstellen  ( Testen ??)
# | operator  für oder
res_str = re.sub(r"\s+|\s+$", " @ ", target_str)
print(res_str)
#Und jetzt wier zurück auf YAusgangsposition
res_str = re.sub(r"\s+|\s+" ,"" , target_str)
print(res_str)
 
#######################################
Benutzeravatar
grubenfox
User
Beiträge: 593
Registriert: Freitag 2. Dezember 2022, 15:49

OSWALD hat geschrieben: Sonntag 2. Juli 2023, 16:24 Schwer ist das Auffinden der richtigen pattern.
Ja!
OSWALD
User
Beiträge: 547
Registriert: Freitag 18. März 2022, 17:32

3.7.23
Ein erstes Zwischenziel scheint jetzt erreicht zu sein.
Austausch von Objekten im vorgegebeben Text
(gilt auch für Zahlen)
Für die praktische Arbeit sicher noch nicht geeignet.
Gute Zeit OPSWALD

Code: Alles auswählen

 
import re

text_str ='''  Arm am Beutel, krank am Herzen  
schleppt ich meine langen Tage.
Armut ist die größte Plage,
Reichthum ist das höchste Gut!
Und zu enden meine Schmerzen,
Ging ich einen Schatz zu graben.
Meine Seele sollst du haben!
Schrieb ich hin mit eignem Blut.
Und so zog ich mit dem Zirkel  Kreise,
Stellte wunderbare Flammen 
Kraut und Knochenwerk zusammen:
die Beschwörung war vollbracht.
Und auf die gelernte Weise1
grub ich nach dem alten Schatze
Auf dem angezeigten Platze;
schwarz und stürmisch war die Nacht.'''

 
ergebnis1 =  re.sub('Zirkel','DEM ZIRKEL', text_str)
print(ergebnis1)
print() 
ergebnis2 = re.sub('Flammen', 'EIN KLEINES FEUERCHEN,' ,text_str)
print (ergebnis2)
print()
ergebnis3 = re.sub('Blut','KUGELSCHREIBER',text_str)
print(ergebnis3)
print() 
ergebnis3 = re.sub('Beschwörung','****ChatGPT****',text_str)
print(ergebnis3)


Benutzeravatar
__blackjack__
User
Beiträge: 13931
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@OSWALD: Da ist wieder die Frage wozu da `re` verwendet wird, denn es wird ja nichts wirklich davon verwendet. Statischen Text durch anderen statischen Text ersetzen kann mit einfach mit `str.replace()`.

Code: Alles auswählen

#!/usr/bin/env python3


TEXT = """\
Arm am Beutel, krank am Herzen  
schleppt ich meine langen Tage.
Armut ist die größte Plage,
Reichthum ist das höchste Gut!
Und zu enden meine Schmerzen,
Ging ich einen Schatz zu graben.
Meine Seele sollst du haben!
Schrieb ich hin mit eignem Blut.
Und so zog ich mit dem Zirkel  Kreise,
Stellte wunderbare Flammen 
Kraut und Knochenwerk zusammen:
die Beschwörung war vollbracht.
Und auf die gelernte Weise1
grub ich nach dem alten Schatze
Auf dem angezeigten Platze;
schwarz und stürmisch war die Nacht."""


def main():
    for old, new in [
        ("Zirkel", "DEM ZIRKEL"),
        ("Flammen", "EIN KLEINES FEUERCHEN,"),
        ("Blut", "KUGELSCHREIBER"),
        ("Beschwörung", "****ChatGPT****"),
    ]:
        print(TEXT.replace(old, new))


if __name__ == "__main__":
    main()
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
OSWALD
User
Beiträge: 547
Registriert: Freitag 18. März 2022, 17:32

3.7.23
Hallo _blackjack_
Das ist phantastisch!
Genau so etwas hatte ich gesucht, war aber natürlich
nicht in der Lage, so etwas auch nur anzudenken.
Python u n d Regex, das ist es.
Python ist natürlich für solche Fälle prädestiniert.
Ich bin kein Lehrer, hatte aber den Einfall , das man Regex
( aber nur im 'smarten Unterricht ') bei der Korrektur von Diktaten
im Deutsch-Unterricht bei der Fehler suche einstzen könnte.
So etwas wäre aktuell in unseren Schulen angebracht.
Herzlichen Dank
Das bringt mich defintiv weiter.
Gute Zeit OSWALD
Benutzeravatar
__blackjack__
User
Beiträge: 13931
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@OSWALD: Bei der Korrektur von Diktaten im “smarten Unterricht“, also ich vermute mal wenn die Schüler den Text eintippen, würde man wohl eher ein Diff zwischen diktiertem um eingegebenen Text machen. Vielleicht noch mit ein bisschen Ersetzen/Normalisierung von „whitespace“-Zeichen. Ich würde nämlich angesäuert reagieren wenn mir ein „non-breaking“-Leerzeichen beispielsweise zwischen einem Strassennamen und einer Hausnummer, oder einer Zahl und einer Einheit, als Fehler ausgelegt werden würde. Und dann müsste man noch verschiedene alternative Schreibweisen von bestimmten Worten berücksichtigen. Beispielsweise „Portemonnaie“ und „Portmonee“.

Für die Zerlegung von Texten würde ich aber eher keine regulären Ausdrücke benutzen, sondern erst einmal schauen was NLTK & Co so bieten. Das ist nämlich nicht ganz so einfach und da haben sich Experten schon Gedanken gemacht und Code geschrieben.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
OSWALD
User
Beiträge: 547
Registriert: Freitag 18. März 2022, 17:32

5.7.2023
Mit der Anwendung der altbewährten Schleife
ist es mir jetzt gelungen , eine gewisse 'Dynamisierung'
in das S ystem rein zu kriegen.Es wäre zu schön, wenn ich
die eingeführten Objekte farbig darstellen könnte.
Bis jetzt habe ich noch keine Möglichkeit dazu gefunden.
Gute Zeit OSWALD

Code: Alles auswählen

import re
text   =  '''Arm am Beutel, krank am Herzen  
schleppt ich meine langen Tage.
Armut ist die größte Plage,
Reichthum ist das höchste Gut!  
Und zu enden meine Schmerzen,
Ging ich einen Schatz zu graben.
Meine Seele sollst du haben
Schrieb ich hin mit eignem Blut.'''
 
pattern = '\s'
for x in  range(0,1):
    ergebnis = re.sub("Beutel","---@@   " ,text  )
    print(ergebnis)
    print()
    ergebnis = re.sub("Armut","---XXXe  " ,text  )
    print(ergebnis)
    print()
    ergebnis = re.sub("Plage","---ZZZ   " ,text  )
    print(ergebnis)
    print()
    ergebnis = re.sub("Schmerzen","---§§§   " ,text  )
    print(ergebnis) 
    print()
    ergebnis = re.sub("Seele","---MMM  " ,text  )
    print(ergebnis) 
    print()
   :?: 
Benutzeravatar
grubenfox
User
Beiträge: 593
Registriert: Freitag 2. Dezember 2022, 15:49

zum kruden Code hat __blackjack__ ja schon in viewtopic.php?p=421261#p421261 alles notwendige geschrieben
zur Farbe (ein paar Links, die bei der Suche nach 'python CLI color' so angefallen sind (die Suche ohne die ' ) / alles ungetestet):
https://github.com/tartley/colorama
http://urwid.org/
https://github.com/erikrose/blessings
https://github.com/termcolor/termcolor
https://github.com/jasonverbeek/cli-color-py
Benutzeravatar
__blackjack__
User
Beiträge: 13931
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

`rich` ist IMHO im Moment die Bibliothek für schöne/bunte Terminal-Ausgaben.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
Benutzeravatar
grubenfox
User
Beiträge: 593
Registriert: Freitag 2. Dezember 2022, 15:49

Ach stimmt, das war's... was ich hier zum Teil auch installiert habe.

Damit geht es dann auch so (eben mit 'rich', ohne überflüssiges 're' und ohne nicht-existente Schleife):

Code: Alles auswählen

from rich import print
TEXT   =  '''Arm am Beutel, krank am Herzen  
schleppt ich meine langen Tage.
Armut ist die größte Plage,
Reichthum ist das höchste Gut!  
Und zu enden meine Schmerzen,
Ging ich einen Schatz zu graben.
Meine Seele sollst du haben
Schrieb ich hin mit eignem Blut.'''
 
print(TEXT.replace("Beutel","[magenta]---@@   [/magenta]"))
print()
print(TEXT.replace("Armut","[magenta]---XXXe  [/magenta]"))
print()
print(TEXT.replace("Plage","[magenta]---ZZZ   [/magenta]"))
print()
print(TEXT.replace("Schmerzen","[magenta]---§§§   [/magenta]"))
print()
print(TEXT.replace("Seele","[magenta]---MMM  [/magenta]"))
print()
Aber die hübsche bunte Ausgabe bekommen wir jetzt nicht so einfach hier in's Forum?
Das hier das 'print' von Python durch das 'print' von rich überdeckt wird, ist hier mal gewollt und volle Absicht!
OSWALD
User
Beiträge: 547
Registriert: Freitag 18. März 2022, 17:32

14.07. 23
grubenfox schrieb:
Aber die hübsche bunte Ausgabe bekommen wir jetzt nicht so einfach hier in's Forum?
Leider ist es mir nicht gelungen , mich bei Pypi enizuloggen, da ich mich nicht
als Privatperson anmelden . Ich lkam gar nicht erst zur 2.Authnetifizierung.
Deshalb kann ich den eleganten Code zu bewundern.
Benutzeravatar
grubenfox
User
Beiträge: 593
Registriert: Freitag 2. Dezember 2022, 15:49

Wie in der Doku (https://github.com/Textualize/rich#installing) beschrieben, einfach installieren....

Code: Alles auswählen

python -m pip install rich
OSWALD
User
Beiträge: 547
Registriert: Freitag 18. März 2022, 17:32

15.07023
An grubenfox : aDnke für die zahlreichen Hinweise,
die ich leider alle nicht umsetzen konnte.
Das Programm läuft als reines replace-Modul.
Immer ohne jeglichen rich-import, aber auch mit
dem Zusatz --- as print--- , immer ohne Farbe.
Trotzdem besticht es durch seine Eleganz.
Das Thema Eleganz in Python beschäftigt mich
jetzt umso mehr.
PYpi ist für mich die einzige Python Bibliothek,
mit der ich bis jetzt Probleme hatte.
Mein Motto: " back to rhe roots" : Python
Gute Zeit OSWALD

Code: Alles auswählen

 #######              from rich import print 
from rich import print as rprint 


TEXT   =  '''Arm am Beutel, krank am Herzen  
schleppt ich meine langen Tage.
Armut ist die größte Plage,
Reichthum ist das höchste Gut!  
Und zu enden meine Schmerzen,
Ging ich einen Schatz zu graben.
Meine Seele sollst du haben
Schrieb ich hin mit eignem Blut.'''

#print(TEXT.replace("Arm","---YYY"))                   'Zeile 12


print(TEXT.replace("Beutel","[magenta]---@@   [/magenta]"))
print()
print(TEXT.replace("Armut","[magenta]---XXXe  /[magenta]"))
print()
print(TEXT.replace("Plage","[magenta]---ZZZ   magenta]"))
print()
print(TEXT.replace("Schmerzen","[magenta]---§§§   [/magenta]"))
print()
print(TEXT.replace("Seele","[magenta]---MMM  [/magenta]"))
print()
 

nezzcarth
User
Beiträge: 1735
Registriert: Samstag 16. April 2011, 12:47

OSWALD hat geschrieben: Samstag 15. Juli 2023, 09:21 PYpi ist für mich die einzige Python Bibliothek,
mit der ich bis jetzt Probleme hatte.
PyPi ist keine (Programm)bibliothek, sondern ein Paketindex – genau genommen: Der offizielle Pakete-Index von Python. Und immer, wenn du pip benutzt, verwendest du bereits pypi, da pip auf PyPi zugreift. Selbst musst du mit PyPi aktiv eigentlich gar nichts machen, wenn du nur Pakete verwenden und keine eigenen veröffentlichen möchtest. Insbesondere musst du dich nicht einloggen. Für's Suchen von Paketen ist die PyPi-Website auch ganz okay, aber das ist ja optional.
OSWALD
User
Beiträge: 547
Registriert: Freitag 18. März 2022, 17:32

17.07.2023
Herzlichen Dank an Neztzcarth für seine wertvollen Hinweise.
Jetzt ist der Weg frei für eine intensive Beschäftigung
mit dem Kapitel "R ICH".
Inzwischen habe ich schon einige Fortschritte gemacht.
Die korrekte Darstelliung der Programminhalte gelingt mit
Python-IDLE nicht. Man muss die 'Eingabeaufforderung' von Windows
verwenden. Damit wurden die FARBEN ( und graphische Effekte )
aus dem Code vin Nezzcarth
(siehe oben) gut dargestellt. Gleiches gilt auch für alle anderen
Programme mit RICH. Ich habe zahlreiche Rich-Anwendungen
getestet und werde sie sie hier z.T. vorstellen.
Gute Zeit OSWALD
OSWALD
User
Beiträge: 547
Registriert: Freitag 18. März 2022, 17:32

17.7.23
Nach Anheftiung an die Tastleiste habe ich durch
Duck auf die rechte Maustaste die ' Eingabeauffoerung '
geöffnet .gezeigt werden technische Daten.
Mit 'help werden alle Befehle erklärt.
Auch für rich gibt es Hilfe:

Code: Alles auswählen

import rich
print(help(rich))

OSWALD
User
Beiträge: 547
Registriert: Freitag 18. März 2022, 17:32

17.7.
Hier noch einwetieres Beispiel
Die Schwierigkeiten bei der
Erarbeitung dieses Kapitels könnten
eher im technischen Bereich kiegen.

Code: Alles auswählen


 Hier noch einwetieres  Beispiel
Die Schwierigkeiten bei der 
Erarbeitung  dieses Kapitels könnten 
eher im technischen  Bereich kiegen.

[code]

#RICHINSPECT.py

from rich import inspect
from rich.color import Color
color = Color.parse("red")
inspect(color, methods=True)





OSWALD
User
Beiträge: 547
Registriert: Freitag 18. März 2022, 17:32

Noch ein Beispiel17.7.

Code: Alles auswählen

#RICHTEXTXXX.py

from datetime import date
from rich import print
from rich import print as rprint

print("[italic red]alter Schwede[/italic red]")
rprint("[italic blue]alter Schwede[/italic blue]")

print("{ 'Name': 'John Dolittle', 'Beruf': Gaertner' }")
print(date.today())
 
from rich import print
from rich import print as rprint
 
print("[italic red]alter  Schwede[/italic red]")
 
print(" 'Name': 'John Dolittle', 'Beruf': Gaertner'{ ")
print(date.today())










OSWALD
User
Beiträge: 547
Registriert: Freitag 18. März 2022, 17:32

17.7.23
Eigentlich ist es ganz einfach, wenn man es erst einmal
verstanden hat.
Die RICH-Library ist riesengroß und vielfältig.
Und hier mein erstes 'Eigenprodukt'.
Gute Zeit OSWALD
Übrigens , das schöne Programm von Nezzarth
zeigt jetzt auch die Ersatz-Zeichen in magenta.

Code: Alles auswählen

#RICHSTAMM.py
# erste Eigenproduktion
from rich.tree import Tree
from rich import print as rprint


tree = Tree("Family Tree")
tree.add("Mom").add("liebt[magenta] MODE")
tree.add("Dad").add("liebt[yellow] PYTHON") 
tree.add("Brother").add(" liebt  Musik")
tree.add("[red]Sister").add("[green] ihren Husband").add("[blue] vor allem ihren kleinen Sohn ")                                            

rprint(tree)






Antworten