diff --git a/Ho_Lok_Ue.db b/Ho_Lok_Ue.db index e9d99d1..d1102e0 100644 Binary files a/Ho_Lok_Ue.db and b/Ho_Lok_Ue.db differ diff --git "a/a520_\350\243\275\344\275\234\346\263\250\351\237\263\347\266\262\351\240\201.py" "b/a520_\350\243\275\344\275\234\346\263\250\351\237\263\347\266\262\351\240\201.py" index a4d95ac..d7f5f23 100644 --- "a/a520_\350\243\275\344\275\234\346\263\250\351\237\263\347\266\262\351\240\201.py" +++ "b/a520_\350\243\275\344\275\234\346\263\250\351\237\263\347\266\262\351\240\201.py" @@ -1,8 +1,3 @@ -#================================================================ -# 《予我廣韻標音》 -# 使用《廣韻》作為漢字標讀音之依據。 -#================================================================ -import getopt import os import sqlite3 import sys @@ -11,6 +6,7 @@ import settings from mod_file_access import ( + San_Sing_Han_Ji_Zu_Im_Piau, close_excel_file, get_cmd_input, open_excel_file, @@ -18,83 +14,92 @@ write_to_excel_file, ) from mod_廣韻 import init_sing_bu_dict, init_un_bu_dict -from p500_Import_Source_Sheet import San_Sing_Han_Ji_Tsh_Im_Piau from p501_Kong_Un_Cha_Ji_Tian import Kong_Un_Piau_Im from p502_TLPA_Cu_Im import Iong_TLPA_Cu_Im -def main(): - # ==========================================================" - # 資料庫", - # ==========================================================" - # 自 .env 檔案取得資料庫名稱 - DATABASE = settings.get_database_path() - conn = sqlite3.connect(DATABASE) - db_cursor = conn.cursor() - print(f"DATABASE = {DATABASE}") - - # ========================================================================= - # (1) 取得需要注音的「檔案名稱」及其「目錄路徑」。 - # ========================================================================= - # 自命令列取得 Input 檔案名稱 - opts = get_cmd_input() - CONVERT_FILE_NAME = opts["input"] - print(f"CONVERT_FILE_NAME = {CONVERT_FILE_NAME}") - - # 取得檔案所屬之目錄路徑 - dir_path = opts["dir_path"] - - # 指定提供來源的【檔案】 - wb = open_excel_file(dir_path, CONVERT_FILE_NAME) - if wb is None: - print("無法開啟檔案,終止程式執行。") - sys.exit() - - # ========================================================================= - # (2) 建置「漢字注音表」 - # 將存放在「工作表1」的「漢字」文章,製成「漢字注音表」以便填入注音。 - # ========================================================================= - # San_Sing_Han_Ji_Tsh_Im_Piau(CONVERT_FILE_NAME) - - # ========================================================================= - # (3) 在字典查注音,填入漢字注音表。 - # ========================================================================= - # Kong_Un_Piau_Im(CONVERT_FILE_NAME, db_cursor) - - # ========================================================================= - # (4) 將已注音之「漢字注音表」,製作成 HTML 格式之「注音/拼音/標音」網頁。 - # ========================================================================= - - # 設定聲母及韻母之注音對照表 +def initialize_dicts(db_cursor): + """初始化聲母和韻母對照表字典""" try: sing_bu_dict = init_sing_bu_dict(db_cursor) un_bu_dict = init_un_bu_dict(db_cursor) + print("字典初始化完成。") + except Exception as e: + print(f"字典初始化失敗:{e}") + sys.exit(1) + return sing_bu_dict, un_bu_dict + + +def create_annotation_file(wb, db_cursor): + """建立注音表並進行查詢填寫""" + # 建立漢字注音表 + San_Sing_Han_Ji_Zu_Im_Piau(wb.name) + # # 查詢注音並填寫表格 + # Kong_Un_Piau_Im(wb.name, db_cursor) + + +def export_to_html(wb): + """將已注音的漢字注音表導出為 HTML 格式""" + # 這裡可以使用已經填寫的漢字注音表進行轉換 + print("將注音表轉換為 HTML 格式的功能可以在這裡實現。") + + +def main(): + #------------------------------------------------------------------------- + # 使用已打開且處於作用中的 Excel 工作簿 + #------------------------------------------------------------------------- + # 取得專案根目錄。 + try: + wb = xw.apps.active.books.active except Exception as e: - print(e) - Iong_TLPA_Cu_Im(wb, sing_bu_dict, un_bu_dict) - - # ========================================================== - # 檢查「缺字表」狀態 - # ========================================================== - # 指定來源工作表 - source_sheet = wb.sheets["缺字表"] - # 取得工作表內總列數 - end_row_no = ( - source_sheet.range("A" + str(source_sheet.cells.last_cell.row)).end("up").row - ) - if end_row_no > 1: - print(f"總計字典查不到注音的漢字共:{end_row_no}個。") - - # ========================================================================= - # (5) 依據《文章標題》另存新檔。 - # ========================================================================= - write_to_excel_file(wb) - close_excel_file(wb) - - # ========================================================== - # 關閉資料庫 - # ========================================================== - conn.close() + print(f"發生錯誤: {e}") + print("無法找到作用中的 Excel 工作簿") + sys.exit(2) + + # 獲取活頁簿的完整檔案路徑 + file_path = wb.fullname + print(f"完整檔案路徑: {file_path}") + + # 獲取活頁簿的檔案名稱(不包括路徑) + file_name = wb.name + print(f"檔案名稱: {file_name}") + + # 資料庫連接 + DATABASE = settings.get_database_path() + with sqlite3.connect(DATABASE) as conn: + db_cursor = conn.cursor() + print(f"DATABASE = {DATABASE}") + + # # 取得命令列參數和檔案路徑 + # opts = get_cmd_input() + # CONVERT_FILE_NAME = opts["input"] + # dir_path = opts["dir_path"] + # print(f"處理檔案: {CONVERT_FILE_NAME}") + + # # 開啟指定的 Excel 檔案 + # wb = open_excel_file(dir_path, CONVERT_FILE_NAME) + # if wb is None: + # print("無法開啟檔案,終止程式執行。") + # sys.exit() + + # 初始化字典 + sing_bu_dict, un_bu_dict = initialize_dicts(db_cursor) + + # 創建漢字注音表並查詢注音 + create_annotation_file(wb, db_cursor) + + # 注音轉換處理 + Iong_TLPA_Zu_Im(wb, sing_bu_dict, un_bu_dict) + + # 檢查缺字表狀態 + source_sheet = wb.sheets["缺字表"] + end_row_no = source_sheet.range("A" + str(source_sheet.cells.last_cell.row)).end("up").row + if end_row_no > 1: + print(f"總計字典查不到注音的漢字共:{end_row_no}個。") + + # 儲存 Excel 檔案並關閉 + write_to_excel_file(wb) + close_excel_file(wb) if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git "a/a520_\350\243\275\344\275\234\346\263\250\351\237\263\347\266\262\351\240\201_bak.py" "b/a520_\350\243\275\344\275\234\346\263\250\351\237\263\347\266\262\351\240\201_bak.py" new file mode 100644 index 0000000..f3ee106 --- /dev/null +++ "b/a520_\350\243\275\344\275\234\346\263\250\351\237\263\347\266\262\351\240\201_bak.py" @@ -0,0 +1,100 @@ +#================================================================ +# 《予我廣韻標音》 +# 使用《廣韻》作為漢字標讀音之依據。 +#================================================================ +import getopt +import os +import sqlite3 +import sys + +import xlwings as xw + +import settings +from mod_file_access import ( + close_excel_file, + get_cmd_input, + open_excel_file, + save_to_a_working_copy, + write_to_excel_file, +) +from mod_廣韻_v3 import init_sing_bu_dict, init_un_bu_dict +from p500_Import_Source_Sheet import San_Sing_Han_Ji_Tsh_Im_Piau +from p501_Kong_Un_Cha_Ji_Tian import Kong_Un_Piau_Im +from p502_TLPA_Cu_Im import Iong_TLPA_Cu_Im + + +def main(): + # ==========================================================" + # 資料庫", + # ==========================================================" + # 自 .env 檔案取得資料庫名稱 + DATABASE = settings.get_database_path() + conn = sqlite3.connect(DATABASE) + db_cursor = conn.cursor() + print(f"DATABASE = {DATABASE}") + + # ========================================================================= + # (1) 取得需要注音的「檔案名稱」及其「目錄路徑」。 + # ========================================================================= + # 自命令列取得 Input 檔案名稱 + opts = get_cmd_input() + CONVERT_FILE_NAME = opts["input"] + print(f"CONVERT_FILE_NAME = {CONVERT_FILE_NAME}") + + # 取得檔案所屬之目錄路徑 + dir_path = opts["dir_path"] + + # 指定提供來源的【檔案】 + wb = open_excel_file(dir_path, CONVERT_FILE_NAME) + if wb is None: + print("無法開啟檔案,終止程式執行。") + sys.exit() + + # ========================================================================= + # (2) 建置「漢字注音表」 + # 將存放在「工作表1」的「漢字」文章,製成「漢字注音表」以便填入注音。 + # ========================================================================= + # San_Sing_Han_Ji_Tsh_Im_Piau(CONVERT_FILE_NAME) + + # ========================================================================= + # (3) 在字典查注音,填入漢字注音表。 + # ========================================================================= + # Kong_Un_Piau_Im(CONVERT_FILE_NAME, db_cursor) + + # ========================================================================= + # (4) 將已注音之「漢字注音表」,製作成 HTML 格式之「注音/拼音/標音」網頁。 + # ========================================================================= + + # 設定聲母及韻母之注音對照表 + try: + sing_bu_dict = init_sing_bu_dict(db_cursor) + un_bu_dict = init_un_bu_dict(db_cursor) + except Exception as e: + print(e) + Iong_TLPA_Cu_Im(wb, sing_bu_dict, un_bu_dict) + + # ========================================================== + # 檢查「缺字表」狀態 + # ========================================================== + # 指定來源工作表 + source_sheet = wb.sheets["缺字表"] + # 取得工作表內總列數 + end_row_no = ( + source_sheet.range("A" + str(source_sheet.cells.last_cell.row)).end("up").row + ) + if end_row_no > 1: + print(f"總計字典查不到注音的漢字共:{end_row_no}個。") + + # ========================================================================= + # (5) 依據《文章標題》另存新檔。 + # ========================================================================= + write_to_excel_file(wb) + close_excel_file(wb) + + # ========================================================== + # 關閉資料庫 + # ========================================================== + conn.close() + +if __name__ == "__main__": + main() \ No newline at end of file diff --git "a/a703_\350\243\275\344\275\234\346\250\231\351\237\263\347\266\262\351\240\201.py" "b/a703_\350\243\275\344\275\234\346\250\231\351\237\263\347\266\262\351\240\201.py" index c29e4f5..0eb7964 100644 --- "a/a703_\350\243\275\344\275\234\346\250\231\351\237\263\347\266\262\351\240\201.py" +++ "b/a703_\350\243\275\344\275\234\346\250\231\351\237\263\347\266\262\351\240\201.py" @@ -37,8 +37,8 @@ sheet.range('A1').select() # 將 A1 儲存格設為作用儲存格 # (2) A740: 將【漢字注音】工作表的內容,轉成 HTML 網頁檔案。 -# tng_sing_bang_iah(wb, '漢字注音', 'V3') -tng_sing_bang_iah(wb, '十五音', 'V3') +han_ji_piau_im_huat = get_named_value(wb, '標音方法') +tng_sing_bang_iah(wb=wb, sheet_name='漢字注音', cell='V3', page_type='含頁頭') # (3) A750: 將 Tai_Gi_Zu_Im_Bun.xlsx 檔案,依 env 工作表的設定,另存新檔到指定目錄。 try: diff --git "a/a704_\350\243\275\344\275\234\345\205\266\345\256\203\346\274\242\345\255\227\346\250\231\351\237\263.py" "b/a704_\350\243\275\344\275\234\345\205\266\345\256\203\346\274\242\345\255\227\346\250\231\351\237\263.py" index 5e80a04..eff6601 100644 --- "a/a704_\350\243\275\344\275\234\345\205\266\345\256\203\346\274\242\345\255\227\346\250\231\351\237\263.py" +++ "b/a704_\350\243\275\344\275\234\345\205\266\345\256\203\346\274\242\345\255\227\346\250\231\351\237\263.py" @@ -4,9 +4,7 @@ import xlwings as xw from mod_file_access import copy_excel_sheet, reset_han_ji_piau_im_cells -from p704_漢字以十五音標注音 import zap_goo_im_piau_im - -# from p703_Kong_Un_Ca_Thak_Im import ca_han_ji_thak_im +from p704_漢字以十五音標注音 import han_ji_piau_im # (0) 取得專案根目錄。 # 使用已打開且處於作用中的 Excel 工作簿 @@ -26,20 +24,46 @@ print(f"檔案名稱: {file_name}") # 顯示「已輸入之拼音字母及注音符號」 -named_range = wb.names['顯示注音輸入'] # 選擇名為 "顯示注音輸入" 的命名範圍# 選擇名為 "顯示注音輸入" 的命名範圍 +named_range = wb.names['顯示注音輸入'] named_range.refers_to_range.value = True # (1) A720: 將 V3 儲存格內的漢字,逐個填入標音用方格。 -sheet = wb.sheets['漢字注音'] # 選擇工作表 -sheet.activate() # 將「漢字注音」工作表設為作用中工作表 -sheet.range('A1').select() # 將 A1 儲存格設為作用儲存格 +sheet = wb.sheets['漢字注音'] +sheet.activate() +sheet.range('A1').select() # (2) 複製【漢字注音】工作表,並將【漢字注音】工作表已有漢字標清除(不含上列之【台語音標】) piau_im_huat = wb.names['標音方法'].refers_to_range.value copy_excel_sheet(wb, '漢字注音', piau_im_huat) reset_han_ji_piau_im_cells(wb, piau_im_huat) -zap_goo_im_piau_im(wb, sheet_name=piau_im_huat, cell='V3', hue_im="白話音") + +# 根據標音方法選擇對應參數 +if piau_im_huat == '十五音': + hue_im = "白話音" + module_name = 'mod_標音' + function_name = 'TLPA_Tng_Zap_Goo_Im' +elif piau_im_huat == '白話字': + # 以下為待完成之虛擬程式碼 + hue_im = "白話字" + module_name = 'mod_白話字' + function_name = 'bah_hoat_tng_im' +elif piau_im_huat == '台羅拼音': + # 以下為待完成之虛擬程式碼 + hue_im = "台羅拼音" + module_name = 'mod_台羅拼音' + function_name = 'tai_lo_pin_im' +elif piau_im_huat == '閩拚方案': + # 以下為待完成之虛擬程式碼 + hue_im = "閩拚方案" + module_name = 'mod_閩拚方案' + function_name = 'min_pian_han_im' +else: + print(f"無法識別的標音方法:{piau_im_huat}") + sys.exit(1) + +# 呼叫 han_ji_piau_im 函數,並傳入動態參數 +han_ji_piau_im(wb, sheet_name=piau_im_huat, cell='V3', hue_im=hue_im, module_name=module_name, function_name=function_name) # (3) A740: 將【漢字注音】工作表的內容,轉成 HTML 網頁檔案。 # tng_sing_bang_iah(wb, '漢字注音', 'V3') @@ -48,22 +72,14 @@ try: file_name = str(wb.names['TITLE'].refers_to_range.value).strip() except KeyError: - # print("未找到命名範圍 'TITLE',使用預設名稱") - # file_name = "default_file_name.xlsx" # 提供一個預設檔案名稱 setting_sheet = wb.sheets["env"] - file_name = str( - setting_sheet.range("C4").value - ).strip() + file_name = str(setting_sheet.range("C4").value).strip() # 設定檔案輸出路徑,存於專案根目錄下的 output2 資料夾 output_path = wb.names['OUTPUT_PATH'].refers_to_range.value new_file_path = os.path.join( ".\\{0}".format(output_path), - f"【河洛話注音】{file_name}.xlsx") + f"【{piau_im_huat}】{file_name}.xlsx") # 儲存新建立的工作簿 wb.save(new_file_path) - -# 保存 Excel 檔案 -# wb.close() - diff --git "a/docs/\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221_\345\215\201\344\272\224\351\237\263.html" "b/docs/\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221_\345\215\201\344\272\224\351\237\263.html" new file mode 100644 index 0000000..2ad10d1 --- /dev/null +++ "b/docs/\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221_\345\215\201\344\272\224\351\237\263.html" @@ -0,0 +1,425 @@ + + + + + 《歸去來辭》【河洛白話音】 + + + + + 《歸去來辭》【河洛白話音】 +
+ + 《歸去來辭》【河洛白話音】 + +
+ +

+kui1規一求 +khi3居三去 +lai5皆五柳 +e5伽五英 + +tshan5干五出 +hng5鋼五喜 +tsiang3姜三曾 +bu5艍五門 +oo5沽五英 +m7姆七英 +kui1規一求 + +ki3居三求 +tsu7艍七曾 +i2居二英 +sim1金一時 +ui7規七英 +hing5經五喜 +iah8迦八英 + +he5伽五喜 +tiu5丩五地 +tiong3恭三地 +li5居五柳 +tak8江八地 +pi1居一邊 + +goo7沽七語 +i2居二英 +ong2公二英 +tsi1居一曾 +m7姆七英 +kan3干三求 + +tsai1皆一曾 +lai5皆五柳 +tsia2迦二曾 +tsi1居一曾 +kho2高二去 +tui1規一地 + +sit8巾八時 +be5伽五門 +too5沽五地 +ki5居五求 +bi7居七門 +hng7鋼七喜 + +kak4江四求 +kin1巾一求 +si7居七時 +li5居五柳 +tsa7膠七曾 +hui1規一喜 + +tsiu1丩一曾 +iau5嬌五英 +iau5嬌五英 +i2居二英 +khin1巾一去 +iong5恭五英 + +hong1公一喜 +phiau1嬌一頗 +phiau1嬌一頗 +li5居五柳 +tshue1檜一出 +i1居一英 + +mng7鋼七毛 +tsing1經一曾 +hu1艍一喜 +i2居二英 +tsing5經五曾 +loo7沽七柳 + +hin7巾七喜 +sin5巾五時 +kng1鋼一求 +tsi1居一曾 +hi1居一喜 +bi5居五門 + +nai2皆二耐 +tsiam1兼一曾 +hing5經五喜 +u2艍二英 + +tsai2皆二曾 +him1金一喜 +tsai2皆二曾 +phun1君一頗 + +tong5公五地 +phak4江四頗 +huann1官一喜 +ngia5迦五雅 + +ti7居七地 +kiann2驚二求 +hau7交七喜 +mng5鋼五毛 + +sann1監一時 +king3經三求 +tio7茄七地 +huinn1褌一喜 + +tshing5經五出 +kik4經四求 +iau2嬌二英 +tsun5君五曾 + +he5伽五喜 +iu3丩三英 +jip8金八入 +sit4巾四時 + +u7艍七英 +tsiu2丩二曾 +ing5經五英 +tsun1君一曾 + +in2巾二英 +oo5沽五英 +siong1恭一時 +i2居二英 +tsu7艍七曾 +tsiok4恭四曾 + +bian2堅二門 +tiann5驚五地 +kua1瓜一求 +i2居二英 +i5居五英 +gan5干五語 + +ua2瓜二英 +lam5甘五柳 +thang1江一他 +i2居二英 +kia3迦三求 +ngoo7沽七雅 + +sim2金二時 +iong5恭五英 +sik4經四時 +tsi1居一曾 +i7居七英 +an1干一英 + +hng5鋼五喜 +lit8巾八柳 +siap8兼八時 +i2居二英 +siann5驚五時 +tshu3艍三出 + +mng5鋼五毛 +sui1規一時 +siat4堅四時 +li5居五柳 +siang5姜五時 +kuan1觀一求 + +tshik4經四出 +phoo5沽五頗 +lau7交七柳 +i2居二英 +lau5交五柳 +khe3伽三去 + +si5居五時 +kiau2嬌二求 +siu2丩二時 +li5居五柳 +ha5膠五喜 +kuan1觀一求 + +hun5君五喜 +bo5高五門 +sim1金一時 +i2居二英 +tshut4君四出 +siu7丩七時 + +tsiau2嬌二曾 +kuan7觀七求 +pue1檜一邊 +li5居五柳 +tsai1皆一曾 +huan5觀五喜 + +king2經二求 +e3伽三英 +e3伽三英 +i2居二英 +tsiang3姜三曾 +jip8金八入 + +hu2艍二喜 +koo1沽一求 +tshing5經五出 +li5居五柳 +puann5官五邊 +huan5觀五喜 + +

+

+kui1規一求 +khi3居三去 +lai5皆五柳 +e5伽五英 + +tshiann2驚二出 +sit4巾四時 +ka1膠一求 +i2居二英 +tsuat8觀八曾 +iu5丩五英 + +se3伽三時 +u2艍二英 +gua2瓜二語 +li5居五柳 +siunn1牛一時 +i5居五英 + +hok4公四喜 +ka3膠三求 +gan5干五語 +e5伽五英 +ian1堅一英 +kiu5丩五求 + +iat8堅八英 +tshin1巾一出 +tshik4經四出 +tsi1居一曾 +tsing5經五曾 +hua7瓜七喜 + +loh8高八柳 +khim5金五去 +tsu1艍一曾 +i2居二英 +siau1嬌一時 +iu1丩一英 + +long5公五柳 +lang5江五柳 +ko3高三求 +u5艍五英 +i2居二英 +tshun1君一出 +kip8金八求 + +tsiang3姜三曾 +u7艍七英 +tai7皆七地 +hoonn3姑三喜 +西sai1皆一時 +tiu5丩五地 + +iah8迦八英 +mia7迦七毛 +kun1君一求 +tshia1迦一出 + +iah8迦八英 +tsau7交七曾 +koo1沽一求 +tsiu1丩一曾 + +ki3居三求 +iau2嬌二英 +thiau2嬌二他 +i2居二英 +tshue7檜七出 +hok4公四喜 + +iah8迦八英 +kia7迦七求 +khu1艍一去 +li5居五柳 +king1經一求 +khu1艍一去 + +bak8江八門 +him1金一喜 +him1金一喜 +i2居二英 +hiong3恭三喜 +ing5經五英 + +tsuann5官五曾 +kuan1觀一求 +kuan1觀一求 +li5居五柳 +su2艍二時 +lau5交五柳 + +sian7堅七時 +ban7干七門 +mih8居八毛 +tsi1居一曾 +tit4巾四地 +si5居五時 + +kam2甘二求 +ngoo5沽五雅 +senn1更一時 +tsi1居一曾 +kiann5驚五求 +hiu1丩一喜 + +

+

+i2居二英 +i2居二英 +hoonn3姑三喜 + +gu7艍七語 +hing5經五喜 +u2艍二英 +lai7皆七柳 +hok4公四喜 +kui2規二求 +si5居五時 + +hat4干四喜 +m7姆七英 +ui2規二英 +sim1金一時 +jim7金七入 +khi3居三去 +lau5交五柳 + +oo5沽五英 +ui7規七英 +hong5公五喜 +hong5公五喜 +beh4伽四門 +ho5高五喜 +tsi1居一曾 + +hu3艍三喜 +kui3規三求 +hui1規一喜 +ngoo5沽五雅 +guan7觀七語 + +te3伽三地 +hiang1姜一喜 +m7姆七英 +kho2高二去 +ki5居五求 + +huai5乖五喜 +liang5姜五柳 +sin5巾五時 +i2居二英 +koo1沽一求 +ong2公二英 + +iah8迦八英 +sit8巾八時 +thng7鋼七他 +li5居五柳 +un5君五英 +tsu2艍二曾 + +ting1經一地 +tang1江一地 +ko1高一求 +i2居二英 +soo1沽一時 +siau3嬌三時 + +lim5金五柳 +tshinn1梔一出 +lau5交五柳 +li5居五柳 +hu3艍三喜 +si1居一時 + +liau5嬌五柳 +sing5經五時 +hua3瓜三喜 +i2居二英 +kui1規一求 +tsin7巾七曾 + +loh8高八柳 +hu1艍一喜 +thinn1梔一他 +mia7迦七毛 +hok4公四喜 +he5伽五喜 +gi5居五語 + +

+

+ + + \ No newline at end of file diff --git "a/docs/\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221_\346\226\271\351\237\263\347\254\246\350\231\237.html" "b/docs/\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221_\346\226\271\351\237\263\347\254\246\350\231\237.html" new file mode 100644 index 0000000..a595047 --- /dev/null +++ "b/docs/\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221_\346\226\271\351\237\263\347\254\246\350\231\237.html" @@ -0,0 +1,425 @@ + + + + + 《歸去來辭》【河洛白話音】 + + + + + 《歸去來辭》【河洛白話音】 +
+ + 《歸去來辭》【河洛白話音】 + +
+ +

+kui1ㄍㄨㄧ +khi3ㄎㄧ˪ +lai5ㄌㄞˊ +e5ㆤˊ + +tshan5ㄘㄢˊ +hng5ㄏㆭˊ +tsiang3ㄗㄧㄤ˪ +bu5ㆠㄨˊ +oo5ㆦˊ +m7ㆬ˫ +kui1ㄍㄨㄧ + +ki3ㄍㄧ˪ +tsu7ㄗㄨ˫ +i2ㄧˋ +sim1ㄙㄧㆬ +ui7ㄨㄧ˫ +hing5ㄏㄧㄥˊ +iah8ㄧㄚㆷ˙ + +he5ㄏㆤˊ +tiu5ㄉㄧㄨˊ +tiong3ㄉㄧㆲ˪ +li5ㄌㄧˊ +tak8ㄉㄚㆻ˙ +pi1ㄅㄧ + +goo7ㆣㆦ˫ +i2ㄧˋ +ong2ㆲˋ +tsi1ㄗㄧ +m7ㆬ˫ +kan3ㄍㄢ˪ + +tsai1ㄗㄞ +lai5ㄌㄞˊ +tsia2ㄗㄧㄚˋ +tsi1ㄗㄧ +kho2ㄎㄜˋ +tui1ㄉㄨㄧ + +sit8ㄙㄧㆵ˙ +be5ㆠㆤˊ +too5ㄉㆦˊ +ki5ㄍㄧˊ +bi7ㆠㄧ˫ +hng7ㄏㆭ˫ + +kak4ㄍㄚㆻ +kin1ㄍㄧㄣ +si7ㄙㄧ˫ +li5ㄌㄧˊ +tsa7ㄗㄚ˫ +hui1ㄏㄨㄧ + +tsiu1ㄗㄧㄨ +iau5ㄧㄠˊ +iau5ㄧㄠˊ +i2ㄧˋ +khin1ㄎㄧㄣ +iong5ㄧㆲˊ + +hong1ㄏㆲ +phiau1ㄆㄧㄠ +phiau1ㄆㄧㄠ +li5ㄌㄧˊ +tshue1ㄘㄨㆤ +i1 + +mng7ㄇㆭ˫ +tsing1ㄗㄧㄥ +hu1ㄏㄨ +i2ㄧˋ +tsing5ㄗㄧㄥˊ +loo7ㄌㆦ˫ + +hin7ㄏㄧㄣ˫ +sin5ㄙㄧㄣˊ +kng1ㄍㆭ +tsi1ㄗㄧ +hi1ㄏㄧ +bi5ㆠㄧˊ + +nai2ㄋㄞˋ +tsiam1ㄗㄧㆰ +hing5ㄏㄧㄥˊ +u2ㄨˋ + +tsai2ㄗㄞˋ +him1ㄏㄧㆬ +tsai2ㄗㄞˋ +phun1ㄆㄨㄣ + +tong5ㄉㆲˊ +phak4ㄆㄚㆻ +huann1ㄏㄨㆩ +ngia5ㄫㄧㄚˊ + +ti7ㄉㄧ˫ +kiann2ㄍㄧㆩˋ +hau7ㄏㄠ˫ +mng5ㄇㆭˊ + +sann1ㄙㆩ +king3ㄍㄧㄥ˪ +tio7ㄉㄧㄜ˫ +huinn1ㄏㄨㆪ + +tshing5ㄘㄧㄥˊ +kik4ㄍㄧㆻ +iau2ㄧㄠˋ +tsun5ㄗㄨㄣˊ + +he5ㄏㆤˊ +iu3ㄧㄨ˪ +jip8ㆡㄧㆴ˙ +sit4ㄙㄧㆵ + +u7ㄨ˫ +tsiu2ㄗㄧㄨˋ +ing5ㄧㄥˊ +tsun1ㄗㄨㄣ + +in2ㄧㄣˋ +oo5ㆦˊ +siong1ㄙㄧㆲ +i2ㄧˋ +tsu7ㄗㄨ˫ +tsiok4ㄗㄧㆦㆻ + +bian2ㆠㄧㄢˋ +tiann5ㄉㄧㆩˊ +kua1ㄍㄨㄚ +i2ㄧˋ +i5ㄧˊ +gan5ㆣㄢˊ + +ua2ㄨㄚˋ +lam5ㄌㆰˊ +thang1ㄊㄤ +i2ㄧˋ +kia3ㄍㄧㄚ˪ +ngoo7ㄫㆦ˫ + +sim2ㄙㄧㆬˋ +iong5ㄧㆲˊ +sik4ㄙㄧㆻ +tsi1ㄗㄧ +i7ㄧ˫ +an1 + +hng5ㄏㆭˊ +lit8ㄌㄧㆵ˙ +siap8ㄙㄧㄚㆴ˙ +i2ㄧˋ +siann5ㄙㄧㆩˊ +tshu3ㄘㄨ˪ + +mng5ㄇㆭˊ +sui1ㄙㄨㄧ +siat4ㄙㄧㄚㆵ +li5ㄌㄧˊ +siang5ㄙㄧㄤˊ +kuan1ㄍㄨㄢ + +tshik4ㄘㄧㆻ +phoo5ㄆㆦˊ +lau7ㄌㄠ˫ +i2ㄧˋ +lau5ㄌㄠˊ +khe3ㄎㆤ˪ + +si5ㄙㄧˊ +kiau2ㄍㄧㄠˋ +siu2ㄙㄧㄨˋ +li5ㄌㄧˊ +ha5ㄏㄚˊ +kuan1ㄍㄨㄢ + +hun5ㄏㄨㄣˊ +bo5ㆠㄜˊ +sim1ㄙㄧㆬ +i2ㄧˋ +tshut4ㄘㄨㆵ +siu7ㄙㄧㄨ˫ + +tsiau2ㄗㄧㄠˋ +kuan7ㄍㄨㄢ˫ +pue1ㄅㄨㆤ +li5ㄌㄧˊ +tsai1ㄗㄞ +huan5ㄏㄨㄢˊ + +king2ㄍㄧㄥˋ +e3ㆤ˪ +e3ㆤ˪ +i2ㄧˋ +tsiang3ㄗㄧㄤ˪ +jip8ㆡㄧㆴ˙ + +hu2ㄏㄨˋ +koo1ㄍㆦ +tshing5ㄘㄧㄥˊ +li5ㄌㄧˊ +puann5ㄅㄨㆩˊ +huan5ㄏㄨㄢˊ + +

+

+kui1ㄍㄨㄧ +khi3ㄎㄧ˪ +lai5ㄌㄞˊ +e5ㆤˊ + +tshiann2ㄘㄧㆩˋ +sit4ㄙㄧㆵ +ka1ㄍㄚ +i2ㄧˋ +tsuat8ㄗㄨㄚㆵ˙ +iu5ㄧㄨˊ + +se3ㄙㆤ˪ +u2ㄨˋ +gua2ㆣㄨㄚˋ +li5ㄌㄧˊ +siunn1ㄙㄧㆫ +i5ㄧˊ + +hok4ㄏㆦㆻ +ka3ㄍㄚ˪ +gan5ㆣㄢˊ +e5ㆤˊ +ian1ㄧㄢ +kiu5ㄍㄧㄨˊ + +iat8ㄧㄚㆵ˙ +tshin1ㄘㄧㄣ +tshik4ㄘㄧㆻ +tsi1ㄗㄧ +tsing5ㄗㄧㄥˊ +hua7ㄏㄨㄚ˫ + +loh8ㄌㄜㆷ˙ +khim5ㄎㄧㆬˊ +tsu1ㄗㄨ +i2ㄧˋ +siau1ㄙㄧㄠ +iu1ㄧㄨ + +long5ㄌㆲˊ +lang5ㄌㄤˊ +ko3ㄍㄜ˪ +u5ㄨˊ +i2ㄧˋ +tshun1ㄘㄨㄣ +kip8ㄍㄧㆴ˙ + +tsiang3ㄗㄧㄤ˪ +u7ㄨ˫ +tai7ㄉㄞ˫ +hoonn3ㄏㆧ˪ +西sai1ㄙㄞ +tiu5ㄉㄧㄨˊ + +iah8ㄧㄚㆷ˙ +mia7ㄇㄧㄚ˫ +kun1ㄍㄨㄣ +tshia1ㄘㄧㄚ + +iah8ㄧㄚㆷ˙ +tsau7ㄗㄠ˫ +koo1ㄍㆦ +tsiu1ㄗㄧㄨ + +ki3ㄍㄧ˪ +iau2ㄧㄠˋ +thiau2ㄊㄧㄠˋ +i2ㄧˋ +tshue7ㄘㄨㆤ˫ +hok4ㄏㆦㆻ + +iah8ㄧㄚㆷ˙ +kia7ㄍㄧㄚ˫ +khu1ㄎㄨ +li5ㄌㄧˊ +king1ㄍㄧㄥ +khu1ㄎㄨ + +bak8ㆠㄚㆻ˙ +him1ㄏㄧㆬ +him1ㄏㄧㆬ +i2ㄧˋ +hiong3ㄏㄧㆲ˪ +ing5ㄧㄥˊ + +tsuann5ㄗㄨㆩˊ +kuan1ㄍㄨㄢ +kuan1ㄍㄨㄢ +li5ㄌㄧˊ +su2ㄙㄨˋ +lau5ㄌㄠˊ + +sian7ㄙㄧㄢ˫ +ban7ㆠㄢ˫ +mih8ㄇㄧㆷ˙ +tsi1ㄗㄧ +tit4ㄉㄧㆵ +si5ㄙㄧˊ + +kam2ㄍㆰˋ +ngoo5ㄫㆦˊ +senn1ㄙㆥ +tsi1ㄗㄧ +kiann5ㄍㄧㆩˊ +hiu1ㄏㄧㄨ + +

+

+i2ㄧˋ +i2ㄧˋ +hoonn3ㄏㆧ˪ + +gu7ㆣㄨ˫ +hing5ㄏㄧㄥˊ +u2ㄨˋ +lai7ㄌㄞ˫ +hok4ㄏㆦㆻ +kui2ㄍㄨㄧˋ +si5ㄙㄧˊ + +hat4ㄏㄚㆵ +m7ㆬ˫ +ui2ㄨㄧˋ +sim1ㄙㄧㆬ +jim7ㆡㄧㆬ˫ +khi3ㄎㄧ˪ +lau5ㄌㄠˊ + +oo5ㆦˊ +ui7ㄨㄧ˫ +hong5ㄏㆲˊ +hong5ㄏㆲˊ +beh4ㆠㆤㆷ +ho5ㄏㄜˊ +tsi1ㄗㄧ + +hu3ㄏㄨ˪ +kui3ㄍㄨㄧ˪ +hui1ㄏㄨㄧ +ngoo5ㄫㆦˊ +guan7ㆣㄨㄢ˫ + +te3ㄉㆤ˪ +hiang1ㄏㄧㄤ +m7ㆬ˫ +kho2ㄎㄜˋ +ki5ㄍㄧˊ + +huai5ㄏㄨㄞˊ +liang5ㄌㄧㄤˊ +sin5ㄙㄧㄣˊ +i2ㄧˋ +koo1ㄍㆦ +ong2ㆲˋ + +iah8ㄧㄚㆷ˙ +sit8ㄙㄧㆵ˙ +thng7ㄊㆭ˫ +li5ㄌㄧˊ +un5ㄨㄣˊ +tsu2ㄗㄨˋ + +ting1ㄉㄧㄥ +tang1ㄉㄤ +ko1ㄍㄜ +i2ㄧˋ +soo1ㄙㆦ +siau3ㄙㄧㄠ˪ + +lim5ㄌㄧㆬˊ +tshinn1ㄘㆪ +lau5ㄌㄠˊ +li5ㄌㄧˊ +hu3ㄏㄨ˪ +si1ㄙㄧ + +liau5ㄌㄧㄠˊ +sing5ㄙㄧㄥˊ +hua3ㄏㄨㄚ˪ +i2ㄧˋ +kui1ㄍㄨㄧ +tsin7ㄗㄧㄣ˫ + +loh8ㄌㄜㆷ˙ +hu1ㄏㄨ +thinn1ㄊㆪ +mia7ㄇㄧㄚ˫ +hok4ㄏㆦㆻ +he5ㄏㆤˊ +gi5ㆣㄧˊ + +

+

+ + + \ No newline at end of file diff --git a/mod_file_access.py b/mod_file_access.py index 4ab86a7..fec1c55 100644 --- a/mod_file_access.py +++ b/mod_file_access.py @@ -336,4 +336,87 @@ def reset_han_ji_piau_im_cells(wb, sheet_name='漢字注音'): # 計算要清除的行號,從 start_row_no 開始,依次遞增 4 行 current_row_no = start_row_no + i * row_step # 清除指定範圍的內容 - sheet.range(f'D{current_row_no}:R{current_row_no}').clear_contents() \ No newline at end of file + sheet.range(f'D{current_row_no}:R{current_row_no}').clear_contents() + + +def San_Sing_Han_Ji_Zu_Im_Piau(wb): + # 指定來源工作表 + source_sheet = wb.sheets["工作表1"] + source_sheet.select() + + # 取得工作表內總列數 + source_row_no = int( + source_sheet.range("A" + str(wb.sheets[0].cells.last_cell.row)).end("up").row + ) + print(f"source_row_no = {source_row_no}") + + # ========================================================== + # 備妥程式需使用之工作表 + # ========================================================== + sheet_name_list = [ + "缺字表", + "字庫表", + "漢字注音表", + ] + # ----------------------------------------------------- + # 檢查工作表是否已存在 + for sheet_name in sheet_name_list: + sheets = [sheet.name for sheet in wb.sheets] # 獲取所有工作表的名稱 + if sheet_name in sheets: + sheet = wb.sheets[sheet_name] + try: + sheet.select() + sheet.clear() + continue + except Exception as e: + print(e) + else: + # CommandError 的 Exception 發生時,表工作表不存在 + # 新增程式需使用之工作表 + print(f"工作表 {sheet_name} 不存在,正在新增...") + wb.sheets.add(name=sheet_name) + + # 選用「漢字注音表」 + try: + han_ji_tsu_im_paiu = wb.sheets["漢字注音表"] + han_ji_tsu_im_paiu.select() + except Exception as e: + # 处理找不到 "漢字注音表" 工作表的异常 + print(e) + print("找不到:〖漢字注音表〗工作表。") + return False + + # ========================================================== + # (1) + # ========================================================== + # 自【工作表1】的每一列,讀入一個「段落」的漢字。然後將整個段 + # 落拆成「單字」,存到【漢字注音表】;在【漢字注音表】的每個 + # 儲存格,只存放一個「單字」。 + # ========================================================== + + # source_row_index = 1 + # target_row_index = 1 # index for target sheet + # # for row in range(1, source_rows): + # while source_row_index <= source_row_no: + # # 自【工作表1】取得「一行漢字」 + # tsit_hang_ji = str(source_sheet.range("A" + str(source_row_index)).value) + # hang_ji_str = tsit_hang_ji.strip() + + # # 讀到空白行 + # if hang_ji_str == "None": + # hang_ji_str = "\n" + # else: + # hang_ji_str = f"{tsit_hang_ji}\n" + + # han_ji_range = convert_string_to_chars_list(hang_ji_str) + + # # ========================================================= + # # 讀到的整段文字,以「單字」形式寫入【漢字注音表】。 + # # ========================================================= + # han_ji_tsu_im_paiu.range("A" + str(target_row_index)).options( + # transpose=True + # ).value = han_ji_range + + # ji_soo = len(han_ji_range) + # target_row_index += ji_soo + # source_row_index += 1 diff --git "a/mod_\345\273\243\351\237\273_v3.py" "b/mod_\345\273\243\351\237\273_v3.py" new file mode 100644 index 0000000..b8124b0 --- /dev/null +++ "b/mod_\345\273\243\351\237\273_v3.py" @@ -0,0 +1,425 @@ +import re +import sqlite3 + + +def connect_to_db_by_context_manager_decorator(db_path): + def connect_to_db(func): + def wrapper(*args, **kwargs): + # 創建數據庫連接 + conn = sqlite3.connect(db_path) + + # 創建一個游標 + cursor = conn.cursor() + + # 執行函數 + result = func(cursor, *args, **kwargs) + + # 關閉數據庫連接 + conn.close() + + return result + + return wrapper + + return connect_to_db + + +def connect_to_db(db_path): + # 創建數據庫連接 + conn = sqlite3.connect(db_path) + + # 創建一個游標 + cursor = conn.cursor() + + return conn, cursor + + +def connect_to_db2(db_path): + # 創建數據庫連接 + conn = sqlite3.connect(db_path) + + # 創建一個游標 + cursor = conn.cursor() # noqa: F841 + + return conn + + +def close_db_connection(conn): + # 關閉數據庫連接 + conn.close() + + +#=============================================================================== +# 查音雅俗通十五音聲母對照表 +#=============================================================================== +def cha_siann_bu_tui_ciau_piau(cursor): + # SQL 查詢語句 + query = """ + SELECT 識別號, + 聲母碼, + 聲母國際音標, + 白話字聲母, + 閩拼聲母, + 台羅聲母, + 方音聲母, + 十五音聲母 + FROM 聲母對照表; + """ + + # 執行 SQL 查詢 + cursor.execute(query) + + # 獲取查詢結果 + results = cursor.fetchall() + + # 將結果轉換為字典列表 + fields = [ + '識別號', '聲母碼', '聲母國際音標', '白話字聲母', '閩拼聲母', '台羅聲母', + '方音聲母', '十五音聲母', + ] + dict_results = [dict(zip(fields, result)) for result in results] + + # 回傳字典列表 + return dict_results + + +""" +查詢雅俗通十五音韻母對照表 +""" +def cha_un_bu_tui_ciau_piau(cursor): + # SQL 查詢語句 + query = """ + SELECT 識別號, + 韻母碼, + 韻母國際音標, + 白話字韻母, + 閩拼韻母, + 台羅韻母, + 方音韻母, + 十五音韻母, + 舒促聲, + 十五音序 + FROM 韻母對照表; + """ + + # 執行 SQL 查詢 + cursor.execute(query) + + # 獲取查詢結果 + results = cursor.fetchall() + + # 將結果轉換為字典列表 + fields = [ + '識別號', '韻母碼', '韻母國際音標', '白話字韻母', '閩拼韻母', '台羅韻母', + '方音韻母', '十五音韻母', '舒促聲', '十五音序' + ] + dict_results = [dict(zip(fields, result)) for result in results] + + # 回傳字典列表 + return dict_results + + +""" +使用 `小韻檢視` 查詢某小韻之切語及標音 +""" +def cha_siau_un_piau_im(cursor, han_ji): + """ + 根據漢字查詢其讀音資訊。 + + :param cursor: 數據庫游標 + :param han_zi: 欲查詢的漢字 + :return: 包含讀音資訊的字典列表 + """ + query = """ + SELECT 小韻字, 小韻切語, 小韻標音 + FROM 小韻檢視 + WHERE 小韻字 = ?; + """ + cursor.execute(query, (han_ji,)) + results = cursor.fetchall() + + # 將結果轉換為字典列表 + fields = ['小韻字', '小韻切語', '小韻標音'] + return [dict(zip(fields, result)) for result in results] + +""" +查詢某漢字的 `小韻` 資料 +""" +def han_ji_cha_siau_un(cursor, han_ji): + # SQL 查詢語句 + query = """ + SELECT * + FROM 小韻檢視 + WHERE 小韻字 = ?; + """ + + # 執行 SQL 查詢 + cursor.execute(query, (han_ji,)) + + # 獲取查詢結果 + results = cursor.fetchall() + + # 將結果轉換為字典列表 + fields = [ + '小韻識別號', '上字表識別號', '下字表識別號', + '小韻字', '小韻切語', '小韻標音', '小韻目次', '小韻字序號', '小韻字集', '字數', + '廣韻聲母', '七聲類', '發音部位', '清濁', '發送收', + '聲母碼', '聲母國際音標', '白話字聲母', '閩拼聲母', '台羅聲母', '方音聲母','十五音聲母', + '廣韻韻母', '目次', '攝', '韻系', '韻目', '調', '呼', '等', '韻母', '等呼', '下字標音', + '韻母碼', '韻母國際音標', '白話字韻母', '閩拼韻母', '台羅韻母', '方音韻母', '十五音韻母', + ] + + dict_results = [dict(zip(fields, result)) for result in results] + + # 回傳字典列表 + return dict_results + +""" +用 `漢字` 查詢《廣韻》的標音 +""" +def han_ji_cha_piau_im(cursor, han_ji): + """ + 根據漢字查詢其讀音資訊。 若資料紀錄在`常用率`欄位儲存值為空值(NULL) + ,則將其視為 0人值,因此可排在查詢結果的最後。 + + :param cursor: 數據庫游標 + :param han_ji: 欲查詢的漢字 + :return: 包含讀音資訊的字典列表 + + SELECT * + FROM 漢字檢視 + WHERE 字 = ? + ORDER BY CASE WHEN 常用率 IS NULL THEN 1 ELSE 0 END, 常用率 DESC; + """ + + query = """ + SELECT * + FROM 漢字檢視 + WHERE 字 = ? + ORDER BY COALESCE(常用率, 0) DESC; + """ + cursor.execute(query, (han_ji,)) + results = cursor.fetchall() + + # 將結果轉換為字典列表 + fields = [ + '漢字識別號', '字', '同音字序', '切語', '漢字標音', '常用率', '字義', + '小韻識別號', '上字識別號', '下字識別號', '小韻字', '小韻切語', '小韻標音', '小韻目次', '小韻字序號', + '廣韻聲母', '七聲類', '發音部位', '清濁', '發送收', + '聲母碼', '聲母國際音標', '白話字聲母', '閩拼聲母', '台羅聲母', '方音聲母', '十五音聲母', + '廣韻韻母', '目次', '攝', '韻系', '韻目', '調', '呼', '等', '等呼', + '韻母碼', '韻母國際音標', '白話字韻母', '閩拼韻母', '台羅韻母', '方音韻母', '十五音韻母', + ] + return [dict(zip(fields, result)) for result in results] + + +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 + '%',)) + + # 獲取查詢結果 + results = cursor.fetchall() + + # 將結果轉換為字典列表 + dict_results = [dict(zip(fields, result)) for result in results] + + # 回傳字典列表 + return dict_results + + +def cha_ciat_gu_siong_ji(cursor, siong_ji): + table_name = "切語上字表" + fields = [ + '識別號', '廣韻聲母識別號', '七聲類', '發音部位', '聲母', '清濁', '發送收', + '聲母拼音碼', '切語上字集', '備註', + ] + query_field = "切語上字集" + return query_table_by_field(cursor, table_name, fields, query_field, siong_ji) + + +def cha_ciat_gu_ha_ji(cursor, ha_ji): + table_name = "切語下字表" + fields = [ + '識別號', '廣韻韻母識別號', '韻系列號', '韻系行號', + '韻目索引', '目次識別號', '目次', + '攝', '韻系', '韻目', '調', '呼', '等', '韻母', + '切語下字集', '等呼', '韻母拼音碼', '備註', + ] + query_field = "切語下字集" + return query_table_by_field(cursor, table_name, fields, query_field, ha_ji) + + +def query_table_by_id(cursor, table_name, fields, id): + # 執行 SQL 查詢 + cursor.execute(f"SELECT * FROM {table_name} WHERE 識別號 = ?", (id,)) + + # 獲取查詢結果 + results = cursor.fetchall() + + # 將結果轉換為字典列表 + dict_results = [dict(zip(fields, result)) for result in results] + + # 回傳字典列表 + return dict_results + + +# ========================================================= +# 判斷調號 +# ========================================================= +def piau_tiau_ho(ji_tian_piau_im): + tiau_ho_list = { + '清平': 1, + '清上': 2, + '清去': 3, + '清入': 4, + '濁平': 5, + '濁上': 2, + '濁去': 7, + '濁入': 8, + } + siong_ji_cing_tok = ji_tian_piau_im['清濁'] + cing_tok = siong_ji_cing_tok[-1] + sing_tiau = ji_tian_piau_im['調'] + try: + su_sing_pat_tiau = tiau_ho_list[ f"{cing_tok}{sing_tiau}" ] + except KeyError: + print(f"無法判漢字:{ji_tian_piau_im['字']}的 [{ji_tian_piau_im['聲母碼']}{ji_tian_piau_im['韻母碼']}] 調號!") + su_sing_pat_tiau = 0 + return su_sing_pat_tiau + + +def init_sing_bu_dict(cursor): + # 執行 SQL 查詢 + cursor.execute("SELECT * FROM 聲母對照表") + + # 獲取所有資料 + rows = cursor.fetchall() + + # 初始化字典 + sing_bu_dict = {} + + # 從查詢結果中提取資料並將其整理成一個字典 + for row in rows: + sing_bu_dict[row[1]] = { + 'code': row[1], + 'ipa': row[2], + 'poj': row[3], + 'bp': row[4], + 'tl': row[5], + 'tps': row[6], + 'sni': row[7], + } + + return sing_bu_dict + + +def init_un_bu_dict(cursor): + # 執行 SQL 查詢 + cursor.execute("SELECT * FROM 韻母對照表") + + # 獲取所有資料 + rows = cursor.fetchall() + + # 初始化字典 + un_bu_dict = {} + + # 從查詢結果中提取資料並將其整理成一個字典 + for row in rows: + un_bu_dict[row[1]] = { + 'code': row[1], + 'ipa': row[2], + 'poj': row[3], + 'bp': row[4], + 'tl': row[5], + 'tps': row[6], + 'sni': row[7], + 'sni_su_ciok_sing': row[8], + 'sni_su_ho': int(row[9]), + } + + return un_bu_dict + + +# ========================================================== +# 自漢字的「注音碼」,分析出:聲母、韻母、調號 +# ========================================================== +def split_cu_im(cu_im): + sing_bu_pattern = re.compile(r"(b|ch|c|g|h|j|kh|k|l|m|ng|n|ph|p|s|th|t|Ø)") + result = [] + + sing_bu = sing_bu_pattern.match(cu_im).group() + un_bu = cu_im[len(sing_bu) : len(cu_im) - 1] + tiau = cu_im[len(cu_im) - 1] + + result += [sing_bu] + result += [un_bu] + result += [tiau] + return result + + +if __name__ == "__main__": + # sing_bu_dict = init_sing_bu_dict() + # sing_code = 'c' + + # sing_bu_tl = sing_bu_dict[sing_code]['tl'] + # assert sing_bu_tl == 'tsh', "轉換錯誤!" + + # sing_bu_ipa = sing_bu_dict[sing_code]['ipa'] + # assert sing_bu_ipa == 'ʦʰ', "轉換錯誤!" + + # sing_bu_poj = sing_bu_dict[sing_code]['poj'] + # assert sing_bu_poj == 'chh', "轉換錯誤!" + + # sing_bu_bp = sing_bu_dict[sing_code]['bp'] + # assert sing_bu_bp == 'c', "轉換錯誤!" + + # sing_bu_tps = sing_bu_dict[sing_code]['tps'] + # assert sing_bu_tps == 'ㄘ', "轉換錯誤!" + + # sing_bu_sni = sing_bu_dict[sing_code]['sni'] + # assert sing_bu_sni == '出', "轉換錯誤!" + + # #-------------------------------------------------- + # un_bu_dict = init_un_bu_dict() + # un_code = 'ee' + + # un_bu_tl = un_bu_dict[un_code]['tl'] + # assert un_bu_tl == 'ee', "轉換錯誤!" + + # un_bu_ipa = un_bu_dict[un_code]['ipa'] + # assert un_bu_ipa == 'ɛ', "轉換錯誤!" + + # un_bu_poj = un_bu_dict[un_code]['poj'] + # assert un_bu_poj == 'e', "轉換錯誤!" + + # un_bu_bp = un_bu_dict[un_code]['bp'] + # assert un_bu_bp == 'e', "轉換錯誤!" + + # un_bu_tps = un_bu_dict[un_code]['tps'] + # assert un_bu_tps == 'ㄝ', "轉換錯誤!" + + # un_bu_sni = un_bu_dict[un_code]['sni'] + # assert un_bu_sni == '嘉', "轉換錯誤!" + + #-------------------------------------------------- + # 受[siu2] + han_ji_piau_im = 'siu2' + result = split_cu_im(han_ji_piau_im) + print(result) + assert result == ['s', 'iu', '2'], "轉換錯誤!" + # assert result == ['s', 'iu', '3'], "轉換錯誤!" + + # 衣 [Øi1] + han_ji_piau_im = 'Øi1' + result = split_cu_im(han_ji_piau_im) + assert result == ['Ø', 'i', '1'], "轉換錯誤!" + + # 州 [ciu1] + han_ji_piau_im = 'ciu1' + result = split_cu_im(han_ji_piau_im) + assert result == ['c', 'iu', '1'], "轉換錯誤!" + + # 此 [chu2] + han_ji_piau_im = 'chi2' + result = split_cu_im(han_ji_piau_im) + assert result == ['ch', 'i', '2'], "轉換錯誤!" \ No newline at end of file diff --git "a/mod_\345\273\243\351\237\273_v5.py" "b/mod_\345\273\243\351\237\273_v5.py" new file mode 100644 index 0000000..eb83af1 --- /dev/null +++ "b/mod_\345\273\243\351\237\273_v5.py" @@ -0,0 +1,372 @@ +# v5 版 +import re +import sqlite3 + + +def connect_to_db_by_context_manager_decorator(db_path): + def connect_to_db(func): + def wrapper(*args, **kwargs): + # 創建數據庫連接 + conn = sqlite3.connect(db_path) + + # 創建一個游標 + cursor = conn.cursor() + + # 執行函數 + result = func(cursor, *args, **kwargs) + + # 關閉數據庫連接 + conn.close() + + return result + + return wrapper + + return connect_to_db + + +def connect_to_db(db_path): + # 創建數據庫連接 + conn = sqlite3.connect(db_path) + + # 創建一個游標 + cursor = conn.cursor() + + return conn, cursor + + +def connect_to_db2(db_path): + # 創建數據庫連接 + conn = sqlite3.connect(db_path) + + # 創建一個游標 + cursor = conn.cursor() # noqa: F841 + + return conn + + +def close_db_connection(conn): + # 關閉數據庫連接 + conn.close() + + +""" +用 `漢字` 查詢《廣韻》的標音 +""" +def han_ji_ca_piau_im(cursor, han_ji): + """ + 根據漢字查詢其讀音資訊。 若資料紀錄在`台羅聲調`欄位儲存值為空值(NULL) + ,則將其視為 0,因此可排在查詢結果的最後。 + + :param cursor: 數據庫游標 + :param han_ji: 欲查詢的漢字 + :return: 包含讀音資訊的字典列表 + + SELECT * + FROM 廣韻漢字庫 + WHERE 漢字 = ? + ORDER BY COALESCE(台羅聲調, 0) DESC; + """ + + query = """ + SELECT * + FROM 廣韻漢字庫 + WHERE 漢字 = ? + ORDER BY COALESCE(常用度, 0) DESC; + """ + cursor.execute(query, (han_ji,)) + results = cursor.fetchall() + + # 將結果轉換為字典列表 + fields = [ + '字號', '漢字', '標音', '常用度', '上字', '下字', '上字號', '聲母', '聲母標音', '七聲類', + '清濁', '發送收', '下字號', '韻母', '韻母標音', '韻目列號', '攝', '調', '目次', + '韻目', '等呼', '等', '呼', '廣韻調名', '台羅聲調', '字義識別號' + ] + return [dict(zip(fields, result)) for result in results] + + +def ca_siann_bu_piau_im(cursor, siann_bu): + """ + 根據聲母標音查詢其國際音標聲母和方音聲母。 + + :param cursor: 數據庫游標 + :param siann_bu: 欲查詢的聲母標音(台語音標) + :return: 包含國際音標聲母和方音聲母的字典列表 + + SELECT 國際音標聲母, 方音聲母 + FROM 聲母對照表 + WHERE 台語音標聲母 = ?; + """ + + query = """ + SELECT 國際音標聲母, 方音聲母 + FROM 聲母對照表 + WHERE 台語音標聲母 = ?; + """ + cursor.execute(query, (siann_bu,)) + results = cursor.fetchall() + + fields = ['國際音標聲母', '方音聲母'] + return [dict(zip(fields, result)) for result in results] + + +def ca_un_bu_piau_im(cursor, un_bu): + """ + 根據韻母標音查詢其國際音標韻母和方音韻母。 + + :param cursor: 數據庫游標 + :param un_bu: 欲查詢的韻母標音(台語音標) + :return: 包含國際音標韻母和方音韻母的字典列表 + + SELECT 國際音標韻母, 方音韻母 + FROM 韻母對照表 + WHERE 台語音標韻母 = ?; + """ + + query = """ + SELECT 國際音標韻母, 方音韻母 + FROM 韻母對照表 + WHERE 台語音標韻母 = ?; + """ + cursor.execute(query, (un_bu,)) + results = cursor.fetchall() + + fields = ['國際音標韻母', '方音韻母'] + return [dict(zip(fields, result)) for result in results] + + +def huan_ciat_ca_piau_im(cursor, siong_ji, ha_ji): + """ + 根據反切上字和下字查詢符合條件的所有漢字及其讀音資訊。 + + :param cursor: 數據庫游標 + :param siong_ji: 反切上字 + :param ha_ji: 反切下字 + :return: 包含讀音資訊的字典列表 + + SELECT * + FROM 廣韻漢字庫 + WHERE 上字 = ? AND 下字 = ?; + """ + + query = """ + SELECT * + FROM 廣韻漢字庫 + WHERE 上字 = ? AND 下字 = ?; + """ + cursor.execute(query, (siong_ji, ha_ji)) + results = cursor.fetchall() + + # 將結果轉換為字典列表 + fields = [ + '字號', '漢字', '標音', '上字', '下字', '上字號', '聲母', '聲母標音', '七聲類', + '清濁', '發送收', '下字號', '韻母', '韻母標音', '韻目列號', '攝', '調', '目次', + '韻目', '等呼', '等', '呼', '廣韻調名', '台羅聲調', '字義識別號' + ] + return [dict(zip(fields, result)) for result in results] + + +def TL_Tng_Zu_Im(siann_bu, un_bu, siann_tiau, cursor): + """ + 根據傳入的台語音標聲母、韻母、聲調,轉換成對應的方音符號 + :param siann_bu: 聲母 (台語音標) + :param un_bu: 韻母 (台語音標) + :param siann_tiau: 聲調 (台語音標中的數字) + :param cursor: 數據庫游標 + :return: 包含方音符號的字典 + """ + + # 查詢聲母表,將台語音標的聲母轉換成方音符號 + cursor.execute("SELECT 方音聲母 FROM 聲母對照表 WHERE 台語音標聲母 = ?", (siann_bu,)) + siann_bu_result = cursor.fetchone() + if siann_bu_result: + zu_im_siann_bu = siann_bu_result[0] # 取得方音符號 + else: + zu_im_siann_bu = '' # 無聲母的情況 + + # 查詢韻母表,將台語音標的韻母轉換成方音符號 + # cursor.execute("SELECT 方音符號 FROM 韻母表 WHERE 台語音標 = ?", (un_bu,)) + cursor.execute("SELECT 方音韻母 FROM 韻母對照表 WHERE 台語音標韻母 = ?", (un_bu,)) + un_bu_result = cursor.fetchone() + if un_bu_result: + zu_im_un_bu = un_bu_result[0] # 取得方音符號 + else: + zu_im_un_bu = '' + + # 查詢聲調表,將台語音標的聲調轉換成方音符號 + cursor.execute("SELECT 方音符號 FROM 聲調表 WHERE 台羅八聲調 = ?", (siann_tiau,)) + siann_tiau_result = cursor.fetchone() + if siann_tiau_result: + zu_im_siann_tiau = siann_tiau_result[0] # 取得方音符號 + else: + zu_im_siann_tiau = '' + + #======================================================================= + # 【聲母】校調 + # + # 齒間音【聲母】:ㄗ、ㄘ、ㄙ、ㆡ,若其後所接【韻母】之第一個符號亦為:ㄧ、ㆪ時,須變改 + # 為:ㄐ、ㄑ、ㄒ、ㆢ。 + #----------------------------------------------------------------------- + # 參考 RIME 輸入法如下規則: + # - xform/ㄗ(ㄧ|ㆪ)/ㄐ$1/ + # - xform/ㄘ(ㄧ|ㆪ)/ㄑ$1/ + # - xform/ㄙ(ㄧ|ㆪ)/ㄒ$1/ + # - xform/ㆡ(ㄧ|ㆪ)/ㆢ$1/ + #======================================================================= + + # 比對聲母是否為 ㄗ、ㄘ、ㄙ、ㆡ,且韻母的第一個符號是 ㄧ 或 ㆪ + if siann_bu == 'z' and (un_bu[0] == 'i' or un_bu == 'inn'): + zu_im_siann_bu = 'ㄐ' + elif siann_bu == 'c' and (un_bu[0] == 'i' or un_bu == 'inn'): + zu_im_siann_bu = 'ㄑ' + elif siann_bu == 's' and (un_bu[0] == 'i' or un_bu == 'inn'): + zu_im_siann_bu = 'ㄒ' + elif siann_bu == 'j' and (un_bu[0] == 'i' or un_bu == 'inn'): + zu_im_siann_bu = 'ㆢ' + + return { + '注音符號': f"{zu_im_siann_bu}{zu_im_un_bu}{zu_im_siann_tiau}", + '聲母': zu_im_siann_bu, + '韻母': zu_im_un_bu, + '聲調': zu_im_siann_tiau + } + + + +def Kong_Un_Tng_Tai_Loo(廣韻調名): + """ + 將【廣韻調名】轉換成【台羅聲調】號 + 清平(1)、清上(2)、清去(3)、清入(4) + 濁平(5)、濁上(6)、濁去(7)、濁入(8) + + :param 廣韻調名: 廣韻的調名 + :return: 對應的台羅聲調號 + """ + 調名對照 = { + "清平": 1, + "清上": 2, + "清去": 3, + "清入": 4, + "濁平": 5, + "濁上": 6, + "濁去": 7, + "濁入": 8 + } + return 調名對照.get(廣韻調名, None) + + +def Cu_Hong_Im_Hu_Ho(tai_lo_tiau_ho): + """ + 取方音符號:將【台羅調號】轉換成【方音符號調號】 + :param tai_lo_tiau_ho: 台羅調號 + :return: 對應的方音符號調號 + """ + 方音符號調號 = { + 1: '', + 2: 'ˋ', + 3: '˪', + 4: '', + 5: 'ˊ', + 6: 'ˋ', + 7: '˫', + 8: '˙' + } + return 方音符號調號.get(tai_lo_tiau_ho, None) + + +# ========================================================== +# 自「台語音標+」,分析出:聲母、韻母、聲調 +# ---------------------------------------------------------- +# 【台羅音標】到【台語音標】的轉換規則 +# tai_loo_to_tai_gi_mapping = { +# 'tsh': 'c', +# 'ts': 'z' +# } +# for tai_loo, tai_gi in tai_loo_to_tai_gi_mapping.items(): +# tai_gi_im = tai_gi_im.replace(tai_loo, tai_gi) +# ========================================================== +def split_zu_im(zu_im): + # 聲母相容性轉換處理(將 tsh 轉換為 c;將 ts 轉換為 z) + if zu_im.startswith("tsh"): + zu_im = zu_im.replace("tsh", "c", 1) # 將 tsh, ch 轉換為 c + elif zu_im.startswith("ts"): + zu_im = zu_im.replace("ts", "z", 1) # 將 ts, c 轉換為 z + + # 定義聲母的正規表示式,包括常見的聲母,並加入 Ø 表示無聲母 + siann_bu_pattern = re.compile(r"(b|c|z|g|h|j|kh|k|l|m(?!\d)|ng(?!\d)|n|ph|p|s|th|t|Ø)") + + # 韻母為 m 或 ng 這種情況的正規表示式 (m\d 或 ng\d) + un_bu_as_m_or_ng_pattern = re.compile(r"(m|ng)\d") + + result = [] + + # 首先檢查是否是 m 或 ng 當作韻母的特殊情況 + if un_bu_as_m_or_ng_pattern.match(zu_im): + siann_bu = "" # 沒有聲母 + un_bu = zu_im[:-1] # 韻母是 m 或 ng + tiau = zu_im[-1] # 聲調是最後一個字符 + else: + # 使用正規表示式來匹配聲母,包括 Ø 符號 + siann_bu_match = siann_bu_pattern.match(zu_im) + if siann_bu_match: + siann_bu = siann_bu_match.group() # 找到聲母或無聲母(Ø) + # 如果聲母是 Ø,將其轉換為空字串,並確保不影響 un_bu + if siann_bu == "Ø": + siann_bu = "" + un_bu = zu_im[1:-1] # 跳過 Ø 從第二個字符開始取韻母 + else: + un_bu = zu_im[len(siann_bu):-1] # 正常處理韻母部分 + else: + siann_bu = "" # 沒有匹配到聲母,聲母為空字串 + un_bu = zu_im[:-1] # 韻母是剩下的部分,去掉最後的聲調 + + tiau = zu_im[-1] # 最後一個字符是聲調 + + result += [siann_bu] + result += [un_bu] + result += [tiau] + return result + +# def split_zu_im(zu_im): +# # 聲母相容性轉換處理(將 tsh 轉換為 c;將 ts 轉換為 z) +# # zu_im = zu_im.replace("tsh", "c") # 將 tsh 轉換為 c +# # zu_im = zu_im.replace("ts", "z") # 將 ts 轉換為 z +# if zu_im.startswith("tsh") or zu_im.startswith("ch"): +# zu_im = zu_im.replace("tsh", "c", 1).replace("ch", "c", 1) # 將 tsh, ch 轉換為 c +# elif zu_im.startswith("ts") or zu_im.startswith("c"): +# zu_im = zu_im.replace("ts", "z", 1).replace("c", "z", 1) # 將 ts, c 轉換為 z + +# # 定義聲母的正規表示式,包括常見的聲母,但不包括 m 和 ng +# siann_bu_pattern = re.compile(r"(b|c|z|g|h|j|kh|k|l|m(?!\d)|ng(?!\d)|n|ph|p|s|th|t|Ø)") + +# # 韻母為 m 或 ng 這種情況的正規表示式 (m\d 或 ng\d) +# un_bu_as_m_or_ng_pattern = re.compile(r"(m|ng)\d") + +# result = [] + +# # 首先檢查是否是 m 或 ng 當作韻母的特殊情況 +# if un_bu_as_m_or_ng_pattern.match(zu_im): +# siann_bu = "" # 沒有聲母 +# un_bu = zu_im[:-1] # 韻母是 m 或 ng +# tiau = zu_im[-1] # 聲調是最後一個字符 +# else: +# # 使用正規表示式來匹配聲母 +# siann_bu_match = siann_bu_pattern.match(zu_im) +# if siann_bu_match: +# siann_bu = siann_bu_match.group() # 找到聲母 +# un_bu = zu_im[len(siann_bu):-1] # 韻母部分 +# else: +# siann_bu = "" # 沒有匹配到聲母,聲母為空字串 +# un_bu = zu_im[:-1] # 韻母是剩下的部分,去掉最後的聲調 + +# tiau = zu_im[-1] # 最後一個字符是聲調 + +# result += [siann_bu] +# result += [un_bu] +# result += [tiau] +# return result + +def dict_to_str(zu_im_hu_ho): + return f"{zu_im_hu_ho['聲母']}{zu_im_hu_ho['韻母']}{zu_im_hu_ho['聲調']}" + diff --git "a/mod_\346\250\231\351\237\263.py" "b/mod_\346\250\231\351\237\263.py" index b53502f..0164138 100644 --- "a/mod_\346\250\231\351\237\263.py" +++ "b/mod_\346\250\231\351\237\263.py" @@ -1,4 +1,18 @@ import re +import sqlite3 + + +# ========================================================= +# 判斷是否為標點符號的輔助函數 +# ========================================================= +def is_punctuation(char): + # 如果 char 是 None,直接返回 False + if char is None: + return False + + # 可以根據需要擴充此列表以判斷各種標點符號 + punctuation_marks = ",。!?;:、()「」『』《》……" + return char in punctuation_marks # ========================================================= @@ -198,3 +212,76 @@ def TLPA_Tng_Zap_Goo_Im(siann_bu, un_bu, siann_tiau, cursor): '韻母': zu_im_un_bu, '聲調': zu_im_siann_tiau } + + +def dict_to_str(zu_im_hu_ho): + return f"{zu_im_hu_ho['聲母']}{zu_im_hu_ho['韻母']}{zu_im_hu_ho['聲調']}" + + +def init_piau_im_dict(han_ji_khoo): + if han_ji_khoo == "河洛話": + db_name = 'Ho_Lok_Ue.db' + else: + db_name = 'Kong_Un.db' + + conn = sqlite3.connect(db_name) + cursor = conn.cursor() + + Sing_Bu_Dict = init_sing_bu_dict(cursor) + Un_Bu_Dict = init_un_bu_dict(cursor) + + conn.close() + + return Sing_Bu_Dict, Un_Bu_Dict + + +def init_sing_bu_dict(cursor): + # 執行 SQL 查詢 + cursor.execute("SELECT * FROM 聲母對照表") + + # 獲取所有資料 + rows = cursor.fetchall() + + # 初始化字典 + sing_bu_dict = {} + + # 從查詢結果中提取資料並將其整理成一個字典 + for row in rows: + sing_bu_dict[row[1]] = { + '國際音標': row[1], + '台語音標': row[2], + '台羅音標': row[3], + '白話字': row[4], + '閩拼方案': row[5], + '方音符號': row[6], + '十五音': row[7], + } + + return sing_bu_dict + + +def init_un_bu_dict(cursor): + # 執行 SQL 查詢 + cursor.execute("SELECT * FROM 韻母對照表") + + # 獲取所有資料 + rows = cursor.fetchall() + + # 初始化字典 + un_bu_dict = {} + + # 從查詢結果中提取資料並將其整理成一個字典 + for row in rows: + un_bu_dict[row[1]] = { + '國際音標': row[1], + '台語音標': row[2], + '台羅音標': row[3], + '白話字': row[4], + '閩拼方案': row[5], + '方音符號': row[6], + '十五音': row[7], + '十五音舒促聲': row[8], + '十五音序': int(row[9]), + } + + return un_bu_dict \ No newline at end of file diff --git "a/output6/\343\200\220\345\215\201\344\272\224\351\237\263\343\200\221\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221.xlsx" "b/output6/\343\200\220\345\215\201\344\272\224\351\237\263\343\200\221\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221.xlsx" new file mode 100644 index 0000000..53b3b4f Binary files /dev/null and "b/output6/\343\200\220\345\215\201\344\272\224\351\237\263\343\200\221\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221.xlsx" differ diff --git "a/output6/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221.xlsx" "b/output6/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221.xlsx" index f0bd50e..7701f5c 100644 Binary files "a/output6/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221.xlsx" and "b/output6/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221.xlsx" differ diff --git a/p502_TLPA_Cu_Im.py b/p502_TLPA_Cu_Im.py index c702969..56ce83e 100644 --- a/p502_TLPA_Cu_Im.py +++ b/p502_TLPA_Cu_Im.py @@ -6,7 +6,7 @@ import xlwings as xw from mod_file_access import open_excel_file -from mod_廣韻 import init_sing_bu_dict, init_un_bu_dict +from mod_廣韻_v3 import init_sing_bu_dict, init_un_bu_dict # ========================================================== # 設定輸出使用的注音方法 @@ -64,7 +64,7 @@ # un_bu_dict = cu_im.init_un_bu_dict() # except Exception as e: # print(e) - + #================================================================ # 雅俗通十五音(SNI:Nga-Siok-Thong) #================================================================ @@ -83,7 +83,7 @@ def SNI_piau_im(sing_bu, un_bu, tiau_ho): 5: "五", 7: "七", 8: "八", -} +} #================================================================ # 方音符號注音(TPS) @@ -156,7 +156,7 @@ def POJ_piau_im(sing_bu, un_bu, tiau_ho): siann = "" un = Un_Bu_Dict[un_bu]["poj"] piau_im = f"{siann}{un}" - + # 韻母為複元音 # pattern1 = r"(oai|oan|oah|oeh|ee|ei)" pattern1 = r"(oai|oan|oah|oeh)" @@ -233,13 +233,13 @@ def TL_piau_im(sing_bu, un_bu, tiau_ho): # piau_im = piau_im.replace(found, un_str) return piau_im - + #================================================================ # 閩拼(BP) # # 【調號標示規則】 # 當一個音節有多個字母時,調號得標示在響度最大的字母上面(通常在韻腹)。由規則可以判定確切的字母: -# +# # - 響度優先順序: a > oo > (e = o) > (i = u)〈低元音 > 高元音 > 無擦通音 > 擦音 > 塞音〉 # - 二合字母 iu 及 ui ,調號都標在後一個字母上;因為前一個字母是介音。 # - m 作韻腹時則標於字母 m 上。 @@ -332,7 +332,7 @@ def get_sheet_ready_to_work(wb, sheet_name_list): # ========================================================= def build_web_page(wb, target_sheet, cu_im_huat, div_class, rt_tag, sing_bu_dict, un_bu_dict): write_buffer = "" - + source_index = 1 # index for source sheet target_index = 1 # index for target sheet @@ -387,7 +387,7 @@ def build_web_page(wb, target_sheet, cu_im_huat, div_class, rt_tag, sing_bu_dict target_sheet.range("A" + str(target_index)).value = html_str target_index += 1 source_index += 1 - + write_buffer += (html_str + "\n") continue @@ -404,7 +404,7 @@ def build_web_page(wb, target_sheet, cu_im_huat, div_class, rt_tag, sing_bu_dict target_sheet.range("A" + str(target_index)).value = han_ji target_index += 1 source_index += 1 - + write_buffer += (han_ji + "\n") continue @@ -420,7 +420,7 @@ def build_web_page(wb, target_sheet, cu_im_huat, div_class, rt_tag, sing_bu_dict target_sheet.range("A" + str(target_index)).value = ruby_tag target_index += 1 source_index += 1 - + write_buffer += (ruby_tag + "\n") continue @@ -485,7 +485,7 @@ def build_web_page(wb, target_sheet, cu_im_huat, div_class, rt_tag, sing_bu_dict ruby_tag = f" {han_ji}{piau_im2}(<{rt_tag}>{piau_im})" target_sheet.range("A" + str(target_index)).value = ruby_tag - + write_buffer += (ruby_tag + "\n") # ========================================================= @@ -501,7 +501,7 @@ def build_web_page(wb, target_sheet, cu_im_huat, div_class, rt_tag, sing_bu_dict html_str = "

" target_sheet.range("A" + str(target_index)).value = html_str - write_buffer += html_str + write_buffer += html_str # 返回網頁輸出暫存區 return write_buffer @@ -539,7 +539,7 @@ def create_html_file(output_path, content, title='您的標題'): print(f"\n輸出網頁檔案:{output_path}") -def Iong_TLPA_Cu_Im(wb, sing_bu_dict, un_bu_dict): +def Iong_TLPA_Zu_Im(wb, sing_bu_dict, un_bu_dict): global source_sheet # 宣告 source_sheet 為全域變數 global source_sheet_name # 宣告 source_sheet_name 為全域變數 global end_of_source_row # 宣告 end_of_source_row 為全域變數 @@ -603,7 +603,7 @@ def Iong_TLPA_Cu_Im(wb, sing_bu_dict, un_bu_dict): # 輸出到網頁檔案 create_html_file(output_path, html_content, web_page_title) - + print(f"【{cu_im_piau_e_mia}】網頁製作完畢!") if __name__ == "__main__": @@ -632,8 +632,8 @@ def Iong_TLPA_Cu_Im(wb, sing_bu_dict, un_bu_dict): sing_bu = "s" un_bu = "i" tiau_ho = 5 - - piau_im = TPS_piau_im(sing_bu, un_bu, tiau_ho) + + piau_im = TPS_piau_im(sing_bu, un_bu, tiau_ho) print("測試方音符號注音:") print(f"han_ji = {han_ji}") print(f"sing_bu = {sing_bu}, un_bu = {un_bu}, tiau_ho = {tiau_ho}") @@ -643,7 +643,7 @@ def Iong_TLPA_Cu_Im(wb, sing_bu_dict, un_bu_dict): #===================================================================== # 雅俗通十五 #===================================================================== - piau_im = SNI_piau_im(sing_bu, un_bu, tiau_ho) + piau_im = SNI_piau_im(sing_bu, un_bu, tiau_ho) print("\n測試雅俗通十五音注音:") print(f"han_ji = {han_ji}") print(f"sing_bu = {sing_bu}, un_bu = {un_bu}, tiau_ho = {tiau_ho}") @@ -658,7 +658,7 @@ def Iong_TLPA_Cu_Im(wb, sing_bu_dict, un_bu_dict): un_bu = "i" tiau_ho = 7 - piau_im = BP_piau_im(sing_bu, un_bu, tiau_ho) + piau_im = BP_piau_im(sing_bu, un_bu, tiau_ho) print("\n測試閩拼注音:") print(f"han_ji = {han_ji}") print(f"sing_bu = {sing_bu}, un_bu = {un_bu}, tiau_ho = {tiau_ho}") @@ -673,7 +673,7 @@ def Iong_TLPA_Cu_Im(wb, sing_bu_dict, un_bu_dict): un_bu = "uan" tiau_ho = 2 - piau_im = POJ_piau_im(sing_bu, un_bu, tiau_ho) + piau_im = POJ_piau_im(sing_bu, un_bu, tiau_ho) print("\n測試白話字注音:") print(f"han_ji = {han_ji}") print(f"sing_bu = {sing_bu}, un_bu = {un_bu}, tiau_ho = {tiau_ho}") @@ -689,7 +689,7 @@ def Iong_TLPA_Cu_Im(wb, sing_bu_dict, un_bu_dict): un_bu = "uan" tiau_ho = 2 - piau_im = TL_piau_im(sing_bu, un_bu, tiau_ho) + piau_im = TL_piau_im(sing_bu, un_bu, tiau_ho) print("\n測試白話字注音:") print(f"han_ji = {han_ji}") print(f"sing_bu = {sing_bu}, un_bu = {un_bu}, tiau_ho = {tiau_ho}") @@ -701,7 +701,7 @@ def Iong_TLPA_Cu_Im(wb, sing_bu_dict, un_bu_dict): un_bu = "oo" tiau_ho = 5 - piau_im = TL_piau_im(sing_bu, un_bu, tiau_ho) + piau_im = TL_piau_im(sing_bu, un_bu, tiau_ho) print("\n測試白話字注音:") print(f"han_ji = {han_ji}") print(f"sing_bu = {sing_bu}, un_bu = {un_bu}, tiau_ho = {tiau_ho}") diff --git "a/p704_\346\274\242\345\255\227\344\273\245\345\215\201\344\272\224\351\237\263\346\250\231\346\263\250\351\237\263.py" "b/p704_\346\274\242\345\255\227\344\273\245\345\215\201\344\272\224\351\237\263\346\250\231\346\263\250\351\237\263.py" index 98c9721..7dce686 100644 --- "a/p704_\346\274\242\345\255\227\344\273\245\345\215\201\344\272\224\351\237\263\346\250\231\346\263\250\351\237\263.py" +++ "b/p704_\346\274\242\345\255\227\344\273\245\345\215\201\344\272\224\351\237\263\346\250\231\346\263\250\351\237\263.py" @@ -7,7 +7,7 @@ # 十五音標注音 -def zap_goo_im_piau_im(wb, sheet_name='十五音', cell='V3', hue_im="白話音", han_ji_khoo="河洛話", db_name='Ho_Lok_Ue.db', module_name='mod_標音', function_name='TLPA_Tng_Zap_Goo_Im'): +def han_ji_piau_im(wb, sheet_name='十五音', cell='V3', hue_im="白話音", han_ji_khoo="河洛話", db_name='Ho_Lok_Ue.db', module_name='mod_標音', function_name='TLPA_Tng_Zap_Goo_Im'): named_range = wb.names['顯示注音輸入'] named_range.refers_to_range.value = True @@ -36,7 +36,8 @@ def process_cell(row, col, char): cell_value = sheet.range((row, col)).value if not is_valid_han_ji(cell_value): - print(f"({row}, {col_name}) = 無效漢字或標音缺失") + # print(f"({row}, {col_name}) = 無效漢字或標音缺失") + print(f"({row}, {col_name}) = {cell_value}") return lo_ma_im_piau = sheet.range((row - 1, col)).value @@ -53,13 +54,15 @@ def process_cell(row, col, char): print(f"【台語音標】資料格式錯誤於({row - 1}, {col_name}): {e}") while index < total_length: + sheet.range((row, 1)).select() for col in range(start, end): if index >= total_length: break char = v3_value[index] if char == "\n": index += 1 - continue # 忽略換行符號 + row += 4 + break # 跳出內部 for 迴圈,繼續處理下一列 process_cell(row, col, char) index += 1 # 處理下一個漢字 diff --git a/p730_Tng_Sing_Bang_Iah.py b/p730_Tng_Sing_Bang_Iah.py index 00fe5ba..2059803 100644 --- a/p730_Tng_Sing_Bang_Iah.py +++ b/p730_Tng_Sing_Bang_Iah.py @@ -1,10 +1,90 @@ # Tng_Sing_Bang_Iah.py (轉成網頁) # 用途:將【漢字注音】工作表中的漢字、台語音標及台語注音符號,轉成 HTML 網頁格式。 import os +import sqlite3 import xlwings as xw from mod_file_access import get_named_value +from mod_標音 import ( + init_piau_im_dict, + init_sing_bu_dict, + init_un_bu_dict, + is_punctuation, + split_zu_im, +) + +# ========================================================== +# 注音法設定和共用變數 +# ========================================================== +zu_im_huat_list = { + "SNI": ["fifteen_yin", "rt", "十五音切語"], + "TPS": ["Piau_Im", "rt", "方音符號注音"], + "POJ": ["pin_yin", "rt", "白話字拼音"], + "TL": ["pin_yin", "rt", "台羅拼音"], + "BP": ["pin_yin", "rt", "閩拼標音"], + "TLPA_Plus": ["pin_yin", "rt", "台羅改良式"], + "DBL": ["Siang_Pai", "rtc", "雙排注音"], +} + +TONE_MARKS = { + "十五音": { + 1: "一", + 2: "二", + 3: "三", + 4: "四", + 5: "五", + 7: "七", + 8: "八" + }, + "方音符號": { + 1: "", + 2: "ˋ", + 3: "˪", + 4: "", + 5: "ˊ", + 7: "˫", + 8: "\u02D9" + }, + "閩拼方案": { + 1: "\u0304", + 2: "\u0341", + 3: "\u030C", + 5: "\u0300", + 6: "\u0302", + 7: "\u0304", + 8: "\u0341" + }, + "台羅拼音": { + 1: "", + 2: "\u0301", + 3: "\u0300", + 4: "", + 5: "\u0302", + 6: "\u030C", + 7: "\u0304", + 8: "\u030D" + } +} + + +# def choose_piau_im_method(zu_im_huat, sing_bu, un_bu, tiau_ho): +# """選擇並執行對應的注音方法""" +# if zu_im_huat == "SNI": +# return SNI_piau_im(sing_bu, un_bu, tiau_ho) +# elif zu_im_huat == "POJ": +# return POJ_piau_im(sing_bu, un_bu, tiau_ho) +# elif zu_im_huat == "TL": +# return TL_piau_im(sing_bu, un_bu, tiau_ho) +# elif zu_im_huat == "BP": +# return BP_piau_im(sing_bu, un_bu, tiau_ho) +# elif zu_im_huat == "TPS": +# return TPS_piau_im(sing_bu, un_bu, tiau_ho) +# elif zu_im_huat == "TLPA_Plus": +# siann = Sing_Bu_Dict[sing_bu]["code"] or "" +# un = Un_Bu_Dict[un_bu]["code"] +# return f"{siann}{un}{tiau_ho}" +# return "" def create_html_file(output_path, content, title='您的標題'): @@ -55,23 +135,10 @@ def put_picture(wb, source_sheet_name): return html_str -# ========================================================= -# 判斷是否為標點符號的輔助函數 -# ========================================================= -def is_punctuation(char): - # 如果 char 是 None,直接返回 False - if char is None: - return False - - # 可以根據需要擴充此列表以判斷各種標點符號 - punctuation_marks = ",。!?;:、()「」『』《》……" - return char in punctuation_marks - - # ========================================================= # 依據指定的【注音方法】,輸出含 Ruby Tags 之 HTML 網頁 # ========================================================= -def build_web_page(wb, sheet, source_chars, total_length, page_type='含頁頭'): +def build_web_page(wb, sheet, source_chars, total_length, page_type='含頁頭', piau_im_huat='方音符號'): write_buffer = "" # ========================================================= @@ -126,28 +193,42 @@ def build_web_page(wb, sheet, source_chars, total_length, page_type='含頁頭') # 在 Console 顯示目前處理的漢字,以便使用者可知目前進度 print(f"({row}, {col_name}) = {han_ji}") else: + # 取得漢字的【台語音標】 lo_ma_im_piau = sheet.range((row - 1, col)).value # 取得漢字的台語音標 - zu_im_hu_ho = sheet.range((row + 1, col)).value # 取得漢字的台語注音符號 - - # 處理拼音或注音是 None 的情況 + # 當儲存格寫入之資料為 None 情況時之處理作法:給予空字串 lo_ma_im_piau = lo_ma_im_piau if lo_ma_im_piau is not None else "" - zu_im_hu_ho = zu_im_hu_ho if zu_im_hu_ho is not None else "" + + # zu_im_hu_ho = sheet.range((row + 1, col)).value # 取得漢字的台語注音符號 + zu_im_list = split_zu_im(lo_ma_im_piau) + if zu_im_list[0] == "" or zu_im_list[0] == None: + sian_bu = "Ø" + else: + sian_bu = zu_im_list[0] + sian_bu = Sing_Bu_Dict[sian_bu][piau_im_huat] + un_bu = Un_Bu_Dict[zu_im_list[1]][piau_im_huat] + if piau_im_huat == "方音符號": + tiau_ho = TONE_MARKS[piau_im_huat][int(zu_im_list[2])] + elif piau_im_huat == "十五音": + tiau_ho = TONE_MARKS[piau_im_huat][int(zu_im_list[2])] + elif piau_im_huat == "閩拼方案": + tiau_ho = TONE_MARKS[piau_im_huat][int(zu_im_list[2])] + elif piau_im_huat == "台羅拼音" or piau_im_huat == "白話字": + tiau_ho = TONE_MARKS[piau_im_huat][int(zu_im_list[2])] + else: + tiau_ho = zu_im_list[2] + + if piau_im_huat == "十五音": + han_ji_piau_im = f'{un_bu}{tiau_ho}{sian_bu}' + else: + han_ji_piau_im = f'{sian_bu}{un_bu}{tiau_ho}' # 在 Console 顯示目前處理的漢字,以便使用者可知目前進度 - print(f"({row}, {col_name}) = {han_ji} [{lo_ma_im_piau}] 【{zu_im_hu_ho}】") + print(f"({row}, {col_name}) = {han_ji} [{lo_ma_im_piau}] 【{han_ji_piau_im}】") # ========================================================= # 將已注音之漢字加入【漢字注音表】 # ========================================================= - # ruby_tag = f""" - # - # {han_ji} - # {lo_ma_im_piau} - # ( - # {zu_im_hu_ho} - # ) - # - # """ - ruby_tag = f"{han_ji}{lo_ma_im_piau}{zu_im_hu_ho}\n" + ruby_tag = f"{han_ji}{lo_ma_im_piau}{han_ji_piau_im}\n" + write_buffer += ruby_tag index += 1 else: @@ -171,13 +252,24 @@ def tng_sing_bang_iah(wb, sheet_name='漢字注音', cell='V3', page_type='含 global source_sheet # 宣告 source_sheet 為全域變數 global source_sheet_name # 宣告 source_sheet_name 為全域變數 global total_length # 宣告 end_of_source_row 為全域變數 + global Sing_Bu_Dict, Un_Bu_Dict + # ------------------------------------------------------------------------- + # 連接指定資料庫 + # ------------------------------------------------------------------------- + han_ji_khoo = get_named_value(wb, '漢字庫', '河洛話') + Sing_Bu_Dict, Un_Bu_Dict = init_piau_im_dict(han_ji_khoo) + + # ------------------------------------------------------------------------- # 選擇指定的工作表 + # ------------------------------------------------------------------------- sheet = wb.sheets[sheet_name] # 選擇工作表 sheet.activate() # 將「漢字注音」工作表設為作用中工作表 sheet.range('A1').select() # 將 A1 儲存格設為作用儲存格 source_sheet_name = sheet.name + han_ji_piau_im_huat = wb.names['標音方法'].refers_to_range.value + # ----------------------------------------------------- # 產生 HTML 網頁用文字檔 # ----------------------------------------------------- @@ -189,7 +281,7 @@ def tng_sing_bang_iah(wb, sheet_name='漢字注音', cell='V3', page_type='含 siann_lui = get_named_value(wb, '語音類型', '文讀音') output_dir = 'docs' # output_file = f"{title}_{siann_lui}.html" - output_file = f"{title}.html" + output_file = f"{title}_{han_ji_piau_im_huat}.html" output_path = os.path.join(output_dir, output_file) # 開啟文字檔,準備寫入網頁內容 @@ -205,7 +297,9 @@ def tng_sing_bang_iah(wb, sheet_name='漢字注音', cell='V3', page_type='含 # 自「漢字注音表」,製作各種注音法之 HTML 網頁 # ========================================================== print(f"開始製作【漢字注音】網頁!") - html_content = build_web_page(wb, sheet, source_chars, total_length, page_type) + html_content = build_web_page( + wb, sheet, source_chars, total_length, page_type, han_ji_piau_im_huat + ) # 輸出到網頁檔案 create_html_file(output_path, html_content, web_page_title)