공식(그림)python화 작업 프로세스

18059 단어 Python

모티프


논문과 교과서에서 공식을 찾아서라도 활용하는 데 시간이 걸린다.더군다나 문서에 빠지면 시간이 더 걸린다.
따라서 공식 이미지를 입력으로 하고 프로그래밍에 사용할 수 있으며 이후의 문서화에도 사용할 수 있는 작업 절차를 만들었다.
※ 전자동은 어렵기 때문에 사람과의 협업 작업입니다.

그림부터 latex화


Mathpix의 서비스를 이용하여latex화하다.등록 등은 필요하지만 좋은 느낌으로 이미지를 latex화합니다.
이런 느낌이에요.

AsciMath 문자열 가져오기


Actimath의 문자열을 pythn에서 사용할 수 있는 형식으로 변환하기
  • Mathpix의 '데이터' 탭을 복사한 AsciMath
    이 문자열을 기반으로 프로그램에서 사용할 수 있습니다.

  • 프리 프로세싱


    문자열 사전 처리
  • a: AsciMath 문자열 붙여넣기
  • shoki_dict: 가장 먼저 교체하는 사전 ※ 수시로 업데이트
  • 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)#添字を無視して変数を取得できるよう、_()を0に変換
    hensu = re.findall("[A-Za-z]+",temp)#変数を抜き出します
    li_moji = list(set(hensu))#変数の重複を消す
    print(a)
    print(li_moji)
    
    이 내용을 실시하면 다음과 같은 내용을 출력할 것이다.만약 이곳식에 이상한 점이 있다면, 나는 수정할 것이다.또 변수가 추출되었는지 확인한다.(무시할 수 있는 예시에서 여분의'exp'가 무시됨)
    sigma=(E*alpha*DeltaT)/(1-nu)*(1)/(1.5+3.25/beta-0.5*exp(-16/beta))
    ['nu', 'sigma', 'DeltaT', 'beta', 'alpha', 'exp', 'E']

    변환 표현식


    그리스 문자와 색인을 공식으로 바꾸다
  • moji_dict: 매개 변수를 추출할 때 사용하는 목록(그리스 문자) ※ 수시로 업데이트
  • 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)
    
    상기 조작을 실행하면 다음과 같은 내용을 출력합니다
    σ=(E*α*ΔT)/(1-ν)*1/(1.5+3.25/β-0.5*exp(-16/β))
    ['E', 'exp', 'ΔT', 'α', 'β', 'ν', 'σ']
    이어서 흰 글자를 붙이면서 공식적인 모양을 만든다.
    자동으로 완성된 것은 여기까지입니다. 그리고python을 수동으로 사용하십시오.
    result_Eq.py
    import math
    σ=(E*α*ΔT)/(1-ν)*1/(1.5+3.25/β-0.5*math.exp(-16/β))
    
    공식이 완성되었으니 다음에 매개 변수를 추출합니다.
    paramater_print.py
    print("paramater_dict= {")
    for i in li:
        print("    " + "'" + i +"':['',''],")
    print("    }")
    
    위 작업을 수행하면 다음 내용이 출력됩니다.
    out.py
    paramater_dict= {
        'E':['',''],
        'exp':['',''],
        'ΔT':['',''],
        'α':['',''],
        'β':['',''],
        'ν':['',''],
        'σ':['',''],
        }
    
    자동 여기까지 매개 변수에 대해 수동으로 다음과 같은 처리를 진행한다
  • 불필요한 매개변수 삭제
  • 순서 변경
  • 설명 및 단위 추가
  • result.py
    paramater_dict= {
        'E':['ヤング率','MPa'],
        'ΔT':['内外温度差','K'],
        'α':['線膨張係数','/K'],
        'β':['ビオ数',''],
        'ν':['ポアソン比',''],
        'σ':['熱応力','MPa'],
        }
    

    겨우 쓸 수 있다


    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(σ)
    
    이 내용을 실행하면 정답이 나온다.
    0.045716739515498046

    문서화


    이렇게 하면 다음 글의 응용에서sympy를 사용하여 간단하게 문서화할 수 있다.
    python+sympy로 기계 시스템 설계 계산표 소재 만들기

    작성된 방정식 정보


    적절한 의식을 만들고 아래에서 공유(적절한 업데이트)
    공식 및 함수(적절한 업데이트)

    후기


    latex2sympy 등 프로그램 라이브러리를 사용하려고 했지만 어렵습니다.
    못하는 정규 표현을 배웠어요!
    회사의 안전 관계로 인해 Mathpix를 사용할 수 없습니다...슬프다.

    좋은 웹페이지 즐겨찾기