2010年11月27日星期六

成人版的英文電腦輔助教學工具 (以及 openjdk 的中文字型問題)

成人版的英文電腦輔助教學工具 -- Stanford Parser 呵呵, 別想歪了... 今天要介紹的工具之所以不適合小朋友, 並不是因為它含有不恰當的內容, 而是因為它太生硬了 -- 用 Stanford Parser 學英文, 沒有趣味生動的遊戲可玩, 只能單純地幫你做 「英語句型文法解析」。

官網下載點 取得最新版 1.6.4, 解壓縮後進入子目錄。 然後執行: java -cp stanford-parser.jar edu.stanford.nlp.parser.lexparser.LexicalizedParser englishPCFG.ser.gz testsent.txt 其中最後一個參數是純文字的資料檔, 內含五個英文句子。 輸出一大串資料, 最前面一部分看起來像這樣:

Loading parser from serialized file englishPCFG.ser.gz ... done [5.2 sec].
testsent.txt
Parsing file: testsent.txt with 5 sentences.
Parsing [sent. 1 len. 21]: [Scores, of, properties, are, under, extreme,
fire, threat, as, a, huge, blaze, continues, to, advance, through,
Sydney, 's, north-western, suburbs, .]
(ROOT
 (S
   (NP
     (NP (NNS Scores))
     (PP (IN of)
       (NP (NNS properties))))
   (VP (VBP are)
     (PP (IN under)
       (NP (JJ extreme) (NN fire) (NN threat)))
     (SBAR (IN as)
       (S
         (NP (DT a) (JJ huge) (NN blaze))
         (VP (VBZ continues)
           (S
             (VP (TO to)
               (VP (VB advance)
                 (PP (IN through)
                   (NP
                     (NP (NNP Sydney) (POS 's))
                     (JJ north-western) (NNS suburbs))))))))))
   (. .)))

意思是: 「第一個句子共有 21 個字, 包含一個主要子句, 以及一個由 "as" 所帶領的附屬子句。 主要子句的主詞是 "Scores of properties", 動詞是 "are", 補語是 "under extreme fire threat"...」 其中每個大寫的代號分別代表什麼意義? 請見 簡表。 若需要更完整的資訊, 詳見 Stanford Parser 首頁的 "FAQ" 第三個問題 inventory of tags, phrasal categories, and typed dependencies 所提到的幾個連結。

當然, 這種呈現方式只有熟悉 lisp 的人才能接受 (或者, 如果一位英文老師可以看懂這種方式, 就表示她其實可能可以學 lisp 語言)。 我們把倒數第三個參數換掉, 改用比較人性化的圖形介面方式呈現結果: java -cp stanford-parser.jar edu.stanford.nlp.parser.ui.Parser englishPCFG.ser.gz testsent.txt 載入 parser 會花很多時間, 要等一下。 載完之後, 要按一下 「parse」 才會進行分析一句。 然後按一下 「next」, 換下一句亮起 (底色變黃), 再按 「parse」 分析它。 如果是手動打入或貼上一句話, 則要按 「prev」, 讓這句話亮起之後才能按 「parse」 進行分析。 本文最前面插圖所顯示的是 Stanford Parser 分析 (我自己建的) 另一個簡單純文字檔 asimov.txt 的結果。

事實上這個套件有好幾個 parser (分析語法的工具) -- 每一個名為 *.ser.gz 的檔案, 都是一個獨立的 parser, 都可以放在倒數第二個參數。 除了 "用華爾街日報的文章訓練出來的" wsjPCFG.ser.gz 與 wsjFactored.ser.gz, 甚至還有德文、 阿拉伯文、 (我猜) "用新華社文章訓練出來的" 簡體中文 parser。 請大家玩玩看中文 parser; 也把這篇文章介紹給英文/德文/阿拉伯文老師吧。

這套軟體是用 java 寫的, 所以 Windows 和 Mac 也可以用。 在 Windows 下可以點選 lexparser-gui.bat; 在 Linux 下若系統內有安裝 tcsh 套件, 也可不必下指令, 點選 lexparser-gui.csh 就可以直接叫出圖形介面, 然後再手動載入 parser、 手動載入欲分析的文字檔。

我在 mepis 8.5 底下, 內建的 java 是 openjdk-6-jre, 一開始無法顯示中文 (出現一堆方塊)。 呵呵既然要學英文, 就一不作二不休, 叫它別顯示中文吧: unset LANG 之後再執行 lexparser-gui.csh 所有的訊息就都變成英文, 一切問題都消失了 :-)

不行不行, 這樣是在躲避問題, 不是在解決問題。 請執行 xlsfonts | grep big5 看一下你的系統內有那些中文字型。 例如我的系統裡面有很多 -arphic-ar pl 開頭的文鼎字型, 所以隨便挑了一個: -arphic-ar pl ukai tw-book-r-normal--0-0-0-0-p-0-big5-0 嗯, 我和你有相同的疑問: 「可是現在的 linux 都是 utf8 編碼呀?」 我猜系統應該會自動將 utf8 轉成 big5, 找出正確的字來顯示吧。 總之我這樣做, 是 ok 的: 進入 /usr/lib/jvm/java-6-openjdk/jre/lib 將 fontconfig.properties.src 複製成 fontconfig.properties 並且將裡面的 allfonts.chinese-big5=... 那一句改成: allfonts.chinese-big5=-arphic-ar pl ukai tw-book-r-normal--*-*-*-*-p-*-big5-0 就是貼上字型名稱, 然後把中間五個 0 改成 *。 細節我也不熟悉; 有興趣的讀者詳見 How to install and use X-Windows fonts。 又, 或者請參考部落客 「佐」 的文章: 「OpenJDK的字體設定」

[2011/2/4 補充] 我做的中文開機隨身碟 slax-cyut 底下收錄的 java 套件是 jre-6u11-i586-1pst.lzm; 而中文字型套件是 ttf-arphic-ukai.lzm。 上面的方法試半天, 失敗。 最後照著林老師貼的 「linux 下 java 1.5/1.6 的中文設定」 一文, 稍微修改步驟如下, 設定成功! 先用 grep ttf-arphic-ukai /proc/mounts 查出字型套件的根目錄在 /mnt/live/memory/images/ttf-arphic-ukai.lzm 然後 cd /mnt/live/memory/images/ttf-arphic-ukai.lzm ; du 查出 ttf 中文字型目錄在 usr/share/fonts/TTF 。 所以在 /usr/lib/java/lib/fonts/ 底下建一個 fallback 子目錄, 然後在這個新目錄底下: ln -s /usr/share/fonts/TTF/fonts.* . (注意最後面有一個句點, 代表將新建立的捷徑放在目前目錄底下。)

為什麼會找到這個東東呢? 因為我下學期要教 科技英文... 一定要用很科技的方法來教英文 (誤)。

0 留言:

張貼意見