mirror of
https://github.com/h7x4/Jisho-Study-Tool.git
synced 2024-12-22 13:57:29 +01:00
134 lines
3.3 KiB
Python
134 lines
3.3 KiB
Python
import sqlite3
|
|
import json
|
|
|
|
# returns id
|
|
def insert_radical(cursor, item) -> str:
|
|
if 'radical' in item:
|
|
dataId = cursor.execute(
|
|
'INSERT OR IGNORE INTO Kanji_Radical(symbol, meaning) VALUES (?, ?)',
|
|
(item['radical']['symbol'], item['radical']['meaning'])
|
|
)
|
|
if 'forms' in item['radical']:
|
|
for form in item['radical']['forms']:
|
|
cursor.execute(
|
|
'INSERT OR IGNORE INTO Kanji_Radical_Forms(form, radical) VALUES (?, ?)',
|
|
(form, item['radical']['symbol'])
|
|
)
|
|
return item['radical']['symbol']
|
|
return None
|
|
|
|
def insert_kanji(cursor, item):
|
|
cursor.execute(
|
|
"""
|
|
INSERT OR IGNORE INTO Kanji_Result(
|
|
kanji,
|
|
strokeCount,
|
|
meaning,
|
|
radical
|
|
)
|
|
VALUES (?,?,?,?)
|
|
""",
|
|
(
|
|
item['query'],
|
|
item['strokeCount'],
|
|
item['meaning'],
|
|
item['radical']['symbol'],
|
|
)
|
|
)
|
|
|
|
for column in ['jlptLevel', 'newspaperFrequencyRank', 'taughtIn']:
|
|
if (column in item):
|
|
cursor.execute(
|
|
f'UPDATE Kanji_Result SET {column} = ? WHERE kanji = ?',
|
|
(item[column], item['query'])
|
|
)
|
|
|
|
def insert_yomi(cursor, item, on=True):
|
|
yomiName = 'Onyomi' if on else 'Kunyomi'
|
|
for yomi in item[yomiName.lower()]:
|
|
cursor.execute(
|
|
f"""
|
|
INSERT OR IGNORE INTO Kanji_{yomiName}(yomi)
|
|
VALUES (?)
|
|
""",
|
|
(yomi,)
|
|
)
|
|
|
|
cursor.execute(
|
|
f"""
|
|
INSERT OR IGNORE INTO Kanji_Result{yomiName}_XRef(yomi, kanji)
|
|
VALUES (?, ?)
|
|
""",
|
|
(yomi, item['query'])
|
|
)
|
|
|
|
def insert_yomi_examples(cursor, item, on=True):
|
|
yomiName = 'Onyomi' if on else 'Kunyomi'
|
|
for yomiExample in item[yomiName.lower() + 'Examples']:
|
|
cursor.execute(
|
|
f"""
|
|
INSERT OR IGNORE INTO Kanji_YomiExample(example, reading, meaning)
|
|
VALUES (?, ?, ?)
|
|
""",
|
|
(yomiExample['example'], yomiExample['reading'], yomiExample['meaning'])
|
|
)
|
|
|
|
cursor.execute(
|
|
f"""
|
|
INSERT OR IGNORE INTO Kanji_Result{yomiName}Example_XRef(exampleID, kanji)
|
|
VALUES (?, ?)
|
|
""",
|
|
(cursor.lastrowid, item['query'])
|
|
)
|
|
|
|
def insert_parts(cursor, item):
|
|
for part in item['parts']:
|
|
cursor.execute(
|
|
"""
|
|
INSERT OR IGNORE INTO Kanji_Part(part)
|
|
VALUES (?)
|
|
""",
|
|
(part,)
|
|
)
|
|
|
|
cursor.execute(
|
|
"""
|
|
INSERT OR IGNORE INTO Kanji_ResultPart_XRef(part, kanji)
|
|
VALUES (?, ?)
|
|
""",
|
|
(part, item['query'])
|
|
)
|
|
|
|
def insertYomiExamples(cursor, item, on=True):
|
|
yomiName = 'Onyomi' if on else 'Kunyomi'
|
|
for yomi in item[yomiName.lower()]:
|
|
cursor.execute(
|
|
f"""
|
|
INSERT OR IGNORE INTO Kanji_{yomiName}(yomi)
|
|
VALUES (?)
|
|
""",
|
|
(yomi,)
|
|
)
|
|
|
|
cursor.execute(
|
|
f"""
|
|
INSERT OR IGNORE INTO Kanji_Result{yomiName}_XRef(yomi, kanji)
|
|
VALUES (?, ?)
|
|
""",
|
|
(yomi, item['query'])
|
|
)
|
|
|
|
with sqlite3.connect("test.db") as connection:
|
|
cursor = connection.cursor()
|
|
for grade in range(1, 8):
|
|
with open(f'data/jisho/grade{grade}.json') as file:
|
|
data = json.loads(file.read())
|
|
for item in data:
|
|
rad = insert_radical(cursor, item)
|
|
insert_kanji(cursor, item)
|
|
insert_yomi(cursor, item, on=True)
|
|
insert_yomi(cursor, item, on=False)
|
|
insert_yomi_examples(cursor, item, on=True)
|
|
insert_yomi_examples(cursor, item, on=False)
|
|
insert_parts(cursor, item)
|