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使用,還可在官網下載相關的轉化工具。
用戶體驗
什么時候公式識別能夠做到實時準確的識別手寫體,同時完成渲染,那么會大大的助力網絡上數學內容的豐富和交流。