復(fù)雜語言處理為什么那么難?
作為程序員,是可能聽到過復(fù)雜語言處理這個概念的。但是,這東西對于普通用戶來說也是重要的。只不過,程序員有時候需要考慮的是該如何依照規(guī)則實現(xiàn)出相應(yīng)的功能。而對于普通用戶,需要知道的是電子時代的計算機在處理文本上該有什么規(guī)則。
先說普通用戶。在電腦上碰到的UI就難逃文字。如果這個用戶想學(xué)一些外語,那么多半會碰到語言輸入的問題。比如在我上大學(xué)的時候,學(xué)校的公共機房就有南極星軟件,現(xiàn)在想來大概就是學(xué)校日語專業(yè)的人需要用的。那么在廣泛一點,學(xué)泰語的,高棉語的,僧伽羅語的,梵語的,阿拉伯語的,古敘利亞語的,實際上都有可能碰到各種各樣的文字處理問題。包括但不限于:輸入,排版,混排。
理論上看來,我們這個時代連Unicode都有了,那問題似乎應(yīng)該都被解決了吧?!
并不是,從Unicode的細(xì)節(jié)來看,它的core specification已經(jīng)是細(xì)節(jié)豐富的東西了。但是在真正的使用場景中,有時可能只是涉及皮毛。而且Unicode并不是閉門造車,而是兼容并包的,這個兼容并包的含義,就是說,你原來處理那些Unicode之外的經(jīng)驗,大多還是要用上的,甚至還要在某種程度上進(jìn)化一些。
而且,從某個角度上看,Unicode并不一定是終極目標(biāo),雖然它在很大程度上確實有一定的終極性。這其實就是我,作為一個TeX開發(fā)者,經(jīng)常給別人說的,排版模型,限制大致上是以Unicode為主要目標(biāo),但它不應(yīng)該作為排版的終極目標(biāo)來看,即使是最早的8bit時代的一些東西,也是有一定意義的。甚至在都有可能討論不上誰先進(jìn)誰落后的。
從開發(fā)者的角度上看,這種文本處理的東西已經(jīng)能夠讓程序員盤桓數(shù)年而出不來了。那么對于普通用戶似乎就更不友好了。
但,總有好消息,畢竟難的東西,一旦碰了一次,雖然以后還會碰到更多的困難,但解決上大概就沒什么阻礙了,所謂一通百通。
先說復(fù)雜語言。從字面上看,復(fù)雜,其實是相對于拉丁字母的體系說的。拉丁字母體系之外的難啊,各有各的難處。比如說,漢字之多,甚至現(xiàn)在的OpenType都裝不下。比如,漢字變體之多,現(xiàn)在有時會有六種以上。比如,阿拉伯語或者希伯來語,要從右往左書寫。比如,南亞的文字,語音順序和字的順序相異。比如,有些南亞文字會讓文字處理軟件的行高長高,甚至理論上可以無限長。
解決這些問題,實際上需要下面的知識:1. 語言學(xué)(書寫系統(tǒng));2. 計算機,尤其是涉及到文字處理的各種算法,編碼和體系化的知識,如編譯器設(shè)計;3. 統(tǒng)計學(xué),尤其是大量的語料。
作為TeX開發(fā)者,我這些年其實就是在跟這些東西作斗爭。難的倒不是找到這些學(xué)科的材料。難的地方主要在于,從這些跨學(xué)科的知識里面,找到關(guān)聯(lián),統(tǒng)一和對立。很不幸,這東西花掉了我很多的時間。但是幸運的是,我對于這些東西的想法已經(jīng)大概完善。
從結(jié)果上看,將會是:一個文檔,來抽出必要的知識點,整理出邏輯;一個字體,它并不是實際使用的字體,而更像是一個有驗證意義的一個工具;一個庫或者編譯器,用來對應(yīng)前兩項的,最后會用在我自己的TeX里(為了去除harfbuzz,我掙扎了多少年啊)。
下期待續(xù)。