[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

some pseudo code of dim



zi -- 一个汉字, 或者是一个输入法中的字, 比入 Wang

entry -- 连在一起的两个 zi 的词, 比如前面一句中的 ``在一,'' 有可能是随机
的从 word_chain 中检出来的.

word_chian -- 一列 zi, 有可能就是一个句子, 或者是分断好了的一串拼音, 比
如 Jiang,Ze,Ming,Dai,Yan,Jing; 也有可能是待填空的句子, 比如 张__是__部长

dict -- 这里面有很多 entry, 每个 entry 后面带上好多 word_chain.

从 word_chain 中学习新的 word_chain
learn_word_chain(word_chain)
        while (entry=pick_next_most_possible_entry(word_chain)) ***
                while (cmp=pick_next_most_possible_word_chain(entry))
                        cmp_and_learn(word_chain,cmp);
                        break_at_random_chances;
                break_at_random_chances;

把一个拼音的 word_chain 转化成汉字的 word_chain
guess_word_chain(word_chain)
        while (entry=pick_next_most_possible_entry(word_chain)) ***
                while (cmp=pick_next_most_possible_word_chain(entry))
                        score_amgic();
                        result=cmp_and_guess_segment(word_chain,cmp);
                        add_result_to_tmp_memory(result);
                        break_at_nearly_random_chances;
                break_at_nearly_random_chances;
        result=best_result_from_tmp_memory;

*** 在 *** 处, 可以 launch 一个 thread 来做.

cmp_and_learn(word_chain,cmp)
        cmp_magic();
        count_hit_points();

cmp_and_guess_segment(word_chain,cmp)
        cmp_magic();
        score_magic();

cmp_magic()
        如果兴趣在汉字上,就比较汉字;
        如果兴趣在拼音上,就比较拼音;
        类似于 Unix 命令 diff/patch 的算法:
        ABC123DEF, GHI123JKL => __123__, ABC, DEF, GHI, JKL
        ABC123DEF, __123__ => ABC, DEF, __123__
        ABCXYDEF, 123XY456 => score_entry(XY), ABC, DEF, 123, 456
        更复杂的情况, 再论.

score_magic()
        减 若干分, per entry, 表示多翻一次字典, 累啊
        加 若干分, per __XXX__
        其它部分, 只要挑 hits_number 最高的就可以, hits_number=score.

forget_magic()
        ...

告诉我你们的意见.谢谢!
-- 
Personal Homepage ....................... http://www.zhaoway.com
Debian Chines Input Method .......... http://dim.sourceforge.net



Reply to: