Workflow pour convertir une formule (image) en python

motivation

Même si vous trouvez une formule dans un papier ou un manuel, son utilisation prend du temps. De plus, il faut plus de temps pour le déposer dans le document. Par conséquent, nous avons créé un flux de travail qui peut être utilisé pour la programmation et la documentation ultérieure en utilisant des images mathématiques comme entrée.

Latex de l'image

Latex en utilisant un service appelé Mathpix. L'inscription est requise, mais cela rendra bien l'image.

C'est comme ça image.png

Obtenez la chaîne Ascii Math

Nous traiterons la chaîne AsciiMath et la convertirons en une forme pouvant être utilisée en python.

--Copier Ascii Math sur l'onglet "données" de Mathpix Sur la base de cette chaîne de caractères, nous la rendrons disponible dans le programme.

image.png

Prétraitement

Prétraiter la chaîne

--a: coller la chaîne Ascii Math --shoki_dict: Le dictionnaire à remplacer en premier * Mis à jour de temps en temps

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)#Pour que vous puissiez obtenir la variable en ignorant l'indice_()À 0
hensu = re.findall("[A-Za-z]+",temp)#Extraire des variables
li_moji = list(set(hensu))#Supprimer les variables en double
print(a)
print(li_moji)

Lorsque ce qui précède est exécuté, ce qui suit est émis. S'il y a quelque chose qui ne va pas avec la formule ici, corrigez-le. Assurez-vous également que les variables sont correctement extraites. (Ignorez les extra. Dans l'exemple, ignorez "exp") sigma=(EalphaDeltaT)/(1-nu)(1)/(1.5+3.25/beta-0.5exp(-16/beta)) ['nu', 'sigma', 'DeltaT', 'beta', 'alpha', 'exp', 'E']

Convertir l'expression

Convertissez les lettres et indices grecs en formules

--moji_dict: Liste utilisée lors de l'extraction des paramètres (caractères grecs) * Mis à jour de temps en temps

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)

Lorsque vous exécutez ce qui précède, ce qui suit sera affiché σ=(EαΔT)/(1-ν)1/(1.5+3.25/β-0.5exp(-16/β)) ['E', 'exp', 'ΔT', 'α', 'β', 'ν', 'σ']

Ensuite, ajoutez des indices pour former la formule. C'est la fin de ce qui peut être fait automatiquement, et le reste est manuellement transformé en une expression qui peut être utilisée en python.

result_Eq.py


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

Maintenant que la formule est complète, il est temps d'extraire les paramètres.

paramater_print.py


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

Lorsque vous exécutez ce qui précède, ce qui suit sera produit.

out.py


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

C'est la fin du fonctionnement automatique et les actions suivantes sont effectuées manuellement pour les paramètres.

result.py


paramater_dict= {
    'E':['Module d'Young','MPa'],
    'ΔT':['Différence de température intérieure et extérieure','K'],
    'α':['Coefficient de dilatation linéaire','/K'],
    'β':['Numéro bio',''],
    'ν':['Coefficient de Poisson',''],
    'σ':['Stress thermique','MPa'],
    }

C'est une bonne idée, alors pouvez-vous l'utiliser?

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(σ)

Si vous faites ce qui précède, vous obtiendrez la réponse. 0.045716739515498046

Documentation

À ce stade, vous pouvez facilement documenter à l'aide de sympy en appliquant l'article suivant. Créer un matériau de feuille de calcul de conception mécanique avec python + sympy

Concernant la formule créée

Créez des formules appropriées et partagez-les ci-dessous (mises à jour le cas échéant) Formules et fonctions (mises à jour le cas échéant)

Épilogue

J'ai pensé à utiliser une bibliothèque telle que latex2sympy, mais c'était assez difficile. J'ai appris les expressions régulières dans lesquelles je ne suis pas douée! Mathpix ne peut pas être utilisé en raison de la sécurité de l'entreprise. .. .. Je suis désolé

Recommended Posts

Workflow pour convertir une formule (image) en python
Exemple de conversion en ondelettes d'images en Python
Convertir un PDF en image (JPEG / PNG) avec Python
[python] Convertir la date en chaîne
Convertir numpy int64 en python int
[Python] Convertir la liste en Pandas [Pandas]
Convertir le projet Scratch en Python
[Python] Convertir Shift_JIS en UTF-8
Convertir le code python 3.x en python 2.x
Convertissez l'image au format .zip en PDF avec Python
Convertir Markdown en PDF en Python
Convertir la liste en DataFrame avec python
Python> liste> Convertir une double liste en une seule liste
Convertir une chaîne en image
[Python] Convertit les nombres naturels en nombres ordinaux
Convertir décimal en n-aire [python]
Convertir un PDF en image avec ImageMagick
Introduction à l'analyse d'image opencv python
Python> tuple> Convertir un double tuple en un seul tuple
Convertir un mémo à la fois avec Python 2to3
mail html avec image à envoyer avec python
Convertir Python> séquence de deux valeurs en dictionnaire
[Python] Comment convertir une liste bidimensionnelle en liste unidimensionnelle
Comment convertir Python en fichier exe
[Python] Convertit les délimiteurs de fichier csv en délimiteurs de tabulation
Introduction au remplissage d'image Python Remplissage d'image à l'aide d'ImageDataGenerator
Convertir Hiragana en Romaji avec Python (bêta)
Conversion de katakana en voyelle kana [python]
Convertissez des données FX 1 minute en données 5 minutes avec Python
python> Convertir le tuple en liste> aList = list (pi_tuple)
Comment régler le contraste de l'image en Python
Convertir le type de date Python au format RFC822
Convertir des nombres chinois en nombres arabes avec Python
Convertir de Markdown en HTML en Python
Convertir une URL absolue en URL relative en Python
Mis à jour vers Python 2.7.9
Convertir en HSV
"Backport" vers python 2
Convertir le fichier FBX en ASCII <-> BINARY en Python
Convertir le «nombre» de date Excel en date / heure Python
Texte de l'image et publication sur slack (python slackbot)
Convertissez des PDF en images en masse avec Python
Script Python pour convertir la latitude et la longitude en code de maillage
[Python] Conversion de DICOM en PNG ou CSV
Comment utiliser la bibliothèque d'images Python dans la série python3
Convertir un fichier svg en png / ico avec Python
Comment recadrer une image avec Python + OpenCV
Convertir les valeurs d'époque Windows à ce jour avec python
Convertir STL en maillage Voxel à l'aide de Python VTK
Convertir un float exponentiel en str en Python
Convertir le code de maillage cubique en WKT en Python
Convertir une chaîne au format de liste caractère par caractère avec python
Convertir la date et l'heure zonées en temps Unixtime dans Python2.7
Convertir le fichier .ipynb du notebook jupyter en fichier .py exécutable python
Je veux convertir une image en WebP avec sucette
Un outil pour créer des images de masque pour ETC en Python
Python pratique Convertir le calendrier occidental entré en calendrier japonais
Comment convertir / restaurer une chaîne avec [] en python