Python(英文のデータベース化004: SQLiteの試し)

■データベースのSQLiteを使ってみる。
ある程度文章の分解ができたので、それらを保存するデータベースについて考えてみる。
以前にjavascriptを使ったときにMySQLを使用したけど、今回はSQLiteを使用する。SQLiteのホームページのドキュメントを読むと、小型、早い、他のライブラリなどに依存しない、高信頼性、SQLの機能をすべて持つ、など特徴があげられていた。また、データベース自体はファイルとして保存され、Pythonの標準ライブラリとしてsqlite3というものが入っている。Pythonで簡単なデータベースを作るにあたっては都合がよさそう。

では、さっそくデータベースを使ってみる。
まず、テーブルを作成し、データを挿入、そのデータを検索するコードを下のように作ってみた。
テーブルの構成は、
文テーブル(ID、文のカテゴリー、文本体、備考)
単語テーブル(ID、単語本体、文のID001、文のID001での意味、文のID002、文のID002での意味、文のID003、文のID003での意味、備考)
とした。

import sqlite3

conn = sqlite3.connect('English_DB.db')
c = conn.cursor()

#========================================================
#テーブル(sentences, words)の作成
c.execute('''CREATE TABLE IF NOT EXISTS sentences(sID nchar(4), Category text, Sentence text, Note text)''')
c.execute(
    '''CREATE TABLE IF NOT EXISTS words(ID nchar(6), Word text, sID001 nchar(4), mean_sID001 text, sID002 nchar(4), mean_sID002 text, sID003 nchar(4), mean_sID003 text, Note text)''')
#========================================================

#========================================================
#データの入力(sentencesへ4文、wordsへ3単語)
c.execute(
    '''INSERT INTO sentences VALUES (1, 'Sample', 'With sea levels expected to rise between 20 and 90 centimeters over the next century, those involved in urban development will face significant obstacles.', '')''')
c.execute(
    '''INSERT INTO sentences VALUES (2, 'Sample', 'Low-lying areas will be submerged and flood zones will expand, meaning the land available for development will decrease.' , '')''')
c.execute(
    '''INSERT INTO sentences VALUES (3, 'Sample', 'At the same time, the human population will continue to grow.' , '')''')
c.execute(
    '''INSERT INTO sentences VALUES (4, 'Sample', 'So what can be done to tackle these conflicting issues?', '')''')
c.execute("INSERT INTO words VALUES (1, 'obstacles', 1, '障害','','','','','')")
c.execute("INSERT INTO words VALUES (2, 'submerge', 2, '水浸しになる','','','','','')")
c.execute("INSERT INTO words VALUES (3, 'tackle', 4, '取り組む','','','','','')")
#========================================================

conn.commit()

#========================================================
#データの検索
for row in c.execute('SELECT * FROM sentences'):
    print(row)
for row in c.execute('SELECT * FROM words'):
    print(row)
#========================================================

conn.close()

実行した結果が下の通り。

上のコードを実行すると、プログラムと同じフォルダに「English_DB.db」ファイルが作成される。このファイルがデータベースのファイルとなり、挿入した情報はここに追加されていく。

もう少し検索について触ってみる。
文と単語の2つのテーブルを用意しているので、それらをJOINでつなげる。文テーブルのIDと単語テーブルの中の文のID(上ではsID001, sID002, sID003の3つ)が一致したものを表示する。

for row in c.execute('SELECT * FROM sentences INNER JOIN words ON sentences.sID = words.sID001 OR sentences.sID = words.sID002 OR sentences.sID = words.sID003'):
    print(row)

実行結果が下のもの。
単語に対して、その単語が含まれる文がいっしょに表示されている。

今回は、SQLiteの試しとして、CREATE TABLE, INSERT, SELECT, JOINを使ってみた。

テキストファイルからデータ読み込み→文章の分解→データの保存まで、何となく骨組みは出来てきたので、今後もう少し肉付け作業してく。