Created
February 14, 2016 07:41
-
-
Save alswl/92ef2386b6151683c33c to your computer and use it in GitHub Desktop.
「鼠须管」导入搜狗 Bin 词库
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # -*- coding: UTF-8 -*- | |
| import sys | |
| import struct | |
| import codecs | |
| PinYinDic = [ | |
| "a", | |
| "ai", | |
| "an", | |
| "ang", | |
| "ao", | |
| "ba", | |
| "bai", | |
| "ban", | |
| "bang", | |
| "bao", | |
| "bei", | |
| "ben", | |
| "beng", | |
| "bi", | |
| "bian", | |
| "biao", | |
| "bie", | |
| "bin", | |
| "bing", | |
| "bo", | |
| "bu", | |
| "ca", | |
| "cai", | |
| "can", | |
| "cang", | |
| "cao", | |
| "ce", | |
| "cen", | |
| "ceng", | |
| "cha", | |
| "chai", | |
| "chan", | |
| "chang", | |
| "chao", | |
| "che", | |
| "chen", | |
| "cheng", | |
| "chi", | |
| "chong", | |
| "chou", | |
| "chu", | |
| "chua", | |
| "chuai", | |
| "chuan", | |
| "chuang", | |
| "chui", | |
| "chun", | |
| "chuo", | |
| "ci", | |
| "cong", | |
| "cou", | |
| "cu", | |
| "cuan", | |
| "cui", | |
| "cun", | |
| "cuo", | |
| "da", | |
| "dai", | |
| "dan", | |
| "dang", | |
| "dao", | |
| "de", | |
| "dei", | |
| "den", | |
| "deng", | |
| "di", | |
| "dia", | |
| "dian", | |
| "diao", | |
| "die", | |
| "ding", | |
| "diu", | |
| "dong", | |
| "dou", | |
| "du", | |
| "duan", | |
| "dui", | |
| "dun", | |
| "duo", | |
| "e", | |
| "ei", | |
| "en", | |
| "eng", | |
| "er", | |
| "fa", | |
| "fan", | |
| "fang", | |
| "fei", | |
| "fen", | |
| "feng", | |
| "fiao", | |
| "fo", | |
| "fou", | |
| "fu", | |
| "ga", | |
| "gai", | |
| "gan", | |
| "gang", | |
| "gao", | |
| "ge", | |
| "gei", | |
| "gen", | |
| "geng", | |
| "gong", | |
| "gou", | |
| "gu", | |
| "gua", | |
| "guai", | |
| "guan", | |
| "guang", | |
| "gui", | |
| "gun", | |
| "guo", | |
| "ha", | |
| "hai", | |
| "han", | |
| "hang", | |
| "hao", | |
| "he", | |
| "hei", | |
| "hen", | |
| "heng", | |
| "hong", | |
| "hou", | |
| "hu", | |
| "hua", | |
| "huai", | |
| "huan", | |
| "huang", | |
| "hui", | |
| "hun", | |
| "huo", | |
| "ji", | |
| "jia", | |
| "jian", | |
| "jiang", | |
| "jiao", | |
| "jie", | |
| "jin", | |
| "jing", | |
| "jiong", | |
| "jiu", | |
| "ju", | |
| "juan", | |
| "jue", | |
| "jun", | |
| "ka", | |
| "kai", | |
| "kan", | |
| "kang", | |
| "kao", | |
| "ke", | |
| "kei", | |
| "ken", | |
| "keng", | |
| "kong", | |
| "kou", | |
| "ku", | |
| "kua", | |
| "kuai", | |
| "kuan", | |
| "kuang", | |
| "kui", | |
| "kun", | |
| "kuo", | |
| "la", | |
| "lai", | |
| "lan", | |
| "lang", | |
| "lao", | |
| "le", | |
| "lei", | |
| "leng", | |
| "li", | |
| "lia", | |
| "lian", | |
| "liang", | |
| "liao", | |
| "lie", | |
| "lin", | |
| "ling", | |
| "liu", | |
| "lo", | |
| "long", | |
| "lou", | |
| "lu", | |
| "luan", | |
| "lue", | |
| "lun", | |
| "luo", | |
| "lv", | |
| "ma", | |
| "mai", | |
| "man", | |
| "mang", | |
| "mao", | |
| "me", | |
| "mei", | |
| "men", | |
| "meng", | |
| "mi", | |
| "mian", | |
| "miao", | |
| "mie", | |
| "min", | |
| "ming", | |
| "miu", | |
| "mo", | |
| "mou", | |
| "mu", | |
| "na", | |
| "nai", | |
| "nan", | |
| "nang", | |
| "nao", | |
| "ne", | |
| "nei", | |
| "nen", | |
| "neng", | |
| "ni", | |
| "nian", | |
| "niang", | |
| "niao", | |
| "nie", | |
| "nin", | |
| "ning", | |
| "niu", | |
| "nong", | |
| "nou", | |
| "nu", | |
| "nun", | |
| "nuan", | |
| "nue", | |
| "nuo", | |
| "nv", | |
| "o", | |
| "ou", | |
| "pa", | |
| "pai", | |
| "pan", | |
| "pang", | |
| "pao", | |
| "pei", | |
| "pen", | |
| "peng", | |
| "pi", | |
| "pian", | |
| "piao", | |
| "pie", | |
| "pin", | |
| "ping", | |
| "po", | |
| "pou", | |
| "pu", | |
| "qi", | |
| "qia", | |
| "qian", | |
| "qiang", | |
| "qiao", | |
| "qie", | |
| "qin", | |
| "qing", | |
| "qiong", | |
| "qiu", | |
| "qu", | |
| "quan", | |
| "que", | |
| "qun", | |
| "ran", | |
| "rang", | |
| "rao", | |
| "re", | |
| "ren", | |
| "reng", | |
| "ri", | |
| "rong", | |
| "rou", | |
| "ru", | |
| "rua", | |
| "ruan", | |
| "rui", | |
| "run", | |
| "ruo", | |
| "sa", | |
| "sai", | |
| "san", | |
| "sang", | |
| "sao", | |
| "se", | |
| "sen", | |
| "seng", | |
| "sha", | |
| "shai", | |
| "shan", | |
| "shang", | |
| "shao", | |
| "she", | |
| "shei", | |
| "shen", | |
| "sheng", | |
| "shi", | |
| "shou", | |
| "shu", | |
| "shua", | |
| "shuai", | |
| "shuan", | |
| "shuang", | |
| "shui", | |
| "shun", | |
| "shuo", | |
| "si", | |
| "song", | |
| "sou", | |
| "su", | |
| "suan", | |
| "sui", | |
| "sun", | |
| "suo", | |
| "ta", | |
| "tai", | |
| "tan", | |
| "tang", | |
| "tao", | |
| "te", | |
| "tei", | |
| "teng", | |
| "ti", | |
| "tian", | |
| "tiao", | |
| "tie", | |
| "ting", | |
| "tong", | |
| "tou", | |
| "tu", | |
| "tuan", | |
| "tui", | |
| "tun", | |
| "tuo", | |
| "wa", | |
| "wai", | |
| "wan", | |
| "wang", | |
| "wei", | |
| "wen", | |
| "weng", | |
| "wo", | |
| "wu", | |
| "xi", | |
| "xia", | |
| "xian", | |
| "xiang", | |
| "xiao", | |
| "xie", | |
| "xin", | |
| "xing", | |
| "xiong", | |
| "xiu", | |
| "xu", | |
| "xuan", | |
| "xue", | |
| "xun", | |
| "ya", | |
| "yan", | |
| "yang", | |
| "yao", | |
| "ye", | |
| "yi", | |
| "yin", | |
| "ying", | |
| "yo", | |
| "yong", | |
| "you", | |
| "yu", | |
| "yuan", | |
| "yue", | |
| "yun", | |
| "za", | |
| "zai", | |
| "zan", | |
| "zang", | |
| "zao", | |
| "ze", | |
| "zei", | |
| "zen", | |
| "zeng", | |
| "zha", | |
| "zhai", | |
| "zhan", | |
| "zhang", | |
| "zhao", | |
| "zhe", | |
| "zhei", | |
| "zhen", | |
| "zheng", | |
| "zhi", | |
| "zhong", | |
| "zhou", | |
| "zhu", | |
| "zhua", | |
| "zhuai", | |
| "zhuan", | |
| "zhuang", | |
| "zhui", | |
| "zhun", | |
| "zhuo", | |
| "zi", | |
| "zong", | |
| "zou", | |
| "zu", | |
| "zuan", | |
| "zui", | |
| "zun", | |
| "zuo", | |
| "A", | |
| "B", | |
| "C", | |
| "D", | |
| "E", | |
| "F", | |
| "G", | |
| "H", | |
| "I", | |
| "J", | |
| "K", | |
| "L", | |
| "M", | |
| "N", | |
| "O", | |
| "P", | |
| "Q", | |
| "R", | |
| "S", | |
| "T", | |
| "U", | |
| "V", | |
| "W", | |
| "X", | |
| "Y", | |
| "Z" | |
| ] | |
| def read_int_16(f): | |
| byte = f.read(2) | |
| byte = struct.unpack("<h", byte) | |
| return byte[0] | |
| def read_int_32(f): | |
| byte = f.read(4) | |
| byte = struct.unpack("<L", byte) | |
| return byte[0] | |
| def read_bin_file(path): | |
| with open(path, "rb") as f: | |
| f.seek(0x18, 0) | |
| total_word_count = read_int_32(f) | |
| print "Total word is %s" % total_word_count | |
| current_word_num = 0 | |
| f.seek(0x30, 0) | |
| res = [] | |
| while current_word_num < total_word_count : | |
| same_py_count = read_int_16(f) | |
| unknow_var = read_int_16(f) | |
| py_count = read_int_16(f) / 2 | |
| py_str = [] | |
| for i in range(py_count): | |
| idx = read_int_16(f) | |
| if idx < len(PinYinDic) and idx >= 0: | |
| py_str.append(PinYinDic[idx]) | |
| else: | |
| py_str.append("--") | |
| for i in range(same_py_count): | |
| word_count = read_int_16(f) | |
| word = codecs.utf_16_le_decode(f.read(word_count))[0] | |
| count = read_int_16(f) | |
| count2 = read_int_16(f) | |
| unknow_var2 = read_int_32(f) | |
| word_dic = {"count":count, "word": word, "pinyin": py_str} | |
| res.append(word_dic) | |
| print "current_word_num: %s and pinyin %s" % (current_word_num, py_str) | |
| current_word_num += 1 | |
| return res | |
| def try_pinyin(): | |
| print 'Number of arguments:', len(sys.argv), 'arguments.' | |
| print 'Argument List:', str(sys.argv) | |
| if len(sys.argv) == 2: | |
| print PinYinDic[int(sys.argv[1])] | |
| def save_words_to_path(filename, words): | |
| f = codecs.open(filename, "w", "utf-8") | |
| for word in words: | |
| f.write(u"%s\t%s\t%d\n" % (word["word"], " ".join(word["pinyin"]), word["count"])) | |
| print "共写入 %d 词组" % len(words) | |
| f.close() | |
| if __name__ == "__main__": | |
| path = "/Users/用户名/Library/Input Methods/Sogou/SogouPY.users/00000001/sgim_usr_v1.bin" | |
| res = read_bin_file(path) | |
| print res[0] | |
| save_words_to_path("user.dic", res) |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
via http://blog.jeswang.org/blog/2013/09/04/shu-xu-guan-dao-ru-sou-gou-bin-ci-ku/