2022-06-27, 20:47
Nehmen wir mal an, wir haben eine Excel-Datei Daten.xlsx
mit Namen, in der es Fehleingaben durch beispielsweise einen Buchstabendreher geben kann:

Mit Python und dem Levenshtein-Paket können wir die Ähnlichkeit der Namen recht einfach prüfen.
import pandas as pd
import Levenshtein
df = pd.read_excel('Daten.xlsx')
df = df.sort_values(by=['Name'])
df = df.reset_index(drop=True)
dfs= df.shift() # Shift df by one row
dfs = dfs.rename(columns={'Name': 'Nameshifted'})
df_combined = pd.concat([df,dfs],axis=1) # combine original and shifted df
df_combined = df_combined.fillna('') # remove NaNs
for index, row in df_combined.iterrows():
df_combined.loc[index,'Ratio'] = (Levenshtein.ratio(row['Name'], row['Nameshifted']))
df_combined.loc[index,'Distance'] = (Levenshtein.distance(row['Name'], row['Nameshifted']))
print(df_combined) |
import pandas as pd
import Levenshtein
df = pd.read_excel('Daten.xlsx')
df = df.sort_values(by=['Name'])
df = df.reset_index(drop=True)
dfs= df.shift() # Shift df by one row
dfs = dfs.rename(columns={'Name': 'Nameshifted'})
df_combined = pd.concat([df,dfs],axis=1) # combine original and shifted df
df_combined = df_combined.fillna('') # remove NaNs
for index, row in df_combined.iterrows():
df_combined.loc[index,'Ratio'] = (Levenshtein.ratio(row['Name'], row['Nameshifted']))
df_combined.loc[index,'Distance'] = (Levenshtein.distance(row['Name'], row['Nameshifted']))
print(df_combined)
Als Ergebnis erhält man dann einen Dataframe, der die sortierten Namen miteinander vergleicht und die Levenshtein-Ratio sowie die Levenshtein-Distanz ausgibt.
|
Name |
Nameshifted |
Ratio |
Distance |
0 |
Ambacher |
|
0.000000 |
8.0 |
1 |
Bertram |
Ambacher |
0.266667 |
8.0 |
2 |
Cderick |
Bertram |
0.285714 |
6.0 |
3 |
Cedrick |
Cderick |
0.857143 |
2.0 |
4 |
Dorn |
Cedrick |
0.181818 |
6.0 |
5 |
Elba |
Dorn |
0.000000 |
4.0 |
6 |
Friedrich |
Elba |
0.000000 |
9.0 |
7 |
Gastav |
Friedrich |
0.000000 |
9.0 |
8 |
Gustav |
Gastav |
0.833333 |
1.0 |
9 |
Horn |
Gustav |
0.000000 |
6.0 |
10 |
Immenweg |
Horn |
0.166667 |
7.0 |
11 |
Klaas |
Immenweg |
0.000000 |
8.0 |
12 |
Klaus |
Klaas |
0.800000 |
1.0 |
Bei hoher Ratio oder kleiner Distanz sollte man sich die Werte anschauen.
Hinweis: Ich bin hier davon ausgegangen, dass nur im Namen der nächsten Zeile ein Dreher auftreten kann. Vergleicht man alle n Namen mit allen anderen n-1 Namen, so wird es schnell aufwändig und zeitintensiv.
Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined.
Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.
More Posts - Website
2022-06-27, 20:22
Hier die Folien meines MyTinyTodo2LaTeX Lightning Talks, gehalten auf der Sommertagung 2022 von Dante e.V. in Magdeburg.
Folien
Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined.
Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.
More Posts - Website
Schlagwörter:
LaTeX,
Export,
MyTinyTodo Category:
LaTeX,
Artikel |
Kommentare deaktiviert für Folien meines „MyTinyTodo“-Vortrags bei der Dante Sommertagung in Magdeburg
2022-06-27, 20:20
Hier die Folien meines „Beamer Themes“-Vortrags bei der Dante Sommertagung in Magdeburg.
FolienFolien
Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined.
Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.
More Posts - Website
Schlagwörter:
Themes,
Beamer,
List Category:
LaTeX,
Artikel |
Kommentare deaktiviert für Folien meines „Beamer Themes“-Vortrags bei der Dante Sommertagung in Magdeburg
2022-06-27, 20:12
Unter https://github.com/UweZiegenhagen/LaTeX-Beamer-Theme-Overview habe ich ein Projekt begonnen, das alle in einem TeX Live vorhandenen Beamer-Themes anhand von Beispielbildern vorstellt.
Direkter Link zur Übersicht: https://github.com/UweZiegenhagen/LaTeX-Beamer-Theme-Overview/blob/main/OVERVIEW.md
Technisch funktioniert es so, dass der Name des Themes aus dem Dateinamen extrahiert wird, dazu nutze ich mein Varsfromjobname-Paket. Die einzelnen PDFs werden dann über ein Python-Skript mit LaTeX erzeugt, mittels imagemagick in einzelne PNGs zerlegt und in der Overview.md verlinkt.
Hinweis: Nicht bei allen in TeX Live vorhandenen Themes funktioniert dieser Weg, die Autoren der nicht funktionierenden Themes werde ich anschreiben.
Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined.
Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.
More Posts - Website
Category:
LaTeX,
Artikel |
Kommentare deaktiviert für Liste aller Beamer Themes in TeX Live
2022-06-27, 20:10
Die Helligkeit des Bildschirms lässt sich auch recht einfach per Powershell setzen
powershell (Get-WmiObject -Namespace root/WMI -Class WmiMonitorBrightnessMethods).WmiSetBrightness(1,50) |
powershell (Get-WmiObject -Namespace root/WMI -Class WmiMonitorBrightnessMethods).WmiSetBrightness(1,50)
setzt die Helligkeit beispielsweise auf 50 Prozent.
Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined.
Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.
More Posts - Website
2022-06-27, 20:06
Für LuaLaTeX gibt es mit showhyphenation und showkerning zwei interessante Pakete, die die möglichen Trennstellen bzw. das Kerning anzeigen.
%!TEX TS-program = lualatex
\documentclass[12pt,ngerman]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{blindtext}
\usepackage{microtype}
\usepackage{showhyphenation}
\usepackage[ontop]{showkerning}
\begin{document}
\blindtext
\blindtext
\end{document} |
%!TEX TS-program = lualatex
\documentclass[12pt,ngerman]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{blindtext}
\usepackage{microtype}
\usepackage{showhyphenation}
\usepackage[ontop]{showkerning}
\begin{document}
\blindtext
\blindtext
\end{document}

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined.
Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.
More Posts - Website
2022-03-20, 22:41
Über eine Verknüpfung auf die Rundll32.exe kann man flink in den Energiesparmodus von Windows wechseln.
In irgendeinem Ordner (z.B. auf dem Desktop) rechte Maustaste => neu => Verknüpfung. Als Speicherort des Elements dann folgendes eingeben:
C:\Windows\System32\rundll32.exe powrprof.dll,SetSuspendState
Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined.
Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.
More Posts - Website
2022-03-19, 20:52
Hier noch ein weiteres Beispiel, wie man sich mit Python sinnlose manuelle Arbeiten erleichtern kann. Gegeben sei die folgende Verzeichnisstruktur:
Verzeichnis1
Ordner1
Unterordner1
Willich.txt
Ordner2
Unterordner2
Willich.txt
Ordner3
Unterordner3
Willich.txt
Die in den Ordnern liegenden Dateien sind alle gleich benannt (trotz unterschiedlicher Inhalte), sollen aber für die weitere Verarbeitung in einen Ordner verschoben werden. Man kann sie jetzt manuell nach dem Schema „Ordnerx-Unterordnerx-Dateiname“ umbenennen, man kann es aber auch lassen und ein kurzes Python-Skript dazu schreiben. Spätestens bei 20 oder 30 Dateien lohnt sich der Aufwand der initialen Entwicklung, das Beispiel lässt sich auch leicht auf andere Aufgaben übertragen. Die folgende Python-Datei speichert man in „Verzeichnis1“, dieses Verzeichnis bildet dann den root-Pfad. Der Rest ist dann einfach nur cleveres Auswerten des Pfades und das Wechseln der Backslashes in Unterstriche, um den neuen Pfad zu bauen.
import os
for (root,dirs,files) in os.walk('.'):
for file in files:
fullpath = os.path.join(root,file)
if fullpath.endswith('.txt'):
newpath = root+'\\'+root[2:].replace('\\','_')+'_'+file
print(newpath)
os.rename(fullpath, newpath) |
import os
for (root,dirs,files) in os.walk('.'):
for file in files:
fullpath = os.path.join(root,file)
if fullpath.endswith('.txt'):
newpath = root+'\\'+root[2:].replace('\\','_')+'_'+file
print(newpath)
os.rename(fullpath, newpath)
Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined.
Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.
More Posts - Website
2022-03-19, 20:20
Vor kurzem hatte ich die Herausforderung, diverse XML Dateien zu kombinieren, die aufgrund einer Größenbeschränkung in einzelne, jeweils eigenständige, Dateien zerlegt worden waren. In jeder Datei fanden sich XML-Metaangaben in den ersten zwei und der letzten Zeile. Die Aufgabe bestand nun darin, den XML-Kopf und das XML-Ende nur einmal in der Ausgabedatei zu haben. An der folgenden Text-Datei kann man das gut erkennen:
Will ich nur einmal am Anfang
Will ich nur einmal am Anfang
Will ich
Will ich
Will ich
Will ich
Will ich
Will ich nur einmal am Ende
Mit Python ging es dann recht einfach, elegant und ausreichend performant (3 jeweils über 100 MB große Dateien ließen sich in ungefähr 12 Sekunden kombinieren):
- Die zu kombinierenden Dateien speichere ich in einem Array, hinzu kommt die Angabe des Ausgabepfads. Diese Information könnte man gegebenenfalls auch aus dem Dateisystem holen.
- Wir öffnen die Ausgabedatei zum Schreiben
- und nutzen dann ein enumerate, um den Zähler zu bekommen, bei welcher Datei wir gerade sind
- Bearbeiten wir die erste Datei, so brauchen wir alles bis auf die letzte Zeile
- Bearbeiten wir die letzte Datei, so brauchen wir nicht die ersten beiden Zeilen
- Bei den Dateien 2 bis n-1 brauchen wir weder die ersten zwei noch die letzte Zeile
files = ['f:/willich.txt', 'f:/willich.txt', 'f:/willich.txt']
output = 'F:/kombiniert.txt'
filecount = len(files)
print(f'Processing {filecount} files')
with open(output, 'w') as outputfile: # Ausgabe öffnen
for counter, file in enumerate(files):
print(counter, file)
with open(file, 'r') as fin:
data = fin.read().splitlines(True)
if counter == 0: # Erste Datei: alles bis auf die letzte Zeile
outputfile.writelines(data[:-1])
elif counter == filecount - 1: # letzte Datei, alles bis auf die ersten zwei Zeilen
outputfile.writelines(data[2:])
else: # die Dateien zwischen erster und letzter Datei, nicht die beiden ersten und die letzte Zeile
outputfile.writelines(data[2:-1]) |
files = ['f:/willich.txt', 'f:/willich.txt', 'f:/willich.txt']
output = 'F:/kombiniert.txt'
filecount = len(files)
print(f'Processing {filecount} files')
with open(output, 'w') as outputfile: # Ausgabe öffnen
for counter, file in enumerate(files):
print(counter, file)
with open(file, 'r') as fin:
data = fin.read().splitlines(True)
if counter == 0: # Erste Datei: alles bis auf die letzte Zeile
outputfile.writelines(data[:-1])
elif counter == filecount - 1: # letzte Datei, alles bis auf die ersten zwei Zeilen
outputfile.writelines(data[2:])
else: # die Dateien zwischen erster und letzter Datei, nicht die beiden ersten und die letzte Zeile
outputfile.writelines(data[2:-1])
Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined.
Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.
More Posts - Website
2022-03-19, 20:02
Neben der Nutzung der scrlttr2 Klasse gibt es in aktuelleren KOMA-Script Versionen auch die Möglichkeit, das scrletter-Paket zu nutzen. Hier ein Beispiel:
\documentclass[12pt,ngerman]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs}
\usepackage{babel}
\usepackage{graphicx}
\usepackage{csquotes}
\usepackage{paralist}
\usepackage{xcolor}
\usepackage{palatino}
\usepackage{blindtext}
\usepackage{scrletter}
\setkomavar{fromname}{Max Mustermann}
\setkomavar{fromemail}{Max@Mustermann.de}
\setkomavar{fromaddress}{Musterweg 221, 12345 Musterstadt}
\setkomavar{firstfoot}{\usekomavar{fromemail}}
\begin{document}
\begin{letter}{Maria Mustermann \\ Mustergasse 1 \\ 12346 Musterstadt}
\opening{Hallo Maria,}
\blindtext[2]
\closing{Mit freundlichen Grüßen}
\end{letter}
\end{document} |
\documentclass[12pt,ngerman]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs}
\usepackage{babel}
\usepackage{graphicx}
\usepackage{csquotes}
\usepackage{paralist}
\usepackage{xcolor}
\usepackage{palatino}
\usepackage{blindtext}
\usepackage{scrletter}
\setkomavar{fromname}{Max Mustermann}
\setkomavar{fromemail}{Max@Mustermann.de}
\setkomavar{fromaddress}{Musterweg 221, 12345 Musterstadt}
\setkomavar{firstfoot}{\usekomavar{fromemail}}
\begin{document}
\begin{letter}{Maria Mustermann \\ Mustergasse 1 \\ 12346 Musterstadt}
\opening{Hallo Maria,}
\blindtext[2]
\closing{Mit freundlichen Grüßen}
\end{letter}
\end{document}

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined.
Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.
More Posts - Website