Skip to content

Commit

Permalink
完成 a400 反切查拼音(查小韻) 改版
Browse files Browse the repository at this point in the history
  • Loading branch information
AlanJui committed Apr 11, 2024
1 parent ced8e16 commit 7f8fa2c
Show file tree
Hide file tree
Showing 6 changed files with 276 additions and 190 deletions.
Binary file modified Kong_Un_V2.db
Binary file not shown.
21 changes: 12 additions & 9 deletions Kong_Un_V2.sqbpro
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?><sqlb_project><db path="D:/work/Piau-Im/Kong_Un_V2.db" readonly="0" foreign_keys="1" case_sensitive_like="0" temp_store="0" wal_autocheckpoint="1000" synchronous="2"/><attached/><window><main_tabs open="structure browser pragmas query" current="0"/></window><tab_structure><column_width id="0" width="300"/><column_width id="1" width="0"/><column_width id="2" width="100"/><column_width id="3" width="7428"/><column_width id="4" width="0"/><expanded_item id="0" parent="1"/><expanded_item id="1" parent="1"/><expanded_item id="2" parent="1"/><expanded_item id="3" parent="1"/></tab_structure><tab_browse><current_table name="4,12:main小韻查詢"/><default_encoding codec=""/><browse_table_settings><table schema="main" name="切語上字表" show_row_id="0" encoding="" plot_x_axis="" unlock_view_pk="_rowid_"><sort/><column_widths><column index="1" value="83"/><column index="2" value="133"/><column index="3" value="127"/><column index="4" value="58"/><column index="5" value="58"/><column index="6" value="83"/><column index="7" value="133"/><column index="8" value="300"/><column index="9" value="67"/></column_widths><filter_values/><conditional_formats/><row_id_formats/><display_formats/><hidden_columns/><plot_y_axes/><global_filter/></table><table schema="main" name="切語下字表" show_row_id="0" encoding="" plot_x_axis="" unlock_view_pk="_rowid_"><sort/><column_widths><column index="1" value="83"/><column index="2" value="133"/><column index="3" value="108"/><column index="4" value="108"/><column index="5" value="108"/><column index="6" value="133"/><column index="7" value="70"/><column index="8" value="33"/><column index="9" value="58"/><column index="10" value="67"/><column index="11" value="67"/><column index="12" value="67"/><column index="13" value="67"/><column index="14" value="67"/><column index="15" value="300"/><column index="16" value="67"/><column index="17" value="133"/><column index="18" value="223"/></column_widths><filter_values/><conditional_formats/><row_id_formats/><display_formats/><hidden_columns/><plot_y_axes/><global_filter/></table><table schema="main" name="字表" show_row_id="0" encoding="" plot_x_axis="" unlock_view_pk="_rowid_"><sort/><column_widths><column index="1" value="83"/><column index="2" value="33"/><column index="3" value="108"/><column index="4" value="58"/><column index="5" value="133"/><column index="6" value="133"/><column index="7" value="79"/><column index="8" value="300"/><column index="9" value="67"/></column_widths><filter_values/><conditional_formats/><row_id_formats/><display_formats/><hidden_columns/><plot_y_axes/><global_filter/></table><table schema="main" name="小韻查詢" show_row_id="0" encoding="" plot_x_axis="" unlock_view_pk="_rowid_"><sort/><column_widths><column index="1" value="83"/><column index="2" value="137"/><column index="3" value="108"/><column index="4" value="106"/><column index="5" value="79"/><column index="6" value="300"/><column index="7" value="83"/><column index="8" value="108"/><column index="9" value="133"/><column index="10" value="203"/><column index="11" value="191"/><column index="23" value="160"/></column_widths><filter_values/><conditional_formats/><row_id_formats/><display_formats/><hidden_columns/><plot_y_axes/><global_filter/></table><table schema="main" name="檢視測試" show_row_id="0" encoding="" plot_x_axis="" unlock_view_pk="_rowid_"><sort/><column_widths><column index="1" value="83"/><column index="2" value="71"/><column index="3" value="108"/><column index="4" value="58"/><column index="5" value="79"/><column index="6" value="300"/></column_widths><filter_values/><conditional_formats/><row_id_formats/><display_formats/><hidden_columns/><plot_y_axes/><global_filter/></table><table schema="main" name="漢字拼音碼查詢" show_row_id="0" encoding="" plot_x_axis="" unlock_view_pk="_rowid_"><sort/><column_widths/><filter_values/><conditional_formats/><row_id_formats/><display_formats/><hidden_columns/><plot_y_axes/><global_filter/></table></browse_table_settings></tab_browse><tab_sql><sql name="SQL 1"></sql><sql name="&amp;Foreign-Key Check">CREATE VIEW 小韻查詢 AS
<?xml version="1.0" encoding="UTF-8"?><sqlb_project><db path="D:/work/Piau-Im/Kong_Un_V2.db" readonly="0" foreign_keys="" case_sensitive_like="" temp_store="" wal_autocheckpoint="" synchronous=""/><attached/><window><main_tabs open="structure browser pragmas query" current="0"/></window><tab_structure><column_width id="0" width="300"/><column_width id="1" width="0"/><column_width id="2" width="100"/><column_width id="3" width="8595"/><column_width id="4" width="0"/></tab_structure><tab_browse><current_table name="0,0:"/><default_encoding codec=""/><browse_table_settings/></tab_browse><tab_sql><sql name="SQL 1"></sql><sql name="&amp;Foreign-Key Check">CREATE VIEW 漢字查廣韻標音 AS
SELECT
字表.識別號,
字表.字,
字表.同音字序,
字表.切語,
字表.拼音 AS 漢字標音,
字表.字義,
小韻表.小韻字,
小韻表.切語,
小韻表.拼音,
小韻表.目次編碼,
小韻表.小韻字序號,
小韻表.小韻字集,
Expand All @@ -11,8 +15,8 @@ SELECT
切語上字表.聲母,
切語上字表.清濁,
切語上字表.發送收,
切語上字表.聲母拼音碼 AS 聲母標音,
切語上字表.切語上字集,
切語上字表.聲母拼音碼 AS 上字標音,
切語上字表.切語上字集,
切語下字表.韻系列號,
切語下字表.韻系行號,
切語下字表.韻目索引,
Expand All @@ -26,10 +30,9 @@ SELECT
切語下字表.韻母,
切語下字表.切語下字集,
切語下字表.等呼,
切語下字表.韻母拼音碼 AS 韻母標音
FROM 小韻表
切語下字表.韻母拼音碼 AS 下字標音
FROM 字表
JOIN 小韻表 ON 字表.小韻識別號 = 小韻表.識別號
JOIN 切語上字表 ON 小韻表.上字表識別號 = 切語上字表.識別號
JOIN 切語下字表 ON 小韻表.下字表識別號 = 切語下字表.識別號;
</sql><current_tab id="1"/></tab_sql></sqlb_project>
Expand Down
278 changes: 109 additions & 169 deletions a400_反切查拼音.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import os
import sqlite3
import sys

Expand Down Expand Up @@ -129,21 +130,37 @@ def han_ji_cha_siau_un(cursor, han_ji):
# 回傳字典列表
return dict_results

def query_table_by_id(table_name, fields, id):
# 執行 SQL 查詢
cursor.execute(f"SELECT * FROM {table_name} WHERE 識別號 = ?", (id,))

# 獲取查詢結果
"""
用 `漢字` 查詢《廣韻》的標音
"""
def han_ji_cha_piau_im(cursor, han_ji):
"""
根據漢字查詢其讀音資訊。
:param cursor: 數據庫游標
:param han_ji: 欲查詢的漢字
:return: 包含讀音資訊的字典列表
"""
query = """
SELECT *
FROM 漢字查廣韻標音
WHERE 字 = ?;
"""
cursor.execute(query, (han_ji,))
results = cursor.fetchall()

# 將結果轉換為字典列表
dict_results = [dict(zip(fields, result)) for result in results]
fields = [
'識別號', '字', '同音字序', '切語', '漢字標音', '字義',
'小韻字', '目次編碼', '小韻字序號', '小韻字集', '字數',
'發音部位', '聲母', '清濁', '發送收', '上字標音', '切語上字集',
'韻系列號', '韻系行號', '韻目索引', '目次', '攝', '韻系',
'韻目', '調', '呼', '等', '韻母', '切語下字集', '等呼', '下字標音',
]
return [dict(zip(fields, result)) for result in results]

# 回傳字典列表
return dict_results


def query_table_by_field(table_name, fields, query_field, keyword):
def query_table_by_field(cursor, table_name, fields, query_field, keyword):
# 執行 SQL 查詢
cursor.execute(f"SELECT * FROM {table_name} WHERE {query_field} LIKE ?", ('%' + keyword + '%',))

Expand All @@ -155,190 +172,113 @@ def query_table_by_field(table_name, fields, query_field, keyword):

# 回傳字典列表
return dict_results


def query_ji_piau(han_ji):
table_name = "字表"
fields = [
'識別號', '字', '小韻切語', '拼音', '字義', '上字表識別號', '聲母', '清濁',
'聲母拼音碼', '小韻識別號', '小韻字序', '韻母', '韻母拼音碼', '調', '四聲八調',
'拼音調號', '備註'
]
query_field = "字"
result = query_table_by_field(table_name, fields, query_field, han_ji)

if not result:
raise Exception("查詢沒有返回結果!")

return result


def query_siau_un(ciat_gu):
table_name = "小韻表"
fields = [
'識別號', '小韻字', '拼音', '小韻字集', '字數', '目次編碼', '切語', '小韻字序號',
'上字表識別號', '聲母', '聲母拼音碼', '清濁',
'韻', '等', '呼', '調', '舒促聲', '韻碼', '韻母', '韻母拼音碼', '四聲八調', '拼音調號',
'備註', '原有備註', '異體字', '其它備註'
]
query_field = "切語"
return query_table_by_field(table_name, fields, query_field, ciat_gu)


def query_ciat_gu_siong_ji(han_ji):
def cha_ciat_gu_siong_ji(cursor, siong_ji):
table_name = "切語上字表"
fields = [
'識別號', '發音部位', '聲母', '清濁', '發送收', '聲母拼音碼', '國際音標', '切語上字', '備註',
'識別號', '聲母識別號', '發音部位', '聲母', '清濁', '發送收',
'聲母拼音碼', '切語上字集', '備註',
]
query_field = "切語上字"
return query_table_by_field(table_name, fields, query_field, han_ji)
query_field = "切語上字集"
return query_table_by_field(cursor, table_name, fields, query_field, siong_ji)


def query_ciat_gu_ha_ji(han_ji):
def cha_ciat_gu_ha_ji(cursor, ha_ji):
table_name = "切語下字表"
fields = [
'識別號', '韻碼', '韻母', '韻母拼音碼', '國際音標', '韻目', '舒促聲',
'攝', '調', '韻', '等', '呼', '切語下字',
'識別號', '韻母識別號', '韻系列號', '韻系行號',
'韻目索引', '目次識別號', '目次',
'攝', '韻系', '韻目', '調', '呼', '等', '韻母',
'切語下字集', '等呼', '韻母拼音碼', '備註',
]
query_field = "切語下字"
return query_table_by_field(table_name, fields, query_field, han_ji)
query_field = "切語下字集"
return query_table_by_field(cursor, table_name, fields, query_field, ha_ji)


def query_un_bu(han_ji):
query = """
SELECT 字表.識別號, 字, 拼音, 字表.韻母, 字表.韻母拼音碼, 十五音韻母對照表.國際音標,
韻碼表.攝, 韻碼表.目次編碼, 韻碼表.調, 韻碼表.韻, 韻碼表.等, 韻碼表.等呼, 韻碼表.呼
FROM 字表
LEFT JOIN 十五音韻母對照表 ON 字表.韻母 = 十五音韻母對照表.廣韻韻母
LEFT JOIN 韻碼表 ON 字表.韻母 = 韻碼表.韻母
WHERE 字 = ?;
"""

def query_table_by_id(cursor, table_name, fields, id):
# 執行 SQL 查詢
cursor.execute(query, (han_ji,))
cursor.execute(f"SELECT * FROM {table_name} WHERE 識別號 = ?", (id,))

# 獲取查詢結果
results = cursor.fetchall()

# 將結果轉換為字典列表
fields = [ '識別號', '字', '拼音', '韻母', '韻母拼音碼', '韻母國際音標', '攝', '目次', '調', '韻', '等', '等呼', '呼' ]

dict_results = [dict(zip(fields, result)) for result in results]

# 回傳字典列表
return dict_results


if __name__ == "__main__":

# 整合前測試
conn, cursor = connect_to_db('.\\Kong_Un_V2.db')

#
siann_bu_results = query_sip_ngoo_im_siann_bu_tui_ciau_piau()
un_bu_results = query_sip_ngoo_im_un_bu_tui_ciau_piau()
# 確認使用者有輸入反切之切語參數
if len(sys.argv) != 2:
print("請輸入欲查詢讀音之【切語】(反切上字及下字)!")
os._exit(-1)

# 關閉 DB
close_db_connection(conn)
sys.exit(0)

# #============================================================================================
# # 根據反切上字和反切下字來查詢台羅拼音
# siong_ji = ciat_gu[0]
# ha_ji = ciat_gu[1]

# # 顯示結果
# os.system('cls')
# print('\n=================================================')
# print(f'欲查詢拼音之切語為:【{ciat_gu}】')

# # 查詢反切上字
# print('\n-------------------------------------------------')
# print('【切語上字】:\n')
# siann_bu = query_ji_piau(siong_ji)
# if not siann_bu:
# print(f'查不到【反切上字】:{siong_ji}')
# else:
# siong_ji_piau = query_table_by_id(
# '切語上字表',
# ['識別號', '發音部位', '聲母', '清濁', '發送收', '聲母拼音碼', '國際音標', '切語上字', '備註'],
# siann_bu[0]['上字表識別號']


# # 確認使用者有輸入反切之切語參數
# if len(sys.argv) != 2:
# print("請輸入欲查詢讀音之【切語】(反切上字及下字)!")
# os._exit(-1)
ciat_gu = sys.argv[1]

# ciat_gu = sys.argv[1]
# 檢查反切拼音是否有兩個字
if len(ciat_gu) != 2:
print("反切用的切語,必須有兩個漢字!")
os._exit(-1)

# # 檢查反切拼音是否有兩個字
# if len(ciat_gu) != 2:
# print("反切用的切語,必須有兩個漢字!")
# os._exit(-1)

# # 連上 DB
# conn, cursor = connect_to_db('.\\Kong_Un.db')

# # 根據反切上字和反切下字來查詢台羅拼音
# siong_ji = ciat_gu[0]
# ha_ji = ciat_gu[1]

# # 顯示結果
# os.system('cls')
# print('\n=================================================')
# print(f'欲查詢拼音之切語為:【{ciat_gu}】')

# # 查詢反切上字
# print('\n-------------------------------------------------')
# print('【切語上字】:\n')
# siann_bu = query_ji_piau(siong_ji)
# if not siann_bu:
# print(f'查不到【反切上字】:{siong_ji}')
# else:
# siong_ji_piau = query_table_by_id(
# '切語上字表',
# ['識別號', '發音部位', '聲母', '清濁', '發送收', '聲母拼音碼', '國際音標', '切語上字', '備註'],
# siann_bu[0]['上字表識別號']
# )
# print(f"切語上字 = {siong_ji} (拼音:{siann_bu[0]['拼音']})")
# print(f"聲母:{siong_ji_piau[0]['聲母']} [{siong_ji_piau[0]['聲母拼音碼']}] IPA: /{siong_ji_piau[0]['國際音標']}/")
# print(f"(發音部位:{siong_ji_piau[0]['發音部位']} ,清濁:{siong_ji_piau[0]['清濁']})")

# # 查詢反切下字
# print('\n-------------------------------------------------')
# print('【切語下字】:\n')
# ji_piau = query_ji_piau(ha_ji)
# un_bu = []
# if not ji_piau:
# print(f'查不到【反切下字】:{ha_ji}')
# else:
# un_bu = query_un_bu(ha_ji)
# print(f"切語下字 = {ha_ji} (拼音:{ji_piau[0]['拼音']})")
# print(f"韻母:{un_bu[0]['韻母']} [{un_bu[0]['韻母拼音碼']}] IPA: /{un_bu[0]['韻母國際音標']}/")
# print(f"攝:{un_bu[0]['攝']},調:{un_bu[0]['調']}聲,目次:{un_bu[0]['目次']}")
# print(f"{un_bu[0]['韻']}韻,{un_bu[0]['等']}等({un_bu[0]['等呼']}),{un_bu[0]['呼']}口呼")

# # 組合拼音
# tiau_ho_list = {
# '清平': 1,
# '清上': 2,
# '清去': 3,
# '清入': 4,
# '濁平': 5,
# '濁上': 2,
# '濁去': 7,
# '濁入': 8,
# }
# siann = siong_ji_piau[0]['聲母拼音碼']
# cing_tok_str = siong_ji_piau[0]['清濁']
# cing_tok = cing_tok_str[-1]
# un = un_bu[0]['韻母拼音碼']
# tiau_ho = tiau_ho_list[ f"{cing_tok}{un_bu[0]['調']}" ]

# print('\n-------------------------------------------------')
# print(f'【切語拼音】:{ciat_gu} [{siann}{un}{tiau_ho}]\n')

# # 關閉 DB
# close_db_connection(conn)
# 連上 DB
conn, cursor = connect_to_db('.\\Kong_Un_V2.db')

# 根據反切上字和反切下字來查詢台羅拼音
siong_ji = ciat_gu[0]
ha_ji = ciat_gu[1]

# 顯示結果
os.system('cls')
print('\n=================================================')
print(f'欲查詢拼音之切語為:【{ciat_gu}】')

# 查詢反切上字
print('\n-------------------------------------------------')
print('【切語上字】:\n')
siong_ji_im = han_ji_cha_piau_im(cursor, siong_ji)
siong_ji_piau = cha_ciat_gu_siong_ji(cursor, siong_ji)
if not siong_ji_piau:
print(f'查不到【反切上字】:{siong_ji}')
else:
print(f"切語上字 = {siong_ji} (標音:{siong_ji_im[0]['漢字標音']})")
print(f"聲母:{siong_ji_piau[0]['聲母']} [{siong_ji_piau[0]['聲母拼音碼']}] ")
print(f"(發音部位:{siong_ji_piau[0]['發音部位']},清濁:{siong_ji_piau[0]['清濁']},發送收:{siong_ji_piau[0]['發送收']})")

# 查詢反切下字
print('\n-------------------------------------------------')
print('【切語下字】:\n')
ha_ji_im = han_ji_cha_piau_im(cursor, ha_ji)
ha_ji_piau = cha_ciat_gu_ha_ji(cursor, ha_ji)
if not ha_ji_piau:
print(f'查不到【反切下字】:{ha_ji}')
else:
print(f"切語下字 = {ha_ji} (標音:{ha_ji_im[0]['漢字標音']})")
print(f"韻母:{ha_ji_piau[0]['韻母']} [{ha_ji_piau[0]['韻母拼音碼']}]")
print(f"攝:{ha_ji_piau[0]['攝']},調:{ha_ji_piau[0]['調']}聲,目次:{ha_ji_piau[0]['目次']}")
print(f"{ha_ji_piau[0]['韻系']}韻系,{ha_ji_piau[0]['韻目']}韻,{ha_ji_piau[0]['呼']}口呼,{ha_ji_piau[0]['等']}等 ({ha_ji_piau[0]['等呼']})")

# 組合拼音
tiau_ho_list = {
'清平': 1,
'清上': 2,
'清去': 3,
'清入': 4,
'濁平': 5,
'濁上': 2,
'濁去': 7,
'濁入': 8,
}
siann = siong_ji_piau[0]['聲母拼音碼']
cing_tok_str = siong_ji_piau[0]['清濁']
cing_tok = cing_tok_str[-1]
un = ha_ji_piau[0]['韻母拼音碼']
tiau_ho = tiau_ho_list[ f"{cing_tok}{ha_ji_piau[0]['調']}" ]

print('\n-------------------------------------------------')
print(f'【切語拼音】:{ciat_gu} [{siann}{un}{tiau_ho}]\n')

# 關閉 DB
close_db_connection(conn)
Loading

0 comments on commit 7f8fa2c

Please sign in to comment.