數學公式的識別

LaTeX

在上世紀80年代初期,由美國計算機學家萊斯利·蘭伯特開發的LaTeX,可以生成復雜表格和數學公式,得到高印刷質量的科技和數學類文檔書籍等。目前在學術圈和各大出版商都廣泛的使用這種系統來排版、編輯科學文檔,尤其是數學論文、書籍等。數學公式的編輯排版得到了良好的解決,提高了印刷質量。目前LaTeX的主流編輯器有Texworks、TextStudio、WinEdt等,當然也可以使用Visual Studio Code、Sublime Text、Atom等文本編輯器配合各自的插件搭建LaTeX編輯環境。如果有志于學術研究、經常編寫論文、學術海報、雜志和書籍的話,建議可以了解一下。快速入門LaTeX也不是一件困難的事情,網上也有大量的資料可查。

但隨著互聯網的發展,在頁面中展示數學公式還存在若干的問題;為解決在瀏覽器中渲染數學公式,先后出現了MathJax和Katex。它們的數學公式代碼標記大致相同,均可實現在瀏覽器顯示出LaTeX格式的公式。可能大家都知道,現在很多的自媒體和博客等后臺都有圖文編輯功能,很多支持markdown(比如技術博客CSDN,知乎還支持公式編輯);但是也有很多平臺不支持公式的編輯和渲染,比如公眾號就不支持。因此,這些平臺上的數學內容都是圖片,用起來...誰用誰知道...。目前我的公眾號中,數學類的圖文都是通過Visual Studio Code或Sublime Text配合相關插件來編寫markdown,然后將其中的公式轉化為圖片,再粘貼到公眾號圖文編輯器。目前的內容平臺,貌似沒怎么考慮到這種需求。

雖然TeX格式的數學公式編寫和渲染都已解決,但離廣泛使用還很遠,原因很多。個人覺得,有一個很大的原因就是公式編寫對大多數人來說,還是陌生+繁瑣,我們的習慣是手寫。這也是數學在線教育、網絡數學內容傳播的一個痛點,而且圖片格式的數學公式是不利于百度、Google等搜索引擎的檢索的。那有沒有什么好的辦法呢?有,公式識別!請看下文。

公式識別

數學公式的識別重要性不言而喻,同時公式的識別(印刷體的識別、手寫體的識別)要比文字的識別要困難的多。目前谷歌、百度、阿里巴巴等互聯網巨頭的AI項目都是通用AI項目,均沒有公式識別。幸好,還是有些人在努力的,而且還不錯。比如,接下來主要介紹的Mathpix。

使用Python調用Mathpix的API,只是每月只能免費調用1000次,超過一千是收費的;當然還需要登錄,完成注冊,獲取“app_key”,國內用戶請Email聯系:support@mathpix.com。下面是調用代碼,更多細節可參其考官網。

import urllib.request as Request
import urllib.parse as parse
import sys
import base64
import json

class math_formula_recognize:
    def __init__(self):
        self.mathpix_url = 'https://api.mathpix.com/v3/latex'
        self.headers = {'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36",
        'app_id':'XXXXX',
        'app_key':'YYYYYYYYYY',
        'Content-type': 'application/json'}

    def get_Latex(self,image_path = 'test1.jpg'):
        try:
            image_uri = "data:image/jpg;base64," + str(base64.b64encode(open(image_path, "rb").read()))
            data = {'url': image_uri}
            data = parse.urlencode(data).encode('utf-8')
            req = Request.Request(url = self.mathpix_url,headers = self.headers,data = data)
            res = Request.urlopen(req).read()
            print(res)

        except Exception as e:
            raise e


if __name__ == '__main__':
    test = math_formula_recognize()
    test.get_Latex()

除了通過API使用,還可在官網下載相關的轉化工具。

用戶體驗

什么時候公式識別能夠做到實時準確的識別手寫體,同時完成渲染,那么會大大的助力網絡上數學內容的豐富和交流。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容