diff --git a/.vscode/launch.json b/.vscode/launch.json index 57ec557..5af4541 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -4,6 +4,13 @@ // 如需詳細資訊,請瀏覽: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ + { + "name": "p740_Phua_Im_Ji", + "type": "debugpy", + "request": "launch", + "program": "p740_Phua_Im_Ji.py", + "console": "integratedTerminal", + }, { "name": "csv01_更新漢字表資料", "type": "debugpy", diff --git a/Ho_Lok_Ue.db b/Ho_Lok_Ue.db index b4d2597..9589021 100644 Binary files a/Ho_Lok_Ue.db and b/Ho_Lok_Ue.db differ diff --git a/Phua_Im_Ji.json b/Phua_Im_Ji.json new file mode 100644 index 0000000..8565dcd --- /dev/null +++ b/Phua_Im_Ji.json @@ -0,0 +1,4 @@ +{ + "行": "ㄒㄧㄥˊ", + "重": "ㄓㄨㄥˋ" +} \ No newline at end of file diff --git "a/a701_\344\275\234\346\245\255\344\270\255\346\264\273\351\240\201\346\252\224\345\241\253\345\205\245\346\274\242\345\255\227.py" "b/a701_\344\275\234\346\245\255\344\270\255\346\264\273\351\240\201\346\252\224\345\241\253\345\205\245\346\274\242\345\255\227.py" index 62ebdde..c47373e 100644 --- "a/a701_\344\275\234\346\245\255\344\270\255\346\264\273\351\240\201\346\252\224\345\241\253\345\205\245\346\274\242\345\255\227.py" +++ "b/a701_\344\275\234\346\245\255\344\270\255\346\264\273\351\240\201\346\252\224\345\241\253\345\205\245\346\274\242\345\255\227.py" @@ -5,6 +5,7 @@ import xlwings as xw from mod_file_access import get_han_ji_khoo, get_sound_type, save_as_new_file +from p701_Clear_Cells import clear_han_ji_kap_piau_im from p702_Ca_Han_Ji_Thak_Im import ca_han_ji_thak_im from p709_reset_han_ji_cells import reset_han_ji_cells from p710_thiam_han_ji import fill_hanji_in_cells @@ -37,6 +38,9 @@ print("無法執行,可能原因:(1) 未指定輸入檔案;(2) 未找到作用中的 Excel 工作簿") sys.exit(2) +# 將儲存格已填入之漢字及標音清除 +clear_han_ji_kap_piau_im(wb) + # 將待注音的【漢字儲存格】,文字顏色重設為黑色(自動 RGB: 0, 0, 0);填漢顏色重設為無填滿 reset_han_ji_cells(wb) diff --git a/custom_pronunciation.json b/custom_pronunciation.json new file mode 100644 index 0000000..8565dcd --- /dev/null +++ b/custom_pronunciation.json @@ -0,0 +1,4 @@ +{ + "行": "ㄒㄧㄥˊ", + "重": "ㄓㄨㄥˋ" +} \ No newline at end of file diff --git a/data.pkl b/data.pkl new file mode 100644 index 0000000..44a263f Binary files /dev/null and b/data.pkl differ diff --git "a/docs/\343\200\212\350\210\254\350\213\245\346\263\242\347\276\205\350\234\234\345\244\232\345\277\203\347\266\223\343\200\213_\345\215\201\344\272\224\351\237\263.html" "b/docs/\343\200\212\350\210\254\350\213\245\346\263\242\347\276\205\350\234\234\345\244\232\345\277\203\347\266\223\343\200\213_\345\215\201\344\272\224\351\237\263.html" new file mode 100644 index 0000000..1d577e0 --- /dev/null +++ "b/docs/\343\200\212\350\210\254\350\213\245\346\263\242\347\276\205\350\234\234\345\244\232\345\277\203\347\266\223\343\200\213_\345\215\201\344\272\224\351\237\263.html" @@ -0,0 +1,91 @@ + + + + + 《般若波羅蜜多心經》 + + + + + 《般若波羅蜜多心經》 +
+ + 《般若波羅蜜多心經》 + +
+ +

+ 求觀一(ㄍㄨㄢ) 曾艍七(ㄗㄨ˫) 曾皆七(ㄗㄞ˫) 頗沽一(ㄆㆦ) 時干四(ㄙㄚㆵ) + 喜經五(ㄏㄧㄥˊ) 出金一(ㄑㄧㆬ) 邊官一(ㄅㄨㆩ) 入恭八(ㆢㄧㆦㆻ˙) 頗高一(ㄆㄜ) 柳高五(ㄌㄜˊ) 門巾八(ㆠㄧㆵ˙) 地高一(ㄉㄜ) 時居五(ㄒㄧˊ) + 曾嬌三(ㄐㄧㄠ˪) 求堅三(ㄍㄧㄢ˪) 雅沽二(ㄫㆦˋ) 英君三(ㄨㄣ˪) 求皆一(ㄍㄞ) 去公一(ㄎㆲ) + 地沽七(ㄉㆦ˫) 英巾四(ㄧㆵ) 出伽三(ㄘㆤ˪) 去沽二(ㄎㆦˋ) 英嘉四(ㄝㆷ) +

+

+ 時迦二(ㄒㄧㄚˋ) 柳居七(ㄌㄧ˫) 曾艍二(ㄗㄨˋ) + 時經四(ㄒㄧㆻ) 邊君四(ㄅㄨㆵ) 英居七(ㄧ˫) 去公一(ㄎㆲ) + 去公一(ㄎㆲ) 邊君四(ㄅㄨㆵ) 英居七(ㄧ˫) 時經四(ㄒㄧㆻ) + 時經四(ㄒㄧㆻ) 曾經四(ㄐㄧㆻ) 時居七(ㄒㄧ˫) 去公一(ㄎㆲ) + 去公一(ㄎㆲ) 曾經四(ㄐㄧㆻ) 時居七(ㄒㄧ˫) 時經四(ㄒㄧㆻ) + 時丩七(ㄒㄧㄨ˫) 時恭二(ㄒㄧㆲˋ) 喜經五(ㄏㄧㄥˊ) 時經四(ㄒㄧㆻ) + 英經八(ㄧㆻ˙) 喜公八(ㄏㆦㆻ˙) 入艍五(ㆡㄨˊ) 時居七(ㄒㄧ˫) +

+

+ 時迦二(ㄒㄧㄚˋ) 柳居七(ㄌㄧ˫) 曾艍二(ㄗㄨˋ) + 時居七(ㄒㄧ˫) 曾艍一(ㄗㄨ) 喜觀四(ㄏㄨㄚㆵ) 去公一(ㄎㆲ) 時恭三(ㄒㄧㆲ˪) + 邊君四(ㄅㄨㆵ) 時經一(ㄒㄧㄥ) 邊君四(ㄅㄨㆵ) 門堅八(ㆠㄧㄚㆵ˙) + 邊君四(ㄅㄨㆵ) 求沽二(ㄍㆦˋ) 邊君四(ㄅㄨㆵ) 曾經七(ㄐㄧㄥ˫) + 邊君四(ㄅㄨㆵ) 曾經一(ㄐㄧㄥ) 邊君四(ㄅㄨㆵ) 求兼二(ㄍㄧㆰˋ) + 時居七(ㄒㄧ˫) 求沽三(ㄍㆦ˪) 去公一(ㄎㆲ) 地恭一(ㄉㄧㆲ) 門艍五(ㆠㄨˊ) 時經四(ㄒㄧㆻ) + 門艍五(ㆠㄨˊ) 時丩七(ㄒㄧㄨ˫) 時恭二(ㄒㄧㆲˋ) 喜經五(ㄏㄧㄥˊ) 時經四(ㄒㄧㆻ) + 門艍五(ㆠㄨˊ) 語干二(ㆣㄢˋ) 喜梔七(ㄏㆪ˫) 頗梔七(ㄆㆪ˫) 時堅八(ㄒㄧㄚㆵ˙) 時巾一(ㄒㄧㄣ) 英居三(ㄧ˪) + 門艍五(ㆠㄨˊ) 時經四(ㄒㄧㆻ) 時經一(ㄒㄧㄥ) 喜恭一(ㄏㄧㆲ) 門居七(ㆠㄧ˫) 出恭四(ㄑㄧㆦㆻ) 喜觀四(ㄏㄨㄚㆵ) +

+

+ 門艍五(ㆠㄨˊ) 語干二(ㆣㄢˋ) 求皆三(ㄍㄞ˪) + 耐皆二(ㄋㄞˋ) 曾居三(ㄐㄧ˪) 門艍五(ㆠㄨˊ) 英居三(ㄧ˪) 時經四(ㄒㄧㆻ) 求皆三(ㄍㄞ˪) + 門艍五(ㆠㄨˊ) 門艍五(ㆠㄨˊ) 門經五(ㆠㄧㄥˊ) + 英經八(ㄧㆻ˙) 門艍五(ㆠㄨˊ) 門艍五(ㆠㄨˊ) 門經五(ㆠㄧㄥˊ) 曾巾七(ㄐㄧㄣ˫) + 耐皆二(ㄋㄞˋ) 曾居三(ㄐㄧ˪) 門艍五(ㆠㄨˊ) 柳高二(ㄌㄜˋ) 時艍二(ㄙㄨˋ) + 英經八(ㄧㆻ˙) 門艍五(ㆠㄨˊ) 柳高二(ㄌㄜˋ) 時艍二(ㄙㄨˋ) 曾巾七(ㄐㄧㄣ˫) +

+

+ 門艍五(ㆠㄨˊ) 去沽二(ㄎㆦˋ) 曾金八(ㄐㄧㆴ˙) 門堅八(ㆠㄧㄚㆵ˙) 地高七(ㄉㄜ˫) + 門艍五(ㆠㄨˊ) 地居三(ㄉㄧ˪) + 英經八(ㄧㆻ˙) 門艍五(ㆠㄨˊ) 地經四(ㄉㄧㆻ) + 英居二(ㄧˋ) 門艍五(ㆠㄨˊ) 時沽二(ㄙㆦˋ) 地經四(ㄉㄧㆻ) 求沽三(ㄍㆦ˪) + 頗沽一(ㄆㆦ) 他伽五(ㄊㆤˊ) 時干四(ㄙㄚㆵ) 地高一(ㄉㄜ) + 英居一() 邊官一(ㄅㄨㆩ) 入恭八(ㆢㄧㆦㆻ˙) 頗高一(ㄆㄜ) 柳高五(ㄌㄜˊ) 門巾八(ㆠㄧㆵ˙) 地高一(ㄉㄜ) 求沽三(ㄍㆦ˪) + 時金一(ㄒㄧㆬ) 門艍五(ㆠㄨˊ) 求瓜三(ㄍㄨㄚ˪) 語皆七(ㆣㄞ˫) + 門艍五(ㆠㄨˊ) 求瓜三(ㄍㄨㄚ˪) 語皆七(ㆣㄞ˫) 求沽三(ㄍㆦ˪) + 門艍五(ㆠㄨˊ) 英丩二(ㄧㄨˋ) 去恭二(ㄎㄧㆲˋ) 邊沽三(ㄅㆦ˪) + 英觀二(ㄨㄢˋ) 柳居七(ㄌㄧ˫) 地堅一(ㄉㄧㄢ) 地高三(ㄉㄜ˪) + 門江七(ㆠㄤ˫) 時恭二(ㄒㄧㆲˋ) + 求丩三(ㄍㄧㄨ˪) 求經三(ㄍㄧㄥ˪) 柳兼四(ㄌㄧㄚㆴ) 邊觀五(ㄅㄨㄢˊ) +

+

+ 時甘一(ㄙㆰ) 時伽三(ㄙㆤ˪) 曾艍一(ㄗㄨ) 喜君八(ㄏㄨㆵ˙) + 英居一() 邊官一(ㄅㄨㆩ) 入恭八(ㆢㄧㆦㆻ˙) 頗高一(ㄆㄜ) 柳高五(ㄌㄜˊ) 門巾八(ㆠㄧㆵ˙) 地高一(ㄉㄜ) 求沽三(ㄍㆦ˪) + 地經四(ㄉㄧㆻ) 英膠一() 柳沽七(ㄌㆦ˫) 地高一(ㄉㄜ) 柳高五(ㄌㄜˊ) 時甘一(ㄙㆰ) 門嬌二(ㆠㄧㄠˋ) 時甘一(ㄙㆰ) 頗沽一(ㄆㆦ) 他伽五(ㄊㆤˊ) +

+

+ 求沽三(ㄍㆦ˪) 地居一(ㄉㄧ) 邊官一(ㄅㄨㆩ) 入恭八(ㆢㄧㆦㆻ˙) 頗高一(ㄆㄜ) 柳高五(ㄌㄜˊ) 門巾八(ㆠㄧㆵ˙) 地高一(ㄉㄜ) + 時居七(ㄒㄧ˫) 地皆七(ㄉㄞ˫) 時巾五(ㄒㄧㄣˊ) 曾丩三(ㄐㄧㄨ˪) + 時居七(ㄒㄧ˫) 地皆七(ㄉㄞ˫) 門經五(ㆠㄧㄥˊ) 曾丩三(ㄐㄧㄨ˪) + 時居七(ㄒㄧ˫) 門艍五(ㆠㄨˊ) 時姜七(ㄒㄧㄤ˫) 曾丩三(ㄐㄧㄨ˪) + 時居七(ㄒㄧ˫) 門艍五(ㆠㄨˊ) 地經二(ㄉㄧㄥˋ) 地經二(ㄉㄧㄥˋ) 曾丩三(ㄐㄧㄨ˪) + 柳經五(ㄌㄧㄥˊ) 地艍五(ㄉㄨˊ) 英巾四(ㄧㆵ) 出伽三(ㄘㆤ˪) 去沽二(ㄎㆦˋ) + 曾巾一(ㄐㄧㄣ) 時巾八(ㄒㄧㆵ˙) 邊君四(ㄅㄨㆵ) 喜居一(ㄏㄧ) +

+

+ 求沽三(ㄍㆦ˪) 時觀四(ㄙㄨㄚㆵ) 邊官一(ㄅㄨㆩ) 入恭八(ㆢㄧㆦㆻ˙) 頗高一(ㄆㄜ) 柳高五(ㄌㄜˊ) 門巾八(ㆠㄧㆵ˙) 地高一(ㄉㄜ) 曾丩三(ㄐㄧㄨ˪) + 曾經四(ㄐㄧㆻ) 時觀四(ㄙㄨㄚㆵ) 曾丩三(ㄐㄧㄨ˪) 英觀八(ㄨㄚㆵ˙) + 求堅四(ㄍㄧㄚㆵ) 地伽三(ㄉㆤ˪) + 求堅四(ㄍㄧㄚㆵ) 地伽三(ㄉㆤ˪) + 頗高一(ㄆㄜ) 柳高五(ㄌㄜˊ) 求堅四(ㄍㄧㄚㆵ) 地伽三(ㄉㆤ˪) + 頗高一(ㄆㄜ) 柳高五(ㄌㄜˊ) 曾經一(ㄐㄧㄥ) 求堅四(ㄍㄧㄚㆵ) 地伽三(ㄉㆤ˪) + 頗沽一(ㄆㆦ) 他伽五(ㄊㆤˊ) 時干四(ㄙㄚㆵ) 邊高五(ㄅㄜˊ) 英高一() +

+ + + \ No newline at end of file diff --git "a/mod_\346\250\231\351\237\263.py" "b/mod_\346\250\231\351\237\263.py" index b58b229..4079391 100644 --- "a/mod_\346\250\231\351\237\263.py" +++ "b/mod_\346\250\231\351\237\263.py" @@ -139,7 +139,7 @@ def split_hong_im_hu_ho(hong_im_hu_ho): return [sheng_mu, yun_mu, str(tiau_hao)] -def choose_piau_im_method(piau_im, zu_im_huat, siann_bu, un_bu, tiau_ho): +def tng_uann_han_ji_piau_im(piau_im, zu_im_huat, siann_bu, un_bu, tiau_ho): """選擇並執行對應的注音方法""" if zu_im_huat == "雅俗通": return piau_im.NST_piau_im(siann_bu, un_bu, tiau_ho) @@ -169,7 +169,7 @@ def tlpa_tng_han_ji_piau_im(piau_im, piau_im_huat, tai_gi_im_piau): if siann_bu == "" or siann_bu == None: siann_bu = "Ø" - han_ji_piau_im = choose_piau_im_method( + han_ji_piau_im = tng_uann_han_ji_piau_im( piau_im, piau_im_huat, siann_bu, @@ -188,7 +188,7 @@ def is_punctuation(char): return False # 可以根據需要擴充此列表以判斷各種標點符號 - punctuation_marks = ",。!?;:、()「」『』《》……" + punctuation_marks = ",。!!?;:、()「」『』《》……" return char in punctuation_marks diff --git "a/output7/\343\200\220\346\262\263\346\264\233\346\226\207\350\256\200\346\263\250\351\237\263\343\200\221\343\200\212\350\210\254\350\213\245\346\263\242\347\276\205\350\234\234\345\244\232\345\277\203\347\266\223\343\200\213.xlsx" "b/output7/\343\200\220\346\262\263\346\264\233\346\226\207\350\256\200\346\263\250\351\237\263\343\200\221\343\200\212\350\210\254\350\213\245\346\263\242\347\276\205\350\234\234\345\244\232\345\277\203\347\266\223\343\200\213.xlsx" index 0b4552a..6fe3b44 100644 Binary files "a/output7/\343\200\220\346\262\263\346\264\233\346\226\207\350\256\200\346\263\250\351\237\263\343\200\221\343\200\212\350\210\254\350\213\245\346\263\242\347\276\205\350\234\234\345\244\232\345\277\203\347\266\223\343\200\213.xlsx" and "b/output7/\343\200\220\346\262\263\346\264\233\346\226\207\350\256\200\346\263\250\351\237\263\343\200\221\343\200\212\350\210\254\350\213\245\346\263\242\347\276\205\350\234\234\345\244\232\345\277\203\347\266\223\343\200\213.xlsx" differ diff --git a/p701_Clear_Cells.py b/p701_Clear_Cells.py index 97bae05..c2b0e33 100644 --- a/p701_Clear_Cells.py +++ b/p701_Clear_Cells.py @@ -2,7 +2,21 @@ import xlwings as xw -def clear_hanji_in_cells(wb, sheet_name='漢字注音', cell='V3'): +def clear_han_ji_kap_piau_im(wb, sheet_name='漢字注音'): + sheet = wb.sheets[sheet_name] # 選擇工作表 + sheet.activate() # 將「漢字注音」工作表設為作用中工作表 + sheet.range('A1').select() # 將 A1 儲存格設為作用儲存格 + + total_rows = wb.names['每頁總列數'].refers_to_range.value + cells_per_row = 4 + end_of_rows = int((total_rows * cells_per_row ) + 2) + cells_range = f'D3:R{end_of_rows}' + + sheet.range(cells_range).clear_contents() # 清除 C3:R{end_of_row} 範圍的內容 + + + +def clear_hanji_in_cells(wb, sheet_name='漢字注音', source_cell='V3', clear_source=False): # 選擇指定的工作表 sheet = wb.sheets[sheet_name] @@ -45,4 +59,6 @@ def clear_hanji_in_cells(wb, sheet_name='漢字注音', cell='V3'): # ========================================================================= # (2) 清除原先已填入的漢字 # ========================================================================= - sheet.range("V3").value = "" + if clear_source: + sheet.range(source_cell).value = "" + print(f"清空原先的漢字:{source_cell}") diff --git a/p702_Ca_Han_Ji_Thak_Im.py b/p702_Ca_Han_Ji_Thak_Im.py index cf640f6..bedd7dd 100644 --- a/p702_Ca_Han_Ji_Thak_Im.py +++ b/p702_Ca_Han_Ji_Thak_Im.py @@ -9,7 +9,9 @@ from mod_標音 import split_hong_im_hu_ho # 分解漢字標音 from mod_標音 import split_tai_gi_im_piau # 分解台語音標 from mod_標音 import tlpa_tng_han_ji_piau_im # 台語音標轉漢字標音 +from mod_標音 import tng_uann_han_ji_piau_im # 台語音標轉台語音標 from mod_標音 import PiauIm +from p740_Phua_Im_Ji import PhuaImJi # ========================================================== # 注音法設定和共用變數 @@ -43,12 +45,50 @@ def choose_piau_im_method(piau_im, zu_im_huat, siann_bu, un_bu, tiau_ho): return f"{siann}{un}{tiau_ho}" return "" +def cu_siann_un_tiau(result, han_ji_khoo, piau_im, piau_im_huat): + """查詢【漢字庫】取得之【查找結果】,將之切分:聲、韻、調""" + if han_ji_khoo == "河洛話": + #----------------------------------------------------------------- + # 【白話音】:依《河洛話漢字庫》標注【台語音標】和【方音符號】 + #----------------------------------------------------------------- + # 將【台語音標】分解為【聲母】、【韻母】、【聲調】 + siann_bu = result[0]['聲母'] + un_bu = result[0]['韻母'] + tiau_ho = result[0]['聲調'] + if tiau_ho == "6": + # 若【聲調】為【6】,則將【聲調】改為【7】 + tiau_ho = "7" + else: + #----------------------------------------------------------------- + # 【文讀音】:依《廣韻字庫》標注【台語音標】和【方音符號】 + #----------------------------------------------------------------- + siann_bu, un_bu, tiau_ho = split_tai_gi_im_piau(result[0]['標音']) + if siann_bu == "" or siann_bu == None: + siann_bu = "ø" + + + # 將【聲母】、【韻母】、【聲調】,合併成【台語音標】 + # tai_gi_im_piau = siann_bu + un_bu + tiau_ho + tai_gi_im_piau = ''.join([siann_bu, un_bu, tiau_ho]) + + # 標音法為:【十五音】或【雅俗通】,且【聲母】為空值,則將【聲母】設為【ø】 + if (piau_im_huat == "十五音" or piau_im_huat == "雅俗通") and (siann_bu == "" or siann_bu == None): + siann_bu = "ø" + han_ji_piau_im = tng_uann_han_ji_piau_im( + piau_im, + piau_im_huat, + siann_bu, + un_bu, + tiau_ho + ) + return tai_gi_im_piau, han_ji_piau_im def ca_han_ji_thak_im(wb, sheet_name='漢字注音', cell='V3', hue_im="白話音", han_ji_khoo="河洛話", db_name='Ho_Lok_Ue.db', module_name='mod_河洛話', function_name='han_ji_ca_piau_im'): # 初始化 PiauIm 類別,産生標音物件 piau_im = PiauIm(han_ji_khoo=han_ji_khoo) piau_im_huat = wb.names['標音方法'].refers_to_range.value # piau_im_huat = '方音符號' + phua_im_ji = PhuaImJi() # 顯示「已輸入之拼音字母及注音符號」 named_range = wb.names['顯示注音輸入'] @@ -116,7 +156,7 @@ def ca_han_ji_thak_im(wb, sheet_name='漢字注音', cell='V3', hue_im="白話 han_ji = cell_value manual_input = sheet.range((row-2, col)).value - if manual_input: + if manual_input: # 若【手動輸入】的欄位有輸入 if '〔' in manual_input and '〕' in manual_input: # 將人工輸入的〔台語音標〕轉換成【方音符號】 im_piau = manual_input.split('〔')[1].split('〕')[0] @@ -151,76 +191,47 @@ def ca_han_ji_thak_im(wb, sheet_name='漢字注音', cell='V3', hue_im="白話 tai_gi_im_piau=tai_gi_im_piau ) + # 將人工輸入的【台語音標】置入【破音字庫】Dict + phua_im_ji.ka_phua_im_ji(han_ji, tai_gi_im_piau) + sheet.range((row - 1, col)).value = tai_gi_im_piau sheet.range((row + 1, col)).value = han_ji_piau_im + print(f"({row}, {col_name}) = {han_ji} [{tai_gi_im_piau}] 【{han_ji_piau_im}】") else: - result = han_ji_ca_piau_im(cursor=cursor, han_ji=han_ji, hue_im=hue_im) - - if result: - if han_ji_khoo == "河洛話": - #----------------------------------------------------------------- - # 【白話音】:依《河洛話漢字庫》標注【台語音標】和【方音符號】 - #----------------------------------------------------------------- - # 將【台語音標】分解為【聲母】、【韻母】、【聲調】 - siann_bu = result[0]['聲母'] - un_bu = result[0]['韻母'] - tiau_ho = result[0]['聲調'] - # if siann_bu == "" or siann_bu == None: - # siann_bu = "Ø" - - if tiau_ho == "6": - # 若【聲調】為【6】,則將【聲調】改為【7】 - tiau_ho = "7" - - # 將【聲母】、【韻母】、【聲調】,合併成【台語音標】 - # tai_gi_im_piau = siann_bu + un_bu + tiau_ho - tai_gi_im_piau = ''.join([siann_bu, un_bu, tiau_ho]) - - # 依使用者指定之【標音方法】,將【台語音標】轉換成其所需之【漢字標音】 - # han_ji_piau_im = tlpa_tng_han_ji_piau_im( - # piau_im=piau_im, - # piau_im_huat=piau_im_huat, - # tai_gi_im_piau=tai_gi_im_piau - # ) - - zu_im_list = split_tai_gi_im_piau(tai_gi_im_piau) - if zu_im_list[0] == "" or zu_im_list[0] == None: - siann_bu = "Ø" - else: - siann_bu = zu_im_list[0] - - han_ji_piau_im = choose_piau_im_method( - piau_im, - piau_im_huat, - siann_bu, - zu_im_list[1], - zu_im_list[2] - ) + """無人工輸入則自動查找""" + # 查找【破音字庫】,確認是否有此漢字 + han_ji_u_piau_im = False + found = phua_im_ji.ca_phua_im_ji(han_ji) + if found: # 若【破音字庫】有此漢字 + siann_bu, un_bu, tiau_ho = split_tai_gi_im_piau(found) + tai_gi_im_piau = siann_bu + un_bu + tiau_ho + han_ji_piau_im = tng_uann_han_ji_piau_im( + piau_im, + piau_im_huat, + siann_bu, + un_bu, + tiau_ho + ) + han_ji_u_piau_im = True + else: # 若【破音字庫】無此漢字,則在資料庫中查找 + result = han_ji_ca_piau_im(cursor=cursor, han_ji=han_ji, hue_im=hue_im) + if not result: + msg = f"【{cell_value}】查無此字!" else: - #----------------------------------------------------------------- - # 【文讀音】:依《廣韻字庫》標注【台語音標】和【方音符號】 - #----------------------------------------------------------------- - siann_bu, un_bu, tiau_ho = split_tai_gi_im_piau(result[0]['標音']) - - # 將【台語音標】分解為【聲母】、【韻母】、【聲調】 - if siann_bu == "" or siann_bu == None: - siann_bu = "Ø" - tai_gi_im_piau = siann_bu + un_bu + tiau_ho - - # 依使用者指定之【標音方法】,將【台語音標】轉換成其所需之【漢字標音】 - han_ji_piau_im = tlpa_tng_han_ji_piau_im( + tai_gi_im_piau, han_ji_piau_im = cu_siann_un_tiau( + result=result, + han_ji_khoo=han_ji_khoo, piau_im=piau_im, - piau_im_huat=piau_im_huat, - tai_gi_im_piau=tai_gi_im_piau + piau_im_huat=piau_im_huat ) + han_ji_u_piau_im = True + + if han_ji_u_piau_im: sheet.range((row - 1, col)).value = tai_gi_im_piau sheet.range((row + 1, col)).value = han_ji_piau_im + print(f"({row}, {col_name}) = {han_ji} [{tai_gi_im_piau}] 【{han_ji_piau_im}】") else: - msg = f"【{cell_value}】查無此字!" - if tai_gi_im_piau and han_ji_piau_im: - print(f"({row}, {col_name}) = {han_ji} [{tai_gi_im_piau}] 【{han_ji_piau_im}】") - else: - print(f"({row}, {col_name}) = {msg}") + print(f"({row}, {col_name}) = {msg}") index += 1 diff --git a/p730_Tng_Sing_Bang_Iah.py b/p730_Tng_Sing_Bang_Iah.py index 5fab06c..a9419aa 100644 --- a/p730_Tng_Sing_Bang_Iah.py +++ b/p730_Tng_Sing_Bang_Iah.py @@ -88,11 +88,12 @@ def tng_uann_piau_im(piau_im, zu_im_huat, siann_bu, un_bu, tiau_ho): return f"{siann}{un}{tiau_ho}" return "" -def concat_ruby_tag(wb, piau_im, zu_im_huat, han_ji, tai_gi_im_piau): + +def concat_ruby_tag(wb, piau_im, han_ji, tai_gi_im_piau): """將漢字、台語音標及台語注音符號,合併成一個 Ruby Tag""" zu_im_list = split_tai_gi_im_piau(tai_gi_im_piau) if zu_im_list[0] == "" or zu_im_list[0] == None: - siann_bu = "Ø" + siann_bu = "ø" else: siann_bu = zu_im_list[0] @@ -263,16 +264,14 @@ def build_web_page(wb, sheet, source_chars, total_length, page_type='含頁頭', # ========================================================= # 將已注音之漢字加入【漢字注音表】 # ========================================================= - # 在 Console 顯示目前處理的漢字,以便使用者可知目前進度 - print(f"({row}, {col_name}) = {han_ji} [{tai_gi_im_piau}]") - ruby_tag = concat_ruby_tag( wb=wb, piau_im=piau_im, # 注音法物件 - zu_im_huat=piau_im_huat, han_ji=han_ji, tai_gi_im_piau=tai_gi_im_piau ) + # 在 Console 顯示目前處理的漢字,以便使用者可知目前進度 + print(f"({row}, {col_name}) = {han_ji} [{tai_gi_im_piau}]") write_buffer += ruby_tag index += 1 diff --git a/p740_Phua_Im_Ji.py b/p740_Phua_Im_Ji.py new file mode 100644 index 0000000..cf445fa --- /dev/null +++ b/p740_Phua_Im_Ji.py @@ -0,0 +1,139 @@ +# p740_Phua_Im_Ji.py v0.0.0.1 + +import json +import pickle + + +class PhuaImJi: + """ + 注音管理器,用於管理漢字與注音對應關係。 + """ + + def __init__(self, ji_tian_name="Phua_Im_Ji.json"): + # 破音字典存放漢字與注音 + self.phua_im_ji_tian = {} + self.Ji_Tian_Name = ji_tian_name + + + def ka_phua_im_ji(self, han_ji, piau_im): + """ + 將【漢字】與【注音】加入破音字典。 + + 參數: + - han_ji: str,單一漢字。 + - piau_im: str,注音符號。 + """ + if len(han_ji) != 1: + raise ValueError("輸入的 char 必須是一個單一漢字。") + self.phua_im_ji_tian[han_ji] = piau_im + print(f"已將 {han_ji} 的注音「{piau_im}」加入破音字典。") + + + def ca_phua_im_ji(self, han_ji): + """ + 查找漢字是否存在注音,返回【注音】字串或 None。 + + 參數: + - han_ji: str,單一漢字。 + + 返回: + - str 或 None:若存在於破音字典則返回注音,否則返回 None。 + """ + return self.phua_im_ji_tian.get(han_ji, None) + + + def save_to_file(self): + """ + 將破音字典以純文字 JSON 格式存入檔案。 + """ + file_path = self.Ji_Tian_Name + with open(file_path, 'w', encoding='utf-8') as f: + json.dump(self.phua_im_ji_tian, f, ensure_ascii=False, indent=4) + print(f"破音字典已儲存至 {file_path}") + + + def load_from_file(self): + """ + 從 JSON 格式檔案讀取破音字典。 + """ + file_path = self.Ji_Tian_Name + with open(file_path, 'r', encoding='utf-8') as f: + self.phua_im_ji_tian = json.load(f) + print(f"已從 {file_path} 載入破音字典") + + + def dump_phua_im_ji_tian(self): + """ + 在螢幕上輸出破音字典的內容,以純文字格式顯示。 + """ + if not self.phua_im_ji_tian: + print("破音字典為空。") + else: + print("破音字典內容如下:") + print("{") + for han_ji, piau_im in self.phua_im_ji_tian.items(): + print(f" '{han_ji}': '{piau_im}',") + print("}") + + + def save_to_bin_file(self, file_path): + """ + 將破音字典存入檔案。 + """ + with open(file_path, 'wb') as f: + pickle.dump(self.phua_im_ji_tian, f) + print(f"破音字典已儲存至 {file_path}") + + + def load_from_bin_file(self, file_path): + """ + 從檔案讀取破音字典。 + """ + with open(file_path, 'rb') as f: + self.phua_im_ji_tian = pickle.load(f) + print(f"已從 {file_path} 載入破音字典") + + +# 單元測試 +if __name__ == "__main__": + import pickle + + # phua_im_ji = PhuaImJi() + phua_im_ji = PhuaImJi('tmp.json') + + # 手動加入破音 + phua_im_ji.ka_phua_im_ji("行", "ㄒㄧㄥˊ") + phua_im_ji.ka_phua_im_ji("重", "ㄓㄨㄥˋ") + + #========================================================================== + + # 儲存成 JSON 純文字檔案 + phua_im_ji.save_to_file() + + # 清空內部資料結構,模擬重新載入 + phua_im_ji.phua_im_ji_tian.clear() + + # 從 JSON 檔案讀取 + phua_im_ji.load_from_file() + + # 在螢幕上輸出破音字典 + phua_im_ji.dump_phua_im_ji_tian() + + # 查詢注音 + print(phua_im_ji.ca_phua_im_ji("行")) # 返回 "ㄒㄧㄥˊ" + print(phua_im_ji.ca_phua_im_ji("重")) # 返回 "ㄓㄨㄥˋ" + print(phua_im_ji.ca_phua_im_ji("新")) # 返回 None + + #========================================================================== + # BIN 字典資料 + data = {"行": "ㄒㄧㄥˊ", "重": "ㄓㄨㄥˋ"} + + # 儲存至檔案 + with open("data.pkl", "wb") as f: + pickle.dump(data, f) + print("資料已儲存至 data.pkl") + + # 從檔案讀取 + with open("data.pkl", "rb") as f: + loaded_data = pickle.load(f) + print("已載入資料:", loaded_data) \ No newline at end of file diff --git a/tmp.json b/tmp.json new file mode 100644 index 0000000..8565dcd --- /dev/null +++ b/tmp.json @@ -0,0 +1,4 @@ +{ + "行": "ㄒㄧㄥˊ", + "重": "ㄓㄨㄥˋ" +} \ No newline at end of file