导入google和sogou输入法的用户词典

此次更新的导入工具,加入了对google和sogou输入法用户词典导入的支持。由于sunpinyin用户词典的一些限制,只能导入长度为2~6个字符的词条,并且最多可导入6万多个词条。我们后续会改进sunpinyin,以支持更大的词库和用户词典。该导入工具也可以在linux或solaris下运行,不过目前只支持ibus的前端。(因为我们不是很好判断,用户所使用的是xim还是ibus平台。)

注意:如果您使用的是实验版词表和语言模型,请下载open-gram项目的词表,解压并覆盖sunpinyin_importer目录下的dict.utf8文件,然后再执行下面的步骤。

首先请下载这个导入工具,解压缩到某个目录中。

导入google输入法用户词典

在windows上激活google拼音输入法,然后打开“属性设置”对话框,在“词典”标签页下,点击“导出”按钮,将用户词典导出到一个文件中(例如,名为google_userdict.dic),然后将这个文件拷贝到您的机器上(mac或linux),然后执行下面的操作,

$ python import_google_userdict.py google_userdict.dic

导入sogou输入法用户词典

在windows上激活sogou拼音输入法,然后打开“设置属性”对话框,然后在“词库”标签页下,在“词库操作选择”下拉框中选择“导出文本词库”,并点击“执行该操作”,将用户词典导出到一个文件中(例如,名为sogou_userdict.txt),然后将这个文件拷贝到您的机器上(mac或linux),然后执行下面的操作:

$ python import_sogou_userdict.py sogou_userdict.txt

基本上,只要输入法提供导出用户词典的功能、且导出格式为文本文件的话,为sunpinyin实现一个导入小工具是很简单的(可参考已有的importer)。大家可以自行编写一个,欢迎您为常用的输入法编写一个导入工具哦 :)

如果需要将fitx的用户词典导入到sunpinyin中,参见@Yunkwan同学编写的导入工具

50 thoughts on “导入google和sogou输入法的用户词典

  1. 因为版权的问题,我们提供的脚本建议只用于用户词典的导入 ...

  2. 问个比较笨的问题:当出现Please specify the QIM exported user dict file!时,我怎么选择,谢谢

  3. 谢谢你,这太方便了。
    但是对于外行来说,这个说明还是看不明白。不知道能不能解释的更详细一些。比如将拷贝过来的txt文档放在什么路径下,是不是运行你编写的那个importer就可以了?我尝试了下,但是没成功。
    我现在有一个txt的sogou词库,我双击你给的那个sogou_userdict.py,但是被提示:Please specify the Sogou PinYin exported user dict file!
    谢谢!

  4. @Catholicon,拷贝过来的文件可以放到sunpinyin_importer目录下,请在Terminal程序中运行,python import_sogou_userdict.py sogou_userdict.txt,就可以了 ...

  5. 导入是,出现如下错误,是否可以帮助看一下呢?

    File "import_sogou_userdict.py", line 28, in
    main()
    File "import_sogou_userdict.py", line 24, in main
    sogou_user_dict = load_sogou_user_dict(sys.argv[1])
    File "import_sogou_userdict.py", line 10, in load_sogou_user_dict
    for l in f:
    File "/usr/lib/python2.6/codecs.py", line 679, in next
    return self.reader.next()
    File "/usr/lib/python2.6/codecs.py", line 610, in next
    line = self.readline()
    File "/usr/lib/python2.6/codecs.py", line 525, in readline
    data = self.read(readsize, firstline=True)
    File "/usr/lib/python2.6/codecs.py", line 475, in read
    newchars, decodedbytes = self.decode(data[:exc.start], self.errors)
    File "/usr/lib/python2.6/encodings/utf_16.py", line 90, in decode
    raise UnicodeError,"UTF-16 stream does not start with BOM"

  6. @米迦勒 ,您导出的文件格式可能不是UTF-16编码的,在mac上可以用file命令查看这个文件的一些属性(可能包括编码信息)。您的sogou输入法是那个版本呢?是否导出的时候选择了save as成其他的编码格式呢?

  7. 你好,我按照你的介绍试了下,出现如下提示:(我的是ubuntu 10.04)
    Traceback (most recent call last):
    File "import_sogou_userdict.py", line 28, in
    main()
    File "import_sogou_userdict.py", line 25, in main
    import_to_sunpinyin_user_dict (sogou_user_dict)
    File "/home/zhiwei/Downloads/sunpinyin_importer/importer.py", line 26, in import_to_sunpinyin_user_dict
    userdict_path = userdict_path if userdict_path else get_userdict_path()
    File "/home/zhiwei/Downloads/sunpinyin_importer/importer.py", line 23, in get_userdict_path
    raise "Can not detect sunpinyin's userdict!"
    TypeError: exceptions must be old-style classes or derived from BaseException, not str

    请问是有什么错误吗?

    另外,导入词库后词序问题也解决了吗?
    谢谢~~

  8. @zhiwei, 貌似没有找到你的userdict的path,词典刚导入时是没有次序的 ...

  9. @zhiwei, 导入脚本会尝试在下列目录中查找你的userdict

    if os.path.exists (homedir+"/.cache/ibus/sunpinyin"):
    return homedir+"/.cache/ibus/sunpinyin/userdict"

    if os.path.exists (homedir+"/.ibus/sunpinyin"):
    return homedir+"/.ibus/sunpinyin/userdict"

    if os.path.exists (homedir+"/.sunpinyin"):
    return homedir+"/.sunpinyin/userdict"

    能否在你的home目录下查找一下userdict这个文件,并将路径告诉我一下?多谢!

  10. @arne sogou细胞词库的没有注音是个问题,我们会想办法解决注音的问题 ... 目前,可以找那些已经转换为google词库的细胞词库来导入 ...

  11. 我这里的问题是和米迦勒 一样,开始从windows拷过来的搜狗词库文件,是gb编码的,出错信息 :File "/home/ryan/src/sunpinyin/python/importer/imdict.py", line 47, in load
    file = codecs.open(fname, 'r', 'utf-8')
    File "/usr/lib/python2.6/codecs.py", line 870, in open
    file = __builtin__.open(filename, mode, buffering)
    IOError: [Errno 2] No such file or directory: 'dict.utf8'
    转成utf-8的之后, File "/usr/lib/python2.6/encodings/utf_16.py", line 90, in decode
    raise UnicodeError,"UTF-16 stream does not start with BOM"
    UnicodeError: UTF-16 stream does not start with BO 又出这个错 。。。
    不知道为什么会出这个问题 ,能解释一下吗?

  12. @ryan,如果是gb编码,可以将file = codecs.open(fname, ‘r’, ‘utf-8′)中的'utf-8'改成'gb18030'试一试 ...

  13. localhost:sunpinyin_importer apple$ python import_google_userdict.py whb.dic
    Traceback (most recent call last):
    File "import_google_userdict.py", line 33, in
    main()
    File "import_google_userdict.py", line 30, in main
    import_to_sunpinyin_user_dict (google_user_dict)
    File "/Users/apple/Downloads/sunpinyin_importer/importer.py", line 27, in import_to_sunpinyin_user_dict
    db = sqlite.connect (userdict_path)
    sqlite3.OperationalError: unable to open database file

  14. @imcaptor,您可以先激活一下sunpinyin,然后userdict这个文件就应该被创建出来了。这个应该是我们的一个bug,会尽快修正 ...

  15. @yongsun

    搜狗细胞词库 scel 格式的是有注音的,虽然没有声调。文字部分是 UTF-16LE,只是词频部分不知道是什么数据。

  16. @quark,非常感谢您提供的信息,scel格式有文档么,另外是否允许第三方使用呢?

  17. scel 没有文档,但是有第三方黑箱分析结果:http://code.google.com/p/hslinuxextra/downloads/list,其中 scel 词频信息部分还没有完全分析明白。

    基本上只能找到这句话:“细胞词库是搜狗首创的、开放共享、可在线升级的细分化词库的功能名称。 ”,大多数 scel 文件是网友制作的,不知道版权该怎样算。

    我想第三方黑箱分析 scel 文件格式并提供相关接口是可以的,我用了这样的实现:
    http://code.google.com/p/ibus-cloud-pinyin/source/browse/trunk/src/dbus-binding.vala?spec=svn129&r=103#142

  18. @youngsun

    兴趣是有,但是时间可能不够,做不了多少事情,暑假被 ACM 集训占满了 -.-
    目前还有考试没结束...

  19. 我导入了搜狗词库. 整个过程没有任何错误. 于是我想验证一下是否导入成功.

    我验证使用的方法, 和当年搜狗告google侵权的方法一样. 输入搜狗开放人员名字的拼音. 结果, sunpinyin没能拼出那几个人的名字. 但是搜狗可以.

    这是导入的脚本有意屏蔽了那几个词, 还是没能完全导入呢?

  20. 刚才看了一下, 确实是用户词库。 系统词库没看到可以导出的地方,请问有什么方法能把系统词库导出吗?

  21. 我遇到了和Ryan一样的问题,也是第一次输入显示No such file or directory: ‘dict.utf8′,改为utf-8后则显示UnicodeError: UTF-16 stream does not start with BOM。我导出sogou词库的时候是默认的txt文件,没看见有编码选项,改编码是通过记事本/另存为utf-8的方式。不知道是哪一步做错了?谢谢!

  22. @Victoria, 麻烦你试一下最新的导入工具,且导出后不要修改编码类型?如果还是有问题,麻烦您将您的用户词库的一个sample发给我,例如在mac上用head -n 20 xxx.dic > sample.dic ...

  23. 您好!感谢您所在团队开发的sunpinyin !

    我在ubuntu下,sunpinyin是从pad的ibus-dev源中直接下载安装的

    我下载了这个最新的importer。

    http://code.google.com/p/sunpinyin/downloads/detail?name=sunpinyin_importer.tar.bz2&can=2&q=

    但是importer程序运行中说:
    找不到 /usr/lib/sunpinyin/data/pydict_sc.bin
    我自建一个空文件不成,于是搜索了一下,在
    http://src.opensolaris.org/source/xref/nv-g11n/inputmethod/sunpinyin/ime/data/
    下载到 一个 pydict_sc.bin.be 一个.le

    我是小白,不知道是不是应该用这两个中的一个?我直接选了big endian的。
    运行importer后没有任何提示,不知道是否成功。

    请问这样子正确吗?
    或者如果不正确,需要怎样逆向操作来挽回它,然后进行正确的导入?

    谢谢

  24. ls问题已解决! 抱歉!

    看来是我之前是添加ibus-dev源的 2.0 rc8版本 还没有 /usr/lib/sunpinyin/data/pydic_sc.bin 这个文件

    自己按照 http://www.openboy.net/linux-ubuntu-input-sunpinyin.html 还有google code页说明编译了一遍(ibus,使用了 --prefix=/usr )
    然后去看那个目录,直接有了。

    多谢博主之前的回复:yongsun says:
    June 11, 2010 at 11:38 pm
    @ryan,如果是gb编码,可以将file = codecs.open(fname, ‘r’, ‘utf-8′)中的’utf-8′改成’gb18030′试一试 …

    通过此方法我已成功导入词库。

    而且发现第二次导入(使用 http://code.google.com/p/sunpinyin/downloads/detail?name=sunpinyin_importer.tar.bz2&can=2&q= 昨天刚刚更新的单独importer包)比第一次导入(使用源代码包内的importer)要快很多,
    不知道是代码问题,还是因为之前我使用的pydict_sc.bin不正确,才会这么快。

    再次感谢这么好的输入法

  25. ~$ python import_sogou_userdict.py sogou_userdict.txt
    python: can't open file 'import_sogou_userdict.py': [Errno 2] No such file or directory

    请问这是什么原因?

  26. 或者将解压的sunpinyin_importer文件夹里面的 import_sogou_userdict.py 右击 选择”运行“或”在终端运行“?这样可否?

  27. @oliverty,请在终端上cd到有python脚本的那个目录,并且将sogou_userdict.txt也放在相同的目录下…

  28. 运行后我顿时震惊了
    一大堆的"is too long or too short for sunpinyin userdict"
    究竟是长还是短呢,能大能小么:-)

  29. @xlctemp SunPinyin的用户词典支持2~6个音节长度的词条,如果导入输入法的用户词典,有小于2或者大于6的词条时,就会报告这个警告…

  30. 首先感谢一下能写出这么方便的导入工具~

    嘛...还是希望能支持更长的词条导入..

    还有一个小问题

    要怎么备份导入的词库文件呢?是/usr/lib/sunpinyin/data 下的几个文件吗?

  31. 词库非常不错啊
    不过发现导入都是放在用户目录下了
    词库能不能放在/usr/share/ibus-sunpinyin/目录下呢
    我看了下默认装好之后这个目录下是没有db文件夹的
    如果我把别人弄好的db文件新建一个db目录并放在里面
    sunpinyin会自动加载这个词库吗?

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

To submit your comment, click the image below where it asks you to...
Clickcha - The One-Click Captcha