From: rux.bbs@bbs.cis.nctu.edu.tw (亦驢) Newsgroups: tw.bbs.comp.chinese Subject: 一個隨手可得的詞庫 Date: 23 Feb 1995 14:40:14 GMT 成大計中站轉信出了問題,重新貼一次: 詞庫的重要性,應該是很清楚的。 簡單的像是「修正 Big5 文件的程式」, 困難點的像是:「自動選字輸入法」、「校對」、「語音辨識」等 都有機會使用到詞庫。 但在網路上似乎沒有可資利用的詞庫, 像我及 Purkinje 這種局外人,想寫個小程式玩玩, 找不到人提供詞庫就只能走旁門... :P 於是,昨天一不小心,發現一個「垂手可得」的詞庫: 倚天的普及率,應該是沒話說。他有一種輸入法叫「聯想字」。 所謂聯想字,就是預測你下一個可能的輸入。 這種輸入法,對於想忙打的人來說,幫助不大, 但對於對鍵盤不熟、習慣選字的人來說,卻大有助益。 聯想字的原理很簡單,建好一套詞庫。 你打了一個字,他就顯示詞庫中以此字為首的詞的下一字, 運氣好的話,一字只需一鍵就可打出一段。 感謝倚天公司,這詞庫很容易就可使用。方法如下: (LCCVT 是一支轉換程式,我附在後面) TABCVT LCPHRASE.TTT ET1 TABCVT LCWORD.TTT ET2 LCCVT ET1 > CORPUS.ET LCCVT ET2 >> CORPUS.ET 如此,就可得到一個兩萬七千詞的詞庫了 :) 雖然沒有詞頻等相關資料,不過也差強人意了。 希望倚天、自然或漢音能將詞庫格式公開,那就太好了 :) 以下是 LCCVT.C: #include <stdio.h> #include <string.h> int main(int argc, char **args) { char *c, buf[256]; FILE *fp; int mode, i; if (argc < 2) { printf("USAGE: LCCVT <et_lc_file>\n"); return -1; } fp = fopen(args[1], "rt"); if (fp == NULL) { printf("Cannot open %s\n", args[1]); return -1; } fgets(buf, sizeof(buf)-1, fp); mode = *(buf+8) - '0'; if (mode) { while (fgets(buf, sizeof(buf)-1, fp)) { buf[strlen(buf)-1] = ' '; *(buf+2) = '\0'; c = buf + (i = 3); while (*c) { if (*c == ' ') { *c = '\0'; printf("%s%s\n", buf, buf + i); i = c - buf + 1; } c++; } } } else { while (fgets(buf, sizeof(buf)-1, fp)) { *(buf+2) = '\0'; c = buf + 3; while (*c != '\n') { printf("%s%c%c\n", buf, *c, *(c+1)); c += 2; } } } return 0; } -- 亦驢人驢名亦驢(徵下聯) 成大電研計算機 rux@eembox.ncku.edu.tw