From c5dd6c20ed8fb00d4c49bedda4c3a4905c67f462 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=85=E6=AD=A3=E4=B8=AD?= Date: Mon, 13 Jan 2025 14:16:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E3=80=90=E4=BA=BA=E5=B7=A5?= =?UTF-8?q?=E6=89=8B=E5=8B=95=E6=9B=B4=E6=AD=A3=E6=BC=A2=E5=AD=97=E6=A8=99?= =?UTF-8?q?=E9=9F=B3=E4=BD=9C=E6=A5=AD=E6=B5=81=E7=A8=8B=E3=80=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/launch.json | 7 + ...42\345\255\227\346\250\231\351\237\263.py" | 247 +++++++++++++++++- ...42\345\255\227\346\250\231\351\237\263.py" | 117 ++------- mod_excel_access.py | 10 + "mod_\346\250\231\351\237\263.py" | 6 +- p702_Ca_Han_Ji_Thak_Im.py | 8 +- process_log.txt | 113 ++++++++ 7 files changed, 394 insertions(+), 114 deletions(-) rename a000.py => "a706_\346\211\213\345\213\225\346\233\264\346\255\243\346\274\242\345\255\227\346\250\231\351\237\263.py" (62%) diff --git a/.vscode/launch.json b/.vscode/launch.json index de958f1..084317a 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -67,6 +67,13 @@ "program": "a705_依漢字注音工作表內容更新待注音漢字.py", "console": "integratedTerminal", }, + { + "name": "a706_手動更正漢字標音", + "type": "debugpy", + "request": "launch", + "program": "a706_手動更正漢字標音.py", + "console": "integratedTerminal", + }, { "name": "a710_批次式漢字標音及網頁製作", "type": "debugpy", diff --git "a/a702_\346\237\245\346\211\276\345\217\212\345\241\253\345\205\245\346\274\242\345\255\227\346\250\231\351\237\263.py" "b/a702_\346\237\245\346\211\276\345\217\212\345\241\253\345\205\245\346\274\242\345\255\227\346\250\231\351\237\263.py" index f24b945..3e9a963 100644 --- "a/a702_\346\237\245\346\211\276\345\217\212\345\241\253\345\205\245\346\274\242\345\255\227\346\250\231\351\237\263.py" +++ "b/a702_\346\237\245\346\211\276\345\217\212\345\241\253\345\205\245\346\274\242\345\255\227\346\250\231\351\237\263.py" @@ -3,6 +3,7 @@ # ========================================================================= import logging import os +import sqlite3 import sys from pathlib import Path @@ -11,8 +12,21 @@ from dotenv import load_dotenv # 載入自訂模組 -from mod_file_access import get_han_ji_khoo, get_sound_type, save_as_new_file -from p702_Ca_Han_Ji_Thak_Im import ca_han_ji_thak_im +from mod_excel_access import ( + get_han_ji_khoo, + get_tai_gi_by_han_ji, + get_value_by_name, + maintain_han_ji_koo, +) +from mod_file_access import get_sound_type, load_module_function, save_as_new_file +from mod_標音 import PiauIm # 漢字標音物件 +from mod_標音 import hong_im_tng_tai_gi_im_piau # 方音符號轉台語音標 +from mod_標音 import is_punctuation # 是否為標點符號 +from mod_標音 import siann_un_tiau_tng_piau_im # 声、韻、調轉台語音標 +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 p740_Phua_Im_Ji import PhuaImJi # 破音字物件 # ========================================================================= # 載入環境變數 @@ -49,19 +63,240 @@ def logging_process_step(msg): # ========================================================================= # 作業程序 # ========================================================================= +def ca_ji_kiat_ko_tng_piau_im(result, han_ji_khoo: str, piau_im: PiauIm, piau_im_huat: str): + """查字結果出標音:查詢【漢字庫】取得之【查找結果】,將之切分:聲、韻、調""" + 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 = siann_un_tiau_tng_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', ue_im_lui_piat="白話音", han_ji_khoo="河洛話", db_name='Ho_Lok_Ue.db', module_name='mod_河洛話', function_name='han_ji_ca_piau_im'): + """查漢字讀音:依【漢字】查找【台語音標】,並依指定之【標音方法】輸出【漢字標音】""" + # 動態載入查找函數 + han_ji_ca_piau_im = load_module_function(module_name, function_name) + + # 連接指定資料庫 + conn = sqlite3.connect(db_name) + cursor = conn.cursor() + + # 建置 PiauIm 物件,供作漢字拼音轉換作業 + han_ji_khoo = get_value_by_name(wb=wb, name='漢字庫') + piau_im = PiauIm(han_ji_khoo=han_ji_khoo) + piau_im_huat = get_value_by_name(wb=wb, name='標音方法') + + # 建置自動及人工漢字標音字庫工作表:(1)【漢字庫工作表】;(2)【人工標音字庫工作表】 + han_ji_koo_sheet = get_han_ji_khoo(wb=wb, sheet_name='漢字庫') + jin_kang_piau_im = get_han_ji_khoo(wb=wb, sheet_name='人工標音字庫') + + # 指定【漢字注音】工作表為【作用工作表】 + sheet = wb.sheets[sheet_name] + sheet.activate() + + # 設定起始及結束的【列】位址(【第5列】、【第9列】、【第13列】等列) + TOTAL_LINES = int(wb.names['每頁總列數'].refers_to_range.value) + ROWS_PER_LINE = 4 + start_row = 5 + end_row = start_row + (TOTAL_LINES * ROWS_PER_LINE) + line = 1 + + # 設定起始及結束的【欄】位址(【D欄=4】到【R欄=18】) + CHARS_PER_ROW = int(wb.names['每列總字數'].refers_to_range.value) + start_col = 4 + end_col = start_col + CHARS_PER_ROW + + # 逐列處理作業 + EOF = False + for row in range(start_row, end_row, ROWS_PER_LINE): + # 若已到【結尾】或【超過總行數】,則跳出迴圈 + if EOF or line > TOTAL_LINES: + break + + # 設定【作用儲存格】為列首 + Two_Empty_Cells = 0 + sheet.range((row, 1)).select() + + # 逐欄取出漢字處理 + for col in range(start_col, end_col): + # 取得當前儲存格內含值 + han_ji_u_piau_im = False + msg = "" + cell_value = sheet.range((row, col)).value + + if cell_value == 'φ': + EOF = True + msg = "【文字終結】" + elif cell_value == '\n': + msg = "【換行】" + elif cell_value == None: + if Two_Empty_Cells == 0: + Two_Empty_Cells += 1 + elif Two_Empty_Cells == 1: + EOF = True + msg = "【缺空】" # 表【儲存格】未填入任何字/符,不同於【空白】字元 + else: + # 若不為【標點符號】,則以【漢字】處理 + if is_punctuation(cell_value): + msg = f"{cell_value}" + else: + # 查找漢字讀音 + han_ji = cell_value + + # 依據【人工標音】欄是否有輸入,決定【漢字標音】之處理方式 + manual_input = sheet.range((row-2, col)).value + + if manual_input: # 若有人工輸入之處理作業 + if '〔' in manual_input and '〕' in manual_input: + # 將人工輸入的〔台語音標〕轉換成【方音符號】 + im_piau = manual_input.split('〔')[1].split('〕')[0] + tai_gi_im_piau = im_piau + # 依使用者指定之【標音方法】,將【台語音標】轉換成其所需之【漢字標音】 + 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 + ) + han_ji_u_piau_im = True + elif '【' in manual_input and '】' in manual_input: + # 將人工輸入的【方音符號】轉換成【台語音標】 + han_ji_piau_im = manual_input.split('【')[1].split('】')[0] + siann, un, tiau = split_hong_im_hu_ho(han_ji_piau_im) + # 依使用者指定之【標音方法】,將【台語音標】轉換成其所需之【漢字標音】 + tai_gi_im_piau = hong_im_tng_tai_gi_im_piau( + siann=siann, + un=un, + tiau=tiau, + cursor=cursor, + )['台語音標'] + han_ji_u_piau_im = True + else: + # 將人工輸入的【台語音標】,解構為【聲母】、【韻母】、【聲調】 + tai_gi_im_piau = manual_input + # 依指定之【標音方法】,將【台語音標】轉換成其所需之【漢字標音】 + 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 + ) + han_ji_u_piau_im = True + + # 將人工輸入的【台語音標】置入【破音字庫】Dict + maintain_han_ji_koo(sheet=jin_kang_piau_im, + han_ji=han_ji, + tai_gi=tai_gi_im_piau, + show_msg=False) + else: # 無人工輸入,則自【漢字庫】查找作業 + # 查找【人工標音字庫】,確認是否有此漢字 + tai_gi_im_piau = get_tai_gi_by_han_ji(jin_kang_piau_im, han_ji) + found = True if tai_gi_im_piau else False + # 若【破音字庫】有此漢字 + if found: + siann_bu, un_bu, tiau_ho = split_tai_gi_im_piau(tai_gi_im_piau) + tai_gi_im_piau = siann_bu + un_bu + tiau_ho + han_ji_piau_im = siann_un_tiau_tng_piau_im( + piau_im, + piau_im_huat, + siann_bu, + un_bu, + tiau_ho + ) + han_ji_u_piau_im = True + sheet.range((row, col)).font.color = (255, 0, 0) # 將文字顏色設為【紅色】 + sheet.range((row, col)).color = (255, 255, 0) # 將底色設為【黄色】 + print(f"漢字:【{han_ji}】之注音【{tai_gi_im_piau}】取自【人工注音字典】。") + # 若【人工標音字庫】無此漢字,則在資料庫中查找 + else: + result = han_ji_ca_piau_im(cursor=cursor, + han_ji=han_ji, + ue_im_lui_piat=ue_im_lui_piat) + if not result: + msg = f"【{han_ji}】查無此字!" + else: + # 依【漢字庫】查找結果,輸出【台語音標】和【漢字標音】 + tai_gi_im_piau, han_ji_piau_im = ca_ji_kiat_ko_tng_piau_im( + result=result, + han_ji_khoo=han_ji_khoo, + piau_im=piau_im, + piau_im_huat=piau_im_huat + ) + han_ji_u_piau_im = True + + if han_ji_u_piau_im: + maintain_han_ji_koo(sheet=han_ji_koo_sheet, + han_ji=han_ji, + tai_gi=tai_gi_im_piau, + show_msg=False) + sheet.range((row - 1, col)).value = tai_gi_im_piau + sheet.range((row + 1, col)).value = han_ji_piau_im + msg = f"{han_ji}: [{tai_gi_im_piau}] /【{han_ji_piau_im}】" + + # 顯示處理進度 + col_name = xw.utils.col_name(col) # 取得欄位名稱 + print(f"({row}, {col_name}) = {msg}") + + # 若讀到【換行】或【文字終結】,跳出逐欄取字迴圈 + if msg == "【換行】" or EOF: + break + + # 每當處理一行 15 個漢字後,亦換到下一行 + print("\n") + line += 1 + row += 4 + + #---------------------------------------------------------------------- + # 作業處理用的 row 迴圈與 col 迴圈己終結 + #---------------------------------------------------------------------- + # 關閉資料庫連線 + conn.close() + + # 作業結束前處理 + wb.save() + print("已完成【台語音標】和【漢字標音】標注工作。") + return EXIT_CODE_SUCCESS + + def process(wb): # ------------------------------------------------------------------------------ - # 指定【作業中工作表】 + # 指定【作業工作表】為【漢字注音】工作表 # ------------------------------------------------------------------------------ sheet = wb.sheets["漢字注音"] # 選擇工作表 sheet.activate() # 將「漢字注音」工作表設為作用中工作表 - sheet.range("A1").select() # 將 A1 儲存格設為作用儲存格 # ------------------------------------------------------------------------------ # 為漢字查找讀音,漢字上方填:【台語音標】;漢字下方填使用者指定之【漢字標音】 # ------------------------------------------------------------------------------ - type = get_sound_type(wb) # 取得【語音類型】,判別使用【白話音】或【文讀音】何者。 - han_ji_khoo = get_han_ji_khoo(wb) + type = get_value_by_name(wb, '語音類型') # 取得【語音類型】,判別使用【白話音】或【文讀音】何者。 + han_ji_khoo = get_value_by_name(wb, '漢字庫') if han_ji_khoo == "河洛話" and type == "白話音": ca_han_ji_thak_im( wb=wb, diff --git a/a000.py "b/a706_\346\211\213\345\213\225\346\233\264\346\255\243\346\274\242\345\255\227\346\250\231\351\237\263.py" similarity index 62% rename from a000.py rename to "a706_\346\211\213\345\213\225\346\233\264\346\255\243\346\274\242\345\255\227\346\250\231\351\237\263.py" index da9a889..abdd62b 100644 --- a/a000.py +++ "b/a706_\346\211\213\345\213\225\346\233\264\346\255\243\346\274\242\345\255\227\346\250\231\351\237\263.py" @@ -59,94 +59,7 @@ def logging_process_step(msg): # ========================================================================= # 本程式主要處理作業程序 # ========================================================================= -def ca_han_ji_thak_im(wb, sheet_name='漢字注音', cell='V3', ue_im_lui_piat="白話音", han_ji_khoo="河洛話", db_name='Ho_Lok_Ue.db', module_name='mod_河洛話', function_name='han_ji_ca_piau_im'): - """ - 將 Excel 工作表中指定區域的漢字取出,儲存為一個純文字檔。 - """ - # 取得【漢字庫】工作表物件 - han_ji_koo_sheet = get_han_ji_khoo(wb) - - # 選擇工作表 - sheet = wb.sheets['漢字注音'] - sheet.activate() - #-------------------------------------------------------------------------- - # 自【env】設定工作表,取得處理作業所需參數 - #-------------------------------------------------------------------------- - - # 設定起始及結束的【列】位址(【第5列】、【第9列】、【第13列】等列) - TOTAL_LINES = int(wb.names['每頁總列數'].refers_to_range.value) - ROWS_PER_LINE = 4 - start_row = 5 - end_row = start_row + (TOTAL_LINES * ROWS_PER_LINE) - line = 1 - - # 設定起始及結束的【欄】位址(【D欄=4】到【R欄=18】) - CHARS_PER_ROW = int(wb.names['每列總字數'].refers_to_range.value) - start_col = 4 - end_col = start_col + CHARS_PER_ROW - - #-------------------------------------------------------------------------- - # 作業處理:逐列取出漢字,組合成純文字檔 - #-------------------------------------------------------------------------- - logging_process_step(f"開始【處理作業】...") - han_ji_text = "" - EOF = False - - # 逐列處理作業 - for row in range(start_row, end_row, ROWS_PER_LINE): - # 若已到【結尾】或【超過總行數】,則跳出迴圈 - if EOF or line > TOTAL_LINES: - break - - # 設定【作用儲存格】為列首 - Two_Empty_Cells = 0 - sheet.range((row, 1)).select() - - # 逐欄取出漢字處理 - for col in range(start_col, end_col): - # 取得當前儲存格內含值 - cell_value = sheet.range((row, col)).value - if cell_value == 'φ': # 讀到【結尾標示】 - EOF = True - msg = "【文字終結】" - elif cell_value == '\n': # 讀到【換行標示】 - han_ji_text += '\n' - msg = "【換行】" - elif cell_value == None: # 讀到【空白】 - if Two_Empty_Cells == 0: - Two_Empty_Cells += 1 - elif Two_Empty_Cells == 1: - EOF = True - msg = "【缺空】" # 表【儲存格】未填入任何字/符,不同於【空白】字元 - else: # 讀到:漢字或標點符號 - han_ji_text += cell_value - msg = cell_value - if not is_punctuation(cell_value): - han_ji = cell_value - tai_gi = sheet.range((row - 1, col)).value - maintain_han_ji_koo(sheet=han_ji_koo_sheet, - han_ji=han_ji, tai_gi=tai_gi, - show_msg=False) - - # 顯示處理進度 - col_name = xw.utils.col_name(col) # 取得欄位名稱 - print(f"({row}, {col_name}) = {msg}") - - # 若讀到【換行】或【文字終結】,跳出逐欄取字迴圈 - if msg == "【換行】" or EOF: - break - - # 每當處理一行 15 個漢字後,亦換到下一行 - print("\n") - line += 1 - row += 4 - - # 作業結束前處理 - logging_process_step(f"完成【作業程序】:查找漢字注音...") - return EXIT_CODE_SUCCESS - - -def update_han_ji_piau_im(wb, han_ji_koo_sheet_name='漢字庫', han_ji_piau_im_sheet_name='漢字注音'): +def update_han_ji_piau_im(wb, han_ji_khoo_sheet_name='漢字庫', jin_kang_piau_im_sheet_name='人工標音字庫'): """ 更新【漢字注音】表中【台語音標】儲存格的內容,依據【漢字庫】中的【校正】欄位進行更新。 wb: Excel 活頁簿物件 @@ -154,11 +67,12 @@ def update_han_ji_piau_im(wb, han_ji_koo_sheet_name='漢字庫', han_ji_piau_im_ han_ji_zhu_yin_sheet_name: 【漢字注音】工作表名稱 """ # 取得工作表 - han_ji_koo_sheet = wb.sheets[han_ji_koo_sheet_name] - han_ji_piau_im_sheet = wb.sheets[han_ji_piau_im_sheet_name] + han_ji_piau_im_sheet = wb.sheets['漢字注音'] + han_ji_khoo_sheet = wb.sheets[han_ji_khoo_sheet_name] + jin_kang_piau_im_sheet = wb.sheets[jin_kang_piau_im_sheet_name] # 取得【漢字庫】表格範圍的所有資料 - data = han_ji_koo_sheet.range("A2").expand("table").value + data = han_ji_khoo_sheet.range("A2").expand("table").value if data is None: print("【漢字庫】工作表無資料") @@ -203,19 +117,25 @@ def update_han_ji_piau_im(wb, han_ji_koo_sheet_name='漢字庫', han_ji_piau_im_ _, corrected_tai_gi, total_count = han_ji_dict[han_ji] tai_gi_cell = han_ji_piau_im_sheet.range((row - 1, col)) original_tai_gi = tai_gi_cell.value or "" + jin_kang_piau_im_cell = han_ji_piau_im_sheet.range((row + 2, col)) + jin_kang_piau_im = jin_kang_piau_im_cell.value or "" # 更新多次,直到總數用完 if corrected_tai_gi != original_tai_gi and total_count > 0: - tai_gi_cell.value = corrected_tai_gi # 更新儲存格 - han_ji_cell.color = (255, 255, 0) # 將底色設為【黄色】 - han_ji_cell.font.color = (255, 0, 0) # 將文字顏色設為【紅色】 + if jin_kang_piau_im: + # 若【人工標音】已有標音,則不進行更新 + msg = f"({row}, {xw.utils.col_name(col)}) = {han_ji},已有人工標音【{jin_kang_piau_im}】,故無更新" + else: + tai_gi_cell.value = corrected_tai_gi # 更新儲存格 + han_ji_cell.color = (255, 255, 0) # 將底色設為【黄色】 + han_ji_cell.font.color = (255, 0, 0) # 將文字顏色設為【紅色】 + msg = f"({row}, {xw.utils.col_name(col)}) = {han_ji},台語音標由【{original_tai_gi}】改為【{corrected_tai_gi}】" - msg = f"({row}, {xw.utils.col_name(col)}) = {han_ji},台語音標由【{original_tai_gi}】改為【{corrected_tai_gi}】" print(msg) total_count -= 1 # 減少剩餘更新次數 # 更新完畢後,減少【漢字庫】的總數 - han_ji_koo_sheet.range(f"C{row + 1}").value = total_count + han_ji_khoo_sheet.range(f"C{row + 1}").value = total_count if total_count == 0: print(f"漢字【{han_ji}】的更新次數已用完") @@ -227,11 +147,6 @@ def update_han_ji_piau_im(wb, han_ji_koo_sheet_name='漢字庫', han_ji_piau_im_ def process(wb): - # return_code = ca_han_ji_thak_im(wb) - # if return_code != EXIT_CODE_SUCCESS: - # logging_process_step("處理作業失敗,過程中出錯!") - # return return_code - return_code = update_han_ji_piau_im(wb) if return_code != EXIT_CODE_SUCCESS: logging_process_step("處理作業失敗,過程中出錯!") diff --git a/mod_excel_access.py b/mod_excel_access.py index 553c9f7..a10c2ae 100644 --- a/mod_excel_access.py +++ b/mod_excel_access.py @@ -56,6 +56,16 @@ def logging_process_step(msg): # ========================================================================= # 程式用函式 # ========================================================================= +def get_value_by_name(wb, name): + try: + if name in wb.names: + value = wb.names[name].refers_to_range.value + else: + raise KeyError + except KeyError: + value = None + return value + def get_han_ji_khoo(wb, sheet_name="漢字庫"): """ 從 Excel 工作表中取得漢字庫 diff --git "a/mod_\346\250\231\351\237\263.py" "b/mod_\346\250\231\351\237\263.py" index 24c0a4b..219f5ad 100644 --- "a/mod_\346\250\231\351\237\263.py" +++ "b/mod_\346\250\231\351\237\263.py" @@ -43,7 +43,7 @@ def split_tai_lo(input_str): # 'ts': 'z' # } # ========================================================== -def split_tai_gi_im_piau(im_piau): +def split_tai_gi_im_piau(im_piau: str): # 聲母相容性轉換處理(將 tsh 轉換為 c;將 ts 轉換為 z) # zu_im = zu_im.replace("tsh", "c") # 將 tsh 轉換為 c # zu_im = zu_im.replace("ts", "z") # 將 ts 轉換為 z @@ -144,7 +144,7 @@ def split_hong_im_hu_ho(hong_im_piau_im): return [siann_mu, un_mu, str(tiau_ho)] -def tng_uann_han_ji_piau_im(piau_im, zu_im_huat, siann_bu, un_bu, tiau_ho): +def siann_un_tiau_tng_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) @@ -174,7 +174,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 = tng_uann_han_ji_piau_im( + han_ji_piau_im = siann_un_tiau_tng_piau_im( piau_im, piau_im_huat, siann_bu, diff --git a/p702_Ca_Han_Ji_Thak_Im.py b/p702_Ca_Han_Ji_Thak_Im.py index 6bb38bb..022a54c 100644 --- a/p702_Ca_Han_Ji_Thak_Im.py +++ b/p702_Ca_Han_Ji_Thak_Im.py @@ -8,10 +8,10 @@ from mod_file_access import load_module_function from mod_標音 import hong_im_tng_tai_gi_im_piau # 方音符號轉台語音標 from mod_標音 import is_punctuation # 是否為標點符號 +from mod_標音 import siann_un_tiau_tng_piau_im # 台語音標轉台語音標 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 @@ -70,7 +70,7 @@ def za_ji_kiat_ko_cut_piau_im(result, han_ji_khoo, piau_im, piau_im_huat): # 標音法為:【十五音】或【雅俗通】,且【聲母】為空值,則將【聲母】設為【ø】 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( + han_ji_piau_im = siann_un_tiau_tng_piau_im( piau_im, piau_im_huat, siann_bu, @@ -186,7 +186,7 @@ def ca_han_ji_thak_im(wb, sheet_name='漢字注音', cell='V3', ue_im_lui_piat=" tai_gi_im_piau = manual_input siann, un, tiau = split_tai_gi_im_piau(tai_gi_im_piau) # 依指定之【標音方法】,將【台語音標】轉換成其所需之【漢字標音】 - han_ji_piau_im = tng_uann_han_ji_piau_im( + han_ji_piau_im = siann_un_tiau_tng_piau_im( piau_im, piau_im_huat, siann, @@ -210,7 +210,7 @@ def ca_han_ji_thak_im(wb, sheet_name='漢字注音', cell='V3', ue_im_lui_piat=" 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( + han_ji_piau_im = siann_un_tiau_tng_piau_im( piau_im, piau_im_huat, siann_bu, diff --git a/process_log.txt b/process_log.txt index f91ef68..1d849a8 100644 --- a/process_log.txt +++ b/process_log.txt @@ -1270,3 +1270,116 @@ IndexError: list index out of range 2025-01-12 22:13:07,139 - INFO - 完成【處理作業】... 2025-01-12 22:13:07,219 - INFO - 釋放 Excel 資源,處理完成。 2025-01-12 22:13:07,219 - INFO - 作業成功完成! +2025-01-12 22:40:05,978 - INFO - 專案根目錄為: C:\work\Piau-Im +2025-01-12 22:40:06,071 - INFO - 開始【處理作業】... +2025-01-12 22:40:08,715 - INFO - 已更新【待注音漢字】儲存格! +2025-01-12 22:40:08,733 - INFO - 【待注音漢字】總字數為: 143 +2025-01-12 22:40:08,888 - INFO - 儲存格內容清除完畢 +2025-01-12 22:40:16,243 - INFO - 儲存格格式重設完畢 +2025-01-12 22:40:32,873 - INFO - 待注音漢字已填入【漢字注音】工作表 +2025-01-12 22:40:32,909 - INFO - 開始【漢字標音作業】 - 河洛話: +2025-01-12 22:40:49,225 - ERROR - 執行過程中發生未知錯誤: All elements of a 2d list or tuple must be of the same length +Traceback (most recent call last): + File "a705_依漢字注音工作表內容更新待注音漢字.py", line 192, in main + result_code = process(wb) + File "a705_依漢字注音工作表內容更新待注音漢字.py", line 152, in process + fill_hanji_in_cells(wb) + ~~~~~~~~~~~~~~~~~~~^^^^ + File "c:\work\Piau-Im\a701_作業中活頁檔填入漢字.py", line 98, in process + ca_han_ji_thak_im(wb, sheet_name='漢字注音', cell='V3', + ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ue_im_lui_piat=ue_im_lui_piat, + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + han_ji_khoo=han_ji_khoo, db_name=db_name, + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + module_name=module_name, + ^^^^^^^^^^^^^^^^^^^^^^^^ + function_name='han_ji_ca_piau_im') + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "c:\work\Piau-Im\p702_Ca_Han_Ji_Thak_Im.py", line 240, in ca_han_ji_thak_im + maintain_han_ji_koo(sheet=han_ji_koo_sheet, + ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^ + han_ji=han_ji, + ^^^^^^^^^^^^^^ + tai_gi=tai_gi_im_piau, + ^^^^^^^^^^^^^^^^^^^^^^ + show_msg=False) + ^^^^^^^^^^^^^^^ + File "c:\work\Piau-Im\mod_excel_access.py", line 115, in maintain_han_ji_koo + sheet.range("A2").value = records # 寫入更新後的資料 + ^^^^^^^^^^^^^^^^^^^^^^^ + File "c:\work\Piau-Im\.venv\Lib\site-packages\xlwings\main.py", line 2482, in value + conversion.write(data, self, self._options) + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "c:\work\Piau-Im\.venv\Lib\site-packages\xlwings\conversion\__init__.py", line 94, in write + raise Exception( + "All elements of a 2d list or tuple must be of the same length" + ) +Exception: All elements of a 2d list or tuple must be of the same length +2025-01-12 22:40:49,299 - INFO - 釋放 Excel 資源,處理完成。 +2025-01-12 22:43:54,629 - INFO - 作業開始 +2025-01-12 22:43:54,630 - INFO - 專案根目錄為: C:\work\Piau-Im +2025-01-12 22:44:58,447 - INFO - 己存檔至路徑:{file_path} +2025-01-12 22:44:58,447 - INFO - a702_查找及填入漢字標音.py 程式已執行完畢! +2025-01-12 22:44:58,447 - INFO - 作業完成! +2025-01-12 22:46:38,119 - INFO - 作業開始 +2025-01-12 22:46:38,120 - INFO - 專案根目錄為: C:\work\Piau-Im +2025-01-12 22:47:21,217 - ERROR - 作業過程發生未知的異常錯誤: All elements of a 2d list or tuple must be of the same length +Traceback (most recent call last): + File "a702_查找及填入漢字標音.py", line 148, in main + result_code = process(wb) + File "a702_查找及填入漢字標音.py", line 66, in process + ca_han_ji_thak_im( + ~~~~~~~~~~~~~~~~~^ + wb=wb, + ^^^^^^ + ...<6 lines>... + function_name="han_ji_ca_piau_im", + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "c:\work\Piau-Im\p702_Ca_Han_Ji_Thak_Im.py", line 240, in ca_han_ji_thak_im + maintain_han_ji_koo(sheet=han_ji_koo_sheet, + ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^ + han_ji=han_ji, + ^^^^^^^^^^^^^^ + tai_gi=tai_gi_im_piau, + ^^^^^^^^^^^^^^^^^^^^^^ + show_msg=False) + ^^^^^^^^^^^^^^^ + File "c:\work\Piau-Im\mod_excel_access.py", line 115, in maintain_han_ji_koo + sheet.range("A2").value = records # 寫入更新後的資料 + ^^^^^^^^^^^^^^^^^^^^^^^ + File "c:\work\Piau-Im\.venv\Lib\site-packages\xlwings\main.py", line 2482, in value + conversion.write(data, self, self._options) + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "c:\work\Piau-Im\.venv\Lib\site-packages\xlwings\conversion\__init__.py", line 94, in write + raise Exception( + "All elements of a 2d list or tuple must be of the same length" + ) +Exception: All elements of a 2d list or tuple must be of the same length +2025-01-12 22:47:21,222 - INFO - a702_查找及填入漢字標音.py 程式已執行完畢! +2025-01-13 13:39:05,240 - INFO - 作業開始 +2025-01-13 13:39:05,241 - INFO - 專案根目錄為: C:\work\Piau-Im +2025-01-13 13:39:58,783 - INFO - 己存檔至路徑:{file_path} +2025-01-13 13:39:58,783 - INFO - a702_查找及填入漢字標音.py 程式已執行完畢! +2025-01-13 13:39:58,783 - INFO - 作業完成! +2025-01-13 13:42:50,107 - INFO - 作業開始 +2025-01-13 13:42:50,108 - INFO - 專案根目錄為: C:\work\Piau-Im +2025-01-13 13:43:39,438 - INFO - 己存檔至路徑:{file_path} +2025-01-13 13:43:39,438 - INFO - a702_查找及填入漢字標音.py 程式已執行完畢! +2025-01-13 13:43:39,438 - INFO - 作業完成! +2025-01-13 13:56:31,356 - INFO - 專案根目錄為: C:\work\Piau-Im +2025-01-13 13:56:42,625 - INFO - 完成【作業程序】:更新漢字標音... +2025-01-13 13:56:42,626 - INFO - 完成【處理作業】... +2025-01-13 13:56:42,713 - INFO - 釋放 Excel 資源,處理完成。 +2025-01-13 13:56:42,713 - INFO - 作業成功完成! +2025-01-13 13:57:57,473 - INFO - 專案根目錄為: C:\work\Piau-Im +2025-01-13 14:00:12,492 - INFO - 專案根目錄為: C:\work\Piau-Im +2025-01-13 14:07:03,270 - INFO - 專案根目錄為: C:\work\Piau-Im +2025-01-13 14:11:58,627 - INFO - 專案根目錄為: C:\work\Piau-Im +2025-01-13 14:13:30,908 - INFO - 專案根目錄為: C:\work\Piau-Im +2025-01-13 14:13:49,397 - INFO - 完成【作業程序】:更新漢字標音... +2025-01-13 14:13:49,397 - INFO - 完成【處理作業】... +2025-01-13 14:13:49,468 - INFO - 釋放 Excel 資源,處理完成。 +2025-01-13 14:13:49,468 - INFO - 作業成功完成!