Workflow zum Konvertieren der Formel (Bild) in Python

Motivation

Selbst wenn Sie eine Formel in einem Papier oder Lehrbuch finden, dauert es einige Zeit, sie zu verwenden. Darüber hinaus dauert es länger, bis es im Dokument abgelegt ist. Aus diesem Grund haben wir einen Workflow erstellt, der für die Programmierung und anschließende Dokumentation unter Verwendung mathematischer Bilder als Eingabe verwendet werden kann.

Latex vom Bild

Latex mit einem Dienst namens Mathpix. Eine Registrierung ist erforderlich, aber das Bild wird schön latexiert.

Es ist so image.png

Holen Sie sich die Ascii Math-Zeichenfolge

Wir werden die AsciiMath-Zeichenfolge verarbeiten und in eine Form konvertieren, die in Python verwendet werden kann.

--Kopieren Sie Ascii Math auf der Registerkarte "Daten" von Mathpix Basierend auf dieser Zeichenfolge werden wir sie im Programm verfügbar machen.

image.png

Vorverarbeitung

Verarbeiten Sie die Zeichenfolge vor

--a: Fügen Sie die Ascii Math-Zeichenfolge ein --shoki_dict: Das Wörterbuch, das zuerst ersetzt werden soll * Von Zeit zu Zeit aktualisiert

translate_1.py


import re
# a = "sigma=(E alpha DeltaT)/(1-nu)*(1)/(1.5+3.25//beta-0.5 exp(-16//beta))"
# a = "M_(max)=(w*l^(2))/(8)"
a= "delta_(max)=(5*w*l^(4))/(384 E*I)"
# a ="K=(1.7 xx10^(5))/((delta_(1)+delta_(0))/(lambda_(1))+(delta_(2)+delta_(0))/(lambda_(2)))xx(0.6P)/(H)+(10^(6)lambda_(f))/(delta_(1)+delta_(2))"
shoki_tikan_dict = {" ":"*",
                   "xx":"*",
                   "^":"**",
                   "//":"/"}
for i in shoki_tikan_dict:
    a = a.replace(i,shoki_tikan_dict[i])
    
temp = re.sub("_\((.*?)\)","0",a)#Damit Sie die Variable erhalten, die den Index ignoriert_()Auf 0
hensu = re.findall("[A-Za-z]+",temp)#Variablen extrahieren
li_moji = list(set(hensu))#Entfernen Sie doppelte Variablen
print(a)
print(li_moji)

Wenn das oben Gesagte ausgeführt wird, wird Folgendes ausgegeben. Wenn hier etwas mit der Formel nicht stimmt, korrigieren Sie sie. Stellen Sie außerdem sicher, dass die Variablen ordnungsgemäß extrahiert werden. (Ignorieren Sie die zusätzlichen. Ignorieren Sie im Beispiel "exp".) sigma=(EalphaDeltaT)/(1-nu)(1)/(1.5+3.25/beta-0.5exp(-16/beta)) ['nu', 'sigma', 'DeltaT', 'beta', 'alpha', 'exp', 'E']

Ausdruck konvertieren

Konvertieren Sie griechische Buchstaben und Indizes in Formeln

--moji_dict: Liste, die beim Extrahieren von Parametern verwendet wird (griechische Zeichen) * Von Zeit zu Zeit aktualisiert

translate_2.py


moji_dict = {'lambda':"λ",
             'delta':"δ",
            'sigma':"σ",
            'alpha':"α",
            'DeltaT':"ΔT",
            'nu':'ν',
            'beta':'β',
            'epsi':"ε",
            'pi':'π',
            'mu':'μ'}


def tikan(moji_retsu,taisho,moji_dict):
#     print(taisho)
    taisho_temp = taisho+"_"
    seiki_1 = taisho_temp + "\(.*?\)"
    seiki_2 = taisho_temp + "\((.*?)\)"
    b = re.findall(seiki_1,moji_retsu)

    if len(b) != 0:
        if taisho in moji_dict:
            tikan_moji = moji_dict[taisho]
        else:
            tikan_moji = taisho
#             print(tikan_moji)
            
        newList = [re.sub(seiki_2,tikan_moji+"\\1",item) for item in b]
        moji_retsu = re.sub(seiki_2,tikan_moji+"\\1",moji_retsu)

    elif taisho in moji_dict:
        tikan_moji = moji_dict[taisho]
        newList = [tikan_moji]
        moji_retsu = moji_retsu.replace(taisho,tikan_moji)

    else:
        tikan_moji = taisho
        newList = [taisho]
        
    return moji_retsu,newList

li=[]
for i in li_moji:
    a,p = tikan(a,i,moji_dict)
    li.extend(p)
li=list(set(li))
li.sort()

a = re.sub("\(([0-9])\)","\\1",a)
print(a)
print(li)

Wenn Sie das oben Gesagte ausführen, wird Folgendes ausgegeben σ=(EαΔT)/(1-ν)1/(1.5+3.25/β-0.5exp(-16/β)) ['E', 'exp', 'ΔT', 'α', 'β', 'ν', 'σ']

Fügen Sie als Nächstes Indizes hinzu, um die Formel zu bilden. Dies ist das Ende dessen, was automatisch erledigt werden kann, und der Rest wird manuell in einen Ausdruck umgewandelt, der in Python verwendet werden kann.

result_Eq.py


import math
σ=(E*α*ΔT)/(1-ν)*1/(1.5+3.25/β-0.5*math.exp(-16/β))

Nachdem die Formel vollständig ist, ist es Zeit, die Parameter zu extrahieren.

paramater_print.py


print("paramater_dict= {")
for i in li:
    print("    " + "'" + i +"':['',''],")
print("    }")

Wenn Sie das oben Gesagte ausführen, wird Folgendes ausgegeben.

out.py


paramater_dict= {
    'E':['',''],
    'exp':['',''],
    'ΔT':['',''],
    'α':['',''],
    'β':['',''],
    'ν':['',''],
    'σ':['',''],
    }

Dies ist das Ende des automatischen Betriebs, und die folgenden Aktionen werden manuell für die Parameter ausgeführt.

result.py


paramater_dict= {
    'E':['Elastizitätsmodul','MPa'],
    'ΔT':['Temperaturunterschied zwischen Innen und Außen','K'],
    'α':['Linearer Ausdehnungskoeffizient','/K'],
    'β':['Bio-Nummer',''],
    'ν':['QUERKONTRAKTIONSZAHL',''],
    'σ':['Thermische Belastung','MPa'],
    }

Es ist eine gute Idee, können Sie sie also verwenden?

run.py


import math

E = 200
ΔT = 10
α = 0.00005
β = 2
ν = 0.3

σ=(E*α*ΔT)/(1-ν)*1/(1.5+3.25/β-0.5*math.exp(-16/β))
print(σ)

Wenn Sie das oben genannte tun, erhalten Sie die Antwort. 0.045716739515498046

Dokumentation

An dieser Stelle können Sie mithilfe von Sympy problemlos dokumentieren, indem Sie den folgenden Artikel anwenden. Erstellen eines mechanischen Konstruktionsberechnungsblattmaterials mit Python + Sympy

In Bezug auf die erstellte Formel

Erstellen Sie die entsprechenden Formeln und teilen Sie sie unten mit (gegebenenfalls aktualisiert). Formeln und Funktionen (entsprechend aktualisiert)

Nachwort

Ich dachte darüber nach, eine Bibliothek wie latex2sympy zu verwenden, aber es war ziemlich schwierig. Ich habe etwas über reguläre Ausdrücke gelernt, in denen ich nicht gut bin! Mathpix kann aus Sicherheitsgründen nicht verwendet werden. .. .. Es tut mir Leid

Recommended Posts

Workflow zum Konvertieren der Formel (Bild) in Python
Beispiel für die Wavelet-Konvertierung von Bildern in Python
Konvertieren Sie PDF in Bilder (JPEG / PNG) mit Python
[Python] Datum in Zeichenfolge konvertieren
Konvertieren Sie numpy int64 in python int
[Python] Liste in Pandas konvertieren [Pandas]
Konvertieren Sie das Scratch-Projekt in Python
[Python] Konvertieren Sie Shift_JIS in UTF-8
Konvertieren Sie Python 3.x-Code in Python 2.x.
Konvertieren Sie das Bild in .zip mit Python in PDF
Konvertieren Sie Markdown in Python in PDF
Konvertieren Sie die Liste mit Python in DataFrame
Python> Liste> Doppelte Liste in einfache Liste konvertieren
Konvertieren Sie eine Zeichenfolge in ein Bild
[Python] Konvertiert natürliche Zahlen in Ordnungszahlen
Konvertieren Sie die Dezimalzahl in n-ary [Python]
Konvertieren Sie PDF in Image mit ImageMagick
Einführung in die Bildanalyse opencv python
Python> Tupel> Konvertiert doppeltes Tupel in einzelnes Tupel
Konvertieren Sie Memos sofort mit Python 2to3
HTML-Mail mit Bild zum Senden mit Python
Konvertieren Sie Python> Zwei-Wert-Sequenz in Wörterbuch
[Python] So konvertieren Sie eine zweidimensionale Liste in eine eindimensionale Liste
So konvertieren Sie Python in eine exe-Datei
[Python] Konvertieren Sie CSV-Dateibegrenzer in Tabulatortrennzeichen
Einführung in das Auffüllen von Python-Bildern Auffüllen von Bildern mit ImageDataGenerator
Konvertiere Hiragana mit Python (Beta) in Romaji
Konvertieren Sie von Katakana zu Vokal Kana [Python]
Python> Tupel in Liste konvertieren> aList = Liste (pi_tuple)
So passen Sie den Bildkontrast in Python an
Konvertieren Sie den Python-Datumstyp in das RFC822-Format
Konvertieren Sie chinesische Zahlen mit Python in arabische Zahlen
In Python von Markdown in HTML konvertieren
Konvertieren Sie die absolute URL in eine relative URL in Python
Auf Python 2.7.9 aktualisiert
Zum HSV konvertieren
"Backport" zu Python 2
Konvertieren Sie die FBX-Datei in Python in ASCII <-> BINARY
Konvertieren Sie die "Anzahl" des Excel-Datums in die Python-Datumszeit
Bildtext und Post to Slack (Python Slackbot)
Konvertieren Sie PDFs mit Python in Massenbilder
Python-Skript zum Konvertieren von Breiten- und Längengrad in Mesh-Code
[Python] Konvertieren von DICOM in PNG oder CSV
Verwendung der Python-Bildbibliothek in der Python3-Serie
Konvertieren Sie die SVG-Datei mit Python in png / ico
So beschneiden Sie ein Bild mit Python + OpenCV
Konvertieren Sie Windows-Epochenwerte mit Python in das Datum
Konvertieren Sie STL mit Python VTK in ein Voxel-Netz
Konvertieren Sie den exponentiellen Float in Python in str
Konvertieren Sie kubischen Netzcode in Python in WKT
Konvertieren Sie die Zeichenfolge mit Python in ein zeichenweises Listenformat
Konvertieren Sie Datum und Uhrzeit in Zeitzonen in Unixtime in Python2.7
Konvertieren Sie die JPYTER-Notebook-IPynb-Datei in die ausführbare Python-Py-Datei
Ich möchte ein Bild mit Lollipop in WebP konvertieren
Ein Tool zum Erstellen von Maskenbildern für ETC in Python
Python-Übung Konvertieren Sie den eingegebenen westlichen Kalender in einen japanischen Kalender
So konvertieren / wiederherstellen Sie einen String mit [] in Python