当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 3 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : ibus数据库高频词错误修正脚本(突然掉得很后的常用字词)
帖子发表于 : 2009-04-24 19:44 
头像

注册: 2007-08-27 22:03
帖子: 228
地址: http://apt-blog.co.cc/
送出感谢: 0 次
接收感谢: 0 次
博文:http://apt-blog.co.cc/archives/299.html

使用ibus时间长了,常常突然发现有些本来常驻的首选或者常用字词突然掉到后面,甚至到了第二页,并不是被其他词挤掉,而是可能ibus的用户数据库出现错乱了。

不知道这是ibus程序的bug,还是ibus所用的SQLite数据库系统本身的问题,本来当用户输入一个拼音,ibus从用户数据库里面提出对应字的用户输入频数,决定字词的位置;如果用户第一次选择输入某个字,那么该字的记录就添加到用户数据库中,下次输入时便以此记录来提前该字的位置。理论上,在用户数据库里面一个词条的记录最多只能出现一次(多音字算多个字),然而,在实际的使用中,有时不知什么原因,某个本来常用的字被当作第一次输入再次加入到数据库当中,下次输入时,该字便作为低频字来排序,导致位置变得很后,带来不少不便。

这个Python脚本就是把这样的词条找出来,并把后来加入的记录删掉,把词条频数还原。
附件:
ibusdbfix.png
ibusdbfix.png [ 14.38 KiB | 被浏览 333 次 ]


脚本下载:http://www.box.net/shared/59m9po9k9x
程序功能:

1. 自动备份用户词库
2. 检出用户数据库中出现了两次,但不是多音字词的词条
3. 将后加入的词条删除

尚存缺陷:

1. 如果同一个词条的记录出现了3次或以上,程序不能鉴别(极少可能出现,可修改脚本内的SQL语句来查询出来)
2. 如果一个字本身是多音字,其中一个音节出现了上述情况,程序不能鉴别(貌似概率也挺低的)
3. 如果两个记录中的用户输入频数相同,两条记录都会被删掉(倒不是坏事,影响不大)

Python源码:
代码:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import sqlite3
 
DB = os.getenv("HOME") + "/.ibus/pinyin/user.db"
 
if not os.path.exists(DB):
     print "囧……似乎没有安装ibus……PT发来贺电……"
     exit(1)
 
# ------ Backup database file --------
import time
nowtime = time.strftime("_%Y-%m-%d-%H_%M_%S", time.localtime())
DB_BK = DB + nowtime
execute = "cp -v %s %s" % (DB, DB_BK)
os.system(execute)
print "ibus用户数据库已备份到",DB_BK
 
 
# ------ Connect to Database ---------
con = sqlite3.connect(DB)
c = con.cursor()
c.execute("""SELECT * FROM py_phrase
            WHERE phrase IN
                (SELECT phrase
                    FROM py_phrase
                    GROUP BY phrase
                    HAVING COUNT(*) = 2)""")
 
rows = c.fetchall()
badphrase = []
 
# ------ Detemine bad phrases -------
for i in range(0, len(rows), 2):
    flag = True
    phrase = rows[i:i+2]
    for j in range(1, 5):
        if phrase[0][j] != phrase[1][j]:
            flag = False
    if flag:
        badphrase.append(phrase[1])
 
 
if not len(badphrase):
    print "没有发现错误词条……PT发来贺电…… http://apt-blog.co.cc"
else:
    print "发现以下错误词条, 共%d个:" % len(badphrase)
    for row in badphrase:
        print "**[%s]**" % row[-3]
    print "\n执行优化清理……"
 
    # ------  Clean work to Database
    try:
        for row in badphrase:
            sql = "DELETE FROM py_phrase WHERE phrase = \"%s\" AND user_freq = %s" % (row[-3], row[-1])
            #print sql
            c.execute(sql)
 
        con.commit()
        print "清理完成……PT发来贺电…… http://apt-blog.co.cc"
    except sqlite3.OperationalError:
        print "清理无法完成,请先退出ibus..."
 
con.close()


页首
 用户资料  
 
2 楼 
 文章标题 : Re: ibus数据库高频词错误修正脚本(突然掉得很后的常用字词)
帖子发表于 : 2009-04-25 0:38 
头像

注册: 2008-10-08 13:48
帖子: 3476
送出感谢: 0 次
接收感谢: 2
:em20 五笔呢?


_________________
--------------------------------------
论坛精华贴全集:http://forum.ubuntu.org.cn/viewtopic.php?f=48&t=199845
book:http://forum.ubuntu.org.cn/viewtopic.php?f=21&t=198286


页首
 用户资料  
 
3 楼 
 文章标题 : Re: ibus数据库高频词错误修正脚本(突然掉得很后的常用字词)
帖子发表于 : 2009-04-25 13:32 
头像

注册: 2007-08-27 22:03
帖子: 228
地址: http://apt-blog.co.cc/
送出感谢: 0 次
接收感谢: 0 次
五笔也有这问题?五笔的词库好像跟拼音的不同,,


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 3 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译