2010年12月19日日曜日

Mouseover dictionaryのSQLiteファイルをpythonで作成した。

Mouseover dictionaryの辞書登録をPythonを用いて直接行ってみました。流れとしてはCSVファイル(PDIC)を読み込んでSQLiteのDBを作成し、Firefoxのフォルダに放り込んだだけです。rubyでやっておられる方がいたので真似してpythonの勉強がてらやってみました。
  1. PDICでCSV形式の辞書ファイルを作成
  2. エンコードをUTF-8に変換
  3. 下記のプログラムでSQLiteのDBを作成
  4. /.mozilla/firefox/default.*/に出来たmoseoverdictionary.sqliteを入れる。
こんな流れで適用しました。PDICを使ってしまっているので邪魔くさいだけのような気がしますが、趣味なので仕方ありません。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import sqlite3
import csv

def mkMouseOverDicSqlite(filename):
    db = sqlite3.connect("mouseoverdictionary.sqlite")
    # UTF-8で記述したいのでSQLiteの文字コードを指定
    db.text_factory = str
    # テーブルを作成する
    try:
        db.execute('create table dict(key TEXT PRIMARY KEY, desc TEXT)')
    except:pass
    sql = "insert into dict values (?, ?)"
    # csvファイルをパースする。
    reader = csv.reader(file(filename, "rb"))
    reader.next()    # 先頭はラベルなので飛ばす
    for row in reader:
        # Windowsの改行コード\r\nを\に変換する
        try:
            row = map(lambda x: x.replace("\r\n", "\\ "), row)
        except IndexError:pass
        except:raise
        # sqliteDBにデータを入力
        try:    # 新規のデータを入力
            if len(row[2]) != 0:
                db.execute(sql, (row[0], row[2]+"\\ "+row[1]))
            else:
                db.execute(sql, (row[0], row[1]))
        except sqlite3.IntegrityError:    # kyeが存在するので上書きする
            if len(row[2]) !=0:
                db.execute("update dict set desc=? where key =?", (row[2]+"\\ "+row[1], row[0]))
            else:
                db.execute("update dict set desc=? where key =?", (row[1], row[0]))
        except IndexError:pass    # 空のListが読み出された時の処理
        except:raise
    db.commit()    # データベースに保存する。
    db.close()

if __name__ == '__main__':
    myFiles = ["ryaku-116.csv", "reiji-116.csv", "waei-116.csv", "eiji-116.csv"]
    for filename in myFiles:
        print filename+"をデータベースに登録します。"
        mkMouseOverDicSqlite(filename)

0 件のコメント:

コメントを投稿