在整理索引檔時發現一個奇怪的問題,像"糖尿"這個詞竟然出現兩次,而且有完全不同的編碼。經過一番整理之後,才了解有些字有所謂的"異體字"問題,某些字型可以看得出不同,某些字型則看來完全相同。詳細的列表可見 https://ctext.org/faq/normalization/zh
解決的方式是在後續處理之前先進行正規化,這類的例字還有 Guillain-Barré 中 é 有相當數量以 e (無重音) 出現的例子。參 https://python3-cookbook.readthedocs.io/zh_CN/latest/c02/p09_normalize_unicode_text_to_regexp.html
程式就一行,其中 ORIGINAL_TEXT 為尚未正規化的原始字串:
unicodedata.normalize('NFC', ORIGINAL_TEXT)
2019年9月18日 星期三
2019年9月7日 星期六
神仙打鼓有時錯之--javascript 檢查文字是否為數字所組成--stackoverflow篇
錯誤示範
https://stackoverflow.com/questions/175739/built-in-way-in-javascript-to-check-if-a-string-is-a-valid-number (2000+個 up vote)
正確解答
https://stackoverflow.com/questions/4434076/best-way-to-alphanumeric-check-in-javascript (80+)
https://lowrey.me/test-if-a-string-is-alphanumeric-in-javascript/
我也被這個雷到,今天才發現,花了老子兩年才發現這個bug…
話說回來,測試真的很重要,tdd = test driven development ROCKS!!
話說回來,測試真的很重要,tdd = test driven development ROCKS!!
話說回來,測試真的很重要,tdd = test driven development ROCKS!!
https://stackoverflow.com/questions/175739/built-in-way-in-javascript-to-check-if-a-string-is-a-valid-number (2000+個 up vote)
正確解答
https://stackoverflow.com/questions/4434076/best-way-to-alphanumeric-check-in-javascript (80+)
https://lowrey.me/test-if-a-string-is-alphanumeric-in-javascript/
我也被這個雷到,今天才發現,花了老子兩年才發現這個bug…
話說回來,測試真的很重要,tdd = test driven development ROCKS!!
話說回來,測試真的很重要,tdd = test driven development ROCKS!!
話說回來,測試真的很重要,tdd = test driven development ROCKS!!
2019年8月15日 星期四
正念 (mindfulness) 的反思
今天看到這則新聞,讓我驚訝不已:
Google’s former mindfulness guru steps down from nonprofit over ‘inappropriate behavior’
顯然一些嚴謹的批評者也對正念的實證效果存疑:
Why Corporations Want You to Shut Up and Meditate
誠如上文所說,整個正念已經變成了一條產業鏈,受到最低(幾乎沒有)的監管
下文比較中性的總結了正念,如同大多數科學論文的結論:需要更多的研究…
正念冥想是否被過度炒作了
Google’s former mindfulness guru steps down from nonprofit over ‘inappropriate behavior’
顯然一些嚴謹的批評者也對正念的實證效果存疑:
Why Corporations Want You to Shut Up and Meditate
誠如上文所說,整個正念已經變成了一條產業鏈,受到最低(幾乎沒有)的監管
下文比較中性的總結了正念,如同大多數科學論文的結論:需要更多的研究…
正念冥想是否被過度炒作了
2019年8月10日 星期六
windows update 1903 error 0xc1900130
2019年8月4日 星期日
$(document).ready equivalent without jQuery
哦這是什麼爛標啊…呵呵呵,不要小看這個爛標,在SO上這個問題可是被問了一次又一次,問到不要不要的
總之一句話,在 html 文件最後宣告的即時函數,會在文件載入完畢後才執行,不需要特別處理。
有兩篇千餘個讚的SO都在講這件事:
https://stackoverflow.com/questions/9899372/pure-javascript-equivalent-of-jquerys-ready-how-to-call-a-function-when-t
https://stackoverflow.com/questions/799981/document-ready-equivalent-without-jquery
總之一句話,在 html 文件最後宣告的即時函數,會在文件載入完畢後才執行,不需要特別處理。
有兩篇千餘個讚的SO都在講這件事:
https://stackoverflow.com/questions/9899372/pure-javascript-equivalent-of-jquerys-ready-how-to-call-a-function-when-t
https://stackoverflow.com/questions/799981/document-ready-equivalent-without-jquery
2019年8月2日 星期五
StanfordNLP 初探
在 2016 的 Stanford Chinese Segmenter初探(三) 中我曾做過測試,中文的斷詞還有進步空間。時間來到 2019 年,原團隊以 PyTorch 為基礎,改寫了 CoreNLP ,成為以 Python 為實作語言的 StanfordNLP ,安裝方式簡化為一句 pip install stanfordnlp。以2016 年相同的測試語句來進行測試,結果如下:
非常令人驚訝的是這次結果完全正確,而且提供的中文模組預設是繁體中文!! 趕快下載來試試吧。
非常令人驚訝的是這次結果完全正確,而且提供的中文模組預設是繁體中文!! 趕快下載來試試吧。
2019年7月29日 星期一
Interactive programming, reloadable code, and the possible mapping in python / jupyter
Interactive programming (Live coding) 是 clojure 社群提出的一個概念,意思是當寫出 reloadable code 時,程式的(執行期)重載不會改寫狀態變數,只更新了函數,有點類似軟體的熱插拔的概念。這個重載是以檔案為單位的重載,因為搭配上工具(主流是 emacs 加上 figwheel (2014)或 shadow-cljs (2015) )而能夠快速、無腦的進行。必要時也可以只重載指定區域的程式碼,而使得對程式本身全面 reloadable 的要求變得更放寬,只要所重載的程式碼是 reloadable 即可。
可以想見,其它語言只要遵循適當的規範,一樣可以達到 Interactive programming / Live coding,而我認為這方面的先行者是 swank-js (2010) 以及 Christopher Wellons 的 skewer (2012),使用的語言是 javascript。 其中 swank-js 的影片相當令人印象深刻,但是 skewer 是較多人使用的,到 2018 年仍有維護。其它如 Bret Victor 的演示 (演示2 ),相信也是使用類似的技巧。
記憶所及,2010-2014開始,python 也出現了其互動環境 ipython 的較多討論,及後來的 jupyter 。這兩個環境的糾葛,這篇 IPython Or Jupyter? 寫得很好。如果使用過 jupyter notebook 的話,相信你也能輕易感受到,它其實已經具有 Live coding 的架構,而且只要遵循一些規範,一樣可以達成 reloadable 的要求。另外也有社群寫出 ijavascript 來使用 jupyter 的現成工作流程。而 javascript 由於可以直接使用 browser 內現成的 kernel / REPL ,因此可以在不安裝任何工具的情況下執行,而造就了一些 repl.it 與 codesandbox 等線上 IDE 的興起。clojure 社群也開發出了基於 jupyter 的 clojupyter 及自幹的 gorilla-repl ,這也更加使得 vim / emacs 加速式微,最後我們再來討論。
Live coding 的價值,主要是體現在需要大量使用者互動或人機介面的程式上。由於使用者的互動會改變程式中諸多變數,這些變動在程式重載後若被重寫,表示使用者/測試者必需重新輸入一次,這樣會使得整個撰寫、修改程式的循環時間拉長,讓人一不小心就失神(mind flow),降低工作效率。一個解決方案是預先寫好測試程式,這某種程度上就是 Test Driven Development (TDD) 的議題。Live coding 是另一種精神的表現,它更自由,不需要事先寫測試,自由發揮的空間更大,但這不見得是當前高度機構化的開發流程所要的。我認為可以這樣說,TDD解決的是程式邏輯的部分,這部分可以經由適當的工作分解,將開發時程平行化,故為產業界所習用;Live coding 較多用在視覺設計(如電玩),需要即時得到視覺迴饋,無法以事先撰寫的測試程式來評估效果。事實上這個做法非常的炫目,連 Unity 之類的工具都得在停止 rendering 的狀態上變動模型,我相信 Bruce Hauman 的技法也能在 WebGL / WebVR 上得到很好的應用。
最後提一下 emacs 的角色,因為當 browser 都可以拿來寫程式的時候,emacs 的 niche 是更被限縮了。而 browser 拿來寫文件早就不是新聞了,可以想見最後一根稻草會使整個 vim / emacs 的按鍵式操作被 browser 整碗捧去的時候。短期內或許還不用太擔心,因為這還涉及到程式的 focus 的處理部分,現在仍有障礙。但是未來如果再有一波自然語言對話的革命,加上 vr/ar/mr 的引入,寫程式或許就只要說說話、在空中拉拉積木就解決了,到時 vim/emacs 就真的成了時代的眼淚了。vim/emacs 最後一線的優勢就是現存的大量 legacy code ,在對 emacs 本身進行客製化時,有大量的程式碼可參考,儘管這意味著必需要學習一個看來有點奇怪的 lisp。這類工具的偏好問題,永遠夾雜著各種技術之間的競逐、互相領先和落後,不會有一個永遠的王者。但是以一個在視窗系統上存在將近30年的工具而言,emacs 真的是一代拳王無誤。
可以想見,其它語言只要遵循適當的規範,一樣可以達到 Interactive programming / Live coding,而我認為這方面的先行者是 swank-js (2010) 以及 Christopher Wellons 的 skewer (2012),使用的語言是 javascript。 其中 swank-js 的影片相當令人印象深刻,但是 skewer 是較多人使用的,到 2018 年仍有維護。其它如 Bret Victor 的演示 (演示2 ),相信也是使用類似的技巧。
記憶所及,2010-2014開始,python 也出現了其互動環境 ipython 的較多討論,及後來的 jupyter 。這兩個環境的糾葛,這篇 IPython Or Jupyter? 寫得很好。如果使用過 jupyter notebook 的話,相信你也能輕易感受到,它其實已經具有 Live coding 的架構,而且只要遵循一些規範,一樣可以達成 reloadable 的要求。另外也有社群寫出 ijavascript 來使用 jupyter 的現成工作流程。而 javascript 由於可以直接使用 browser 內現成的 kernel / REPL ,因此可以在不安裝任何工具的情況下執行,而造就了一些 repl.it 與 codesandbox 等線上 IDE 的興起。clojure 社群也開發出了基於 jupyter 的 clojupyter 及自幹的 gorilla-repl ,這也更加使得 vim / emacs 加速式微,最後我們再來討論。
Live coding 的價值,主要是體現在需要大量使用者互動或人機介面的程式上。由於使用者的互動會改變程式中諸多變數,這些變動在程式重載後若被重寫,表示使用者/測試者必需重新輸入一次,這樣會使得整個撰寫、修改程式的循環時間拉長,讓人一不小心就失神(mind flow),降低工作效率。一個解決方案是預先寫好測試程式,這某種程度上就是 Test Driven Development (TDD) 的議題。Live coding 是另一種精神的表現,它更自由,不需要事先寫測試,自由發揮的空間更大,但這不見得是當前高度機構化的開發流程所要的。我認為可以這樣說,TDD解決的是程式邏輯的部分,這部分可以經由適當的工作分解,將開發時程平行化,故為產業界所習用;Live coding 較多用在視覺設計(如電玩),需要即時得到視覺迴饋,無法以事先撰寫的測試程式來評估效果。事實上這個做法非常的炫目,連 Unity 之類的工具都得在停止 rendering 的狀態上變動模型,我相信 Bruce Hauman 的技法也能在 WebGL / WebVR 上得到很好的應用。
最後提一下 emacs 的角色,因為當 browser 都可以拿來寫程式的時候,emacs 的 niche 是更被限縮了。而 browser 拿來寫文件早就不是新聞了,可以想見最後一根稻草會使整個 vim / emacs 的按鍵式操作被 browser 整碗捧去的時候。短期內或許還不用太擔心,因為這還涉及到程式的 focus 的處理部分,現在仍有障礙。但是未來如果再有一波自然語言對話的革命,加上 vr/ar/mr 的引入,寫程式或許就只要說說話、在空中拉拉積木就解決了,到時 vim/emacs 就真的成了時代的眼淚了。vim/emacs 最後一線的優勢就是現存的大量 legacy code ,在對 emacs 本身進行客製化時,有大量的程式碼可參考,儘管這意味著必需要學習一個看來有點奇怪的 lisp。這類工具的偏好問題,永遠夾雜著各種技術之間的競逐、互相領先和落後,不會有一個永遠的王者。但是以一個在視窗系統上存在將近30年的工具而言,emacs 真的是一代拳王無誤。
訂閱:
文章 (Atom)




