Skip to content

Commit

Permalink
改善 a701, a702 ,使用【缺字表】記錄查不到標音的【漢字】。
Browse files Browse the repository at this point in the history
  • Loading branch information
AlanJui committed Jan 16, 2025
1 parent 4988015 commit 731a52d
Show file tree
Hide file tree
Showing 7 changed files with 110 additions and 32 deletions.
19 changes: 10 additions & 9 deletions a702_查找及填入漢字標音.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@
# 載入自訂模組
from mod_excel_access import (
delete_sheet_by_name,
get_han_ji_khoo,
get_ji_khoo,
get_tai_gi_by_han_ji,
get_value_by_name,
maintain_han_ji_koo,
maintain_ji_khoo,
)
from mod_file_access import load_module_function, save_as_new_file
from mod_標音 import PiauIm # 漢字標音物件
Expand All @@ -27,7 +27,8 @@
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 # 破音字物件

# from p740_Phua_Im_Ji import PhuaImJi # 破音字物件

# =========================================================================
# 載入環境變數
Expand Down Expand Up @@ -174,15 +175,15 @@ def ca_han_ji_thak_im(wb, sheet_name='漢字注音', cell='V3', ue_im_lui_piat="
# 建置自動及人工漢字標音字庫工作表:(1)【漢字庫工作表】;(2)【人工標音字庫工作表】;(3)【缺字表】
piau_im_sheet_name = '標音字庫'
delete_sheet_by_name(wb=wb, sheet_name=piau_im_sheet_name)
han_ji_koo_sheet = get_han_ji_khoo(wb=wb, sheet_name=piau_im_sheet_name)
han_ji_koo_sheet = get_ji_khoo(wb=wb, sheet_name=piau_im_sheet_name)

jin_kang_piau_im_sheet_name='人工標音字庫'
delete_sheet_by_name(wb=wb, sheet_name=jin_kang_piau_im_sheet_name)
jin_kang_piau_im_sheet = get_han_ji_khoo(wb=wb, sheet_name=jin_kang_piau_im_sheet_name)
jin_kang_piau_im_sheet = get_ji_khoo(wb=wb, sheet_name=jin_kang_piau_im_sheet_name)

khuat_ji_piau_name = '缺字表'
delete_sheet_by_name(wb=wb, sheet_name=khuat_ji_piau_name)
khuat_ji_piau_sheet = get_han_ji_khoo(wb=wb, sheet_name=khuat_ji_piau_name)
khuat_ji_piau_sheet = get_ji_khoo(wb=wb, sheet_name=khuat_ji_piau_name)

# 指定【漢字注音】工作表為【作用工作表】
sheet = wb.sheets[sheet_name]
Expand Down Expand Up @@ -272,7 +273,7 @@ def ca_han_ji_thak_im(wb, sheet_name='漢字注音', cell='V3', ue_im_lui_piat="
han_ji_u_piau_im = True

# 將人工輸入的【台語音標】置入【破音字庫】Dict
maintain_han_ji_koo(sheet=jin_kang_piau_im_sheet,
maintain_ji_khoo(sheet=jin_kang_piau_im_sheet,
han_ji=han_ji,
tai_gi=tai_gi_im_piau,
show_msg=False)
Expand Down Expand Up @@ -300,7 +301,7 @@ def ca_han_ji_thak_im(wb, sheet_name='漢字注音', cell='V3', ue_im_lui_piat="
ue_im_lui_piat=ue_im_lui_piat)
# 若【漢字庫】查無此字,登錄至【缺字表】
if not result:
maintain_han_ji_koo(sheet=khuat_ji_piau_sheet,
maintain_ji_khoo(sheet=khuat_ji_piau_sheet,
han_ji=han_ji,
tai_gi='',
show_msg=False)
Expand All @@ -316,7 +317,7 @@ def ca_han_ji_thak_im(wb, sheet_name='漢字注音', cell='V3', ue_im_lui_piat="
han_ji_u_piau_im = True

if han_ji_u_piau_im:
maintain_han_ji_koo(sheet=han_ji_koo_sheet,
maintain_ji_khoo(sheet=han_ji_koo_sheet,
han_ji=han_ji,
tai_gi=tai_gi_im_piau,
show_msg=False)
Expand Down
6 changes: 3 additions & 3 deletions a706_手動更正漢字標音.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
from a702_查找及填入漢字標音 import reset_han_ji_cells

# 載入自訂模組/函式
from mod_excel_access import get_han_ji_khoo, get_value_by_name, maintain_han_ji_koo
from mod_excel_access import get_ji_khoo, get_value_by_name, maintain_ji_khoo
from mod_file_access import load_module_function, save_as_new_file
from mod_標音 import PiauIm # 漢字標音物件
from mod_標音 import hong_im_tng_tai_gi_im_piau # 方音符號轉台語音標
Expand Down Expand Up @@ -101,7 +101,7 @@ def jin_kang_piau_im_cu_tai_gi(wb, han_ji: str, jin_kang_piau_im: str, piau_im:
)

# 將人工輸入的【台語音標】置入【破音字庫】Dict
maintain_han_ji_koo(sheet=jin_kang_piau_im_sheet,
maintain_ji_khoo(sheet=jin_kang_piau_im_sheet,
han_ji=han_ji,
tai_gi=tai_gi_im_piau,
show_msg=False)
Expand All @@ -123,7 +123,7 @@ def update_han_ji_piau_im(wb):
han_ji_piau_im_sheet = wb.sheets['漢字注音']
han_ji_piau_im_sheet.activate()
piau_im_sheet_name = '標音字庫'
piau_im_ji_khoo_sheet = get_han_ji_khoo(wb=wb, sheet_name=piau_im_sheet_name)
piau_im_ji_khoo_sheet = get_ji_khoo(wb=wb, sheet_name=piau_im_sheet_name)

# 取得【標音字庫】表格範圍的所有資料
data = piau_im_ji_khoo_sheet.range("A2").expand("table").value
Expand Down
57 changes: 44 additions & 13 deletions mod_excel_access.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ def get_value_by_name(wb, name):
value = None
return value

def get_han_ji_khoo(wb, sheet_name="標音字庫"):
def get_ji_khoo(wb, sheet_name="標音字庫"):
"""
從 Excel 工作表中取得漢字庫
wb: Excel 活頁簿物件
Expand All @@ -101,14 +101,16 @@ def get_han_ji_khoo(wb, sheet_name="標音字庫"):

return sheet

def maintain_han_ji_koo(sheet, han_ji, tai_gi, show_msg=False):
def maintain_ji_khoo(sheet, han_ji, tai_gi, show_msg=False):
"""
維護【漢字庫】工作表,新增或更新漢字及台語音標
wb: Excel 活頁簿物件
sheet_name: 工作表名稱
han_ji: 要新增的漢字
tai_gi: 對應的台語音標
"""
# 如果台語音標為空字串,設置為"NA"(或其他標示值)
tai_gi = tai_gi if tai_gi.strip() else "NA"

# 取得 A、B、C 欄的所有值
data = sheet.range("A2").expand("table").value
Expand All @@ -129,20 +131,20 @@ def maintain_han_ji_koo(sheet, han_ji, tai_gi, show_msg=False):
if row[0] == han_ji and row[1] == tai_gi:
row[2] = (row[2] if isinstance(row[2], (int, float)) else 0) + 1 # 確保存在總數是數字
found = True
if show_msg: print(f"漢字:【{han_ji}{tai_gi})】已存在,總數為: {int(row[2])}")
if show_msg: print(f"漢字:【{han_ji}{tai_gi})】紀錄己有,總數為: {int(row[2])}")
break

# 若未找到則新增一筆資料
if not found:
records.append([han_ji, tai_gi, 1])
if show_msg: print(f"新增漢字:【{han_ji}{tai_gi}")
if show_msg: print(f"新增漢字:【{han_ji}{tai_gi})")


# 更新工作表的內容
sheet.range("A2").expand("table").clear_contents() # 清空舊資料
sheet.range("A2").value = records # 寫入更新後的資料

if show_msg: print(f"已完成【漢字庫】工作表的更新!")
# if show_msg: print(f"已完成【漢字庫】工作表的更新!")

def get_tai_gi_by_han_ji(sheet, han_ji, show_msg=False):
"""
Expand Down Expand Up @@ -229,18 +231,42 @@ def get_total_rows_in_sheet(wb, sheet_name):
# =========================================================================
# 單元測試
# =========================================================================
def ut_khuat_ji_piau(wb=None):
"""缺字表登錄單元測試"""
wb = xw.Book('Test_Case_Sample.xlsx')
delete_sheet_by_name(wb, "缺字表", show_msg=True)
sheet = get_ji_khoo(wb, "缺字表")
sheet.activate()

try:
# 當【缺字表】工作表,尚不存在任何查找不到【標音】的【漢字】,新增一筆紀錄
maintain_ji_khoo(sheet, "銜", "", show_msg=True)
# 當【缺字表】已有一筆紀錄,新增第二筆紀錄
maintain_ji_khoo(sheet, "暉", "", show_msg=True)
# 在【缺字表】新增第三紀錄
maintain_ji_khoo(sheet, "霪", "", show_msg=True)
except Exception as e:
print(e)
return EXIT_CODE_UNKNOWN_ERROR

# 檢查【缺字表】工作表的內容
for row in sheet.range("A2").expand("table").value:
print(row)
return EXIT_CODE_SUCCESS


def ut_maintain_han_ji_koo(wb=None):
wb = xw.Book('Test_Case_Sample.xlsx')
sheet = get_han_ji_khoo(wb, "漢字庫")
sheet = get_ji_khoo(wb, "漢字庫")

# 漢字庫工作表不存在:工作表將新增,且新增一筆紀錄,加入【說】字,【總數】為 1
maintain_han_ji_koo(sheet, "說", "sue3", show_msg=True)
maintain_ji_khoo(sheet, "說", "sue3", show_msg=True)
# 再次要求在漢字庫加入【說】:工作表會被選取,不會為【說】添增新紀錄,但【總數】更新為 2
maintain_han_ji_koo(sheet, "說", "sue3", show_msg=True)
maintain_han_ji_koo(sheet, "說", "sue3", show_msg=True)
maintain_han_ji_koo(sheet, "說", "uat4", show_msg=True)
maintain_han_ji_koo(sheet, "花", "hua1", show_msg=True)
maintain_han_ji_koo(sheet, "說", "uat4", show_msg=True)
maintain_ji_khoo(sheet, "說", "sue3", show_msg=True)
maintain_ji_khoo(sheet, "說", "sue3", show_msg=True)
maintain_ji_khoo(sheet, "說", "uat4", show_msg=True)
maintain_ji_khoo(sheet, "花", "hua1", show_msg=True)
maintain_ji_khoo(sheet, "說", "uat4", show_msg=True)

# 查詢【漢字】的台語音標
print("\n===================================================")
Expand Down Expand Up @@ -339,10 +365,15 @@ def ut_get_total_rows_in_sheet(wb=None, sheet_name="字庫表"):
# 作業程序
# =========================================================================
def process(wb):
return_code = ut_maintain_han_ji_koo(wb=wb)
# ---------------------------------------------------------------------
return_code = ut_khuat_ji_piau(wb=wb)
if return_code != EXIT_CODE_SUCCESS:
return return_code
# ---------------------------------------------------------------------
# return_code = ut_maintain_han_ji_koo(wb=wb)
# if return_code != EXIT_CODE_SUCCESS:
# return return_code
# ---------------------------------------------------------------------
# return_code = ut_prepare_working_sheets(wb=wb)
# if return_code != EXIT_CODE_SUCCESS:
# return return_code
Expand Down
Binary file added output7/Test_Case_Sample.xlsx
Binary file not shown.
Binary file not shown.
14 changes: 7 additions & 7 deletions p702_Ca_Han_Ji_Thak_Im.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

import xlwings as xw

from mod_excel_access import get_han_ji_khoo, get_tai_gi_by_han_ji, maintain_han_ji_koo
from mod_excel_access import get_ji_khoo, get_tai_gi_by_han_ji, maintain_ji_khoo
from mod_file_access import load_module_function
from mod_標音 import PiauIm # 漢字之【漢字標音】轉換物件
from mod_標音 import hong_im_tng_tai_gi_im_piau # 方音符號轉台語音標
Expand Down Expand Up @@ -84,9 +84,9 @@ def za_ji_kiat_ko_cut_piau_im(result, han_ji_khoo, piau_im, piau_im_huat):
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_koo_sheet = get_han_ji_khoo(wb)
jin_kang_piau_im = get_han_ji_khoo(wb, sheet_name='人工標音字庫')
khuat_ji_piau_sheet = get_han_ji_khoo(wb, sheet_name='缺字表')
han_ji_koo_sheet = get_ji_khoo(wb)
jin_kang_piau_im = get_ji_khoo(wb, sheet_name='人工標音字庫')
khuat_ji_piau_sheet = get_ji_khoo(wb, sheet_name='缺字表')

# 動態載入查找函數
han_ji_ca_piau_im = load_module_function(module_name, function_name)
Expand Down Expand Up @@ -199,7 +199,7 @@ def ca_han_ji_thak_im(wb, sheet_name='漢字注音', cell='V3', ue_im_lui_piat="

# 將人工輸入的【台語音標】置入【標音字庫】Dict
# phua_im_ji.ka_phua_im_ji(han_ji, tai_gi_im_piau)
maintain_han_ji_koo(sheet=jin_kang_piau_im,
maintain_ji_khoo(sheet=jin_kang_piau_im,
han_ji=han_ji,
tai_gi=tai_gi_im_piau,
show_msg=False)
Expand Down Expand Up @@ -227,7 +227,7 @@ def ca_han_ji_thak_im(wb, sheet_name='漢字注音', cell='V3', ue_im_lui_piat="
else:
result = han_ji_ca_piau_im(cursor=cursor, han_ji=han_ji, ue_im_lui_piat=ue_im_lui_piat)
if not result:
maintain_han_ji_koo(sheet=khuat_ji_piau_sheet,
maintain_ji_khoo(sheet=khuat_ji_piau_sheet,
han_ji=han_ji,
tai_gi='',
show_msg=False)
Expand All @@ -243,7 +243,7 @@ def ca_han_ji_thak_im(wb, sheet_name='漢字注音', cell='V3', ue_im_lui_piat="
han_ji_u_piau_im = True

if han_ji_u_piau_im:
maintain_han_ji_koo(sheet=han_ji_koo_sheet,
maintain_ji_khoo(sheet=han_ji_koo_sheet,
han_ji=han_ji,
tai_gi=tai_gi_im_piau,
show_msg=False)
Expand Down
46 changes: 46 additions & 0 deletions process_log.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2777,3 +2777,49 @@ Traceback (most recent call last):
)
Exception: All elements of a 2d list or tuple must be of the same length
2025-01-15 23:36:18,136 - INFO - a702_查找及填入漢字標音.py 程式已執行完畢!
2025-01-16 10:23:33,511 - INFO - 作業開始
2025-01-16 10:23:33,513 - INFO - 專案根目錄為: C:\work\Piau-Im
2025-01-16 10:24:45,509 - INFO - 作業開始
2025-01-16 10:24:45,511 - INFO - 專案根目錄為: C:\work\Piau-Im
2025-01-16 10:27:13,391 - INFO - 作業開始
2025-01-16 10:27:13,392 - INFO - 專案根目錄為: C:\work\Piau-Im
2025-01-16 10:30:05,879 - INFO - 己存檔至路徑:{file_path}
2025-01-16 10:30:05,879 - INFO - a702_查找及填入漢字標音.py 程式已執行完畢!
2025-01-16 10:30:05,879 - INFO - 作業完成!
2025-01-16 10:50:36,845 - INFO - 作業開始
2025-01-16 10:50:36,846 - INFO - 專案根目錄為: C:\work\Piau-Im
2025-01-16 10:50:41,728 - ERROR - 作業過程發生未知的異常錯誤: No such file: 'Test_Case_Sample.xlsx'
Traceback (most recent call last):
File "mod_excel_access.py", line 419, in main
result_code = process(wb)
File "mod_excel_access.py", line 362, in process
return_code = ut_khuat_ji_piau(wb=wb)
File "mod_excel_access.py", line 233, in ut_khuat_ji_piau
wb = xw.Book('Test_Case_Sample.xlsx')
File "c:\work\Piau-Im\.venv\Lib\site-packages\xlwings\main.py", line 933, in __init__
impl = app.books.open(
~~~~~~~~~~~~~~^
fullname,
^^^^^^^^^
...<13 lines>...
corrupt_load,
^^^^^^^^^^^^^
).impl
^
File "c:\work\Piau-Im\.venv\Lib\site-packages\xlwings\main.py", line 5157, in open
raise FileNotFoundError("No such file: '%s'" % fullname)
FileNotFoundError: No such file: 'Test_Case_Sample.xlsx'
2025-01-16 10:50:41,733 - INFO - a701_作業中活頁簿填入漢字.py 程式已執行完畢!
2025-01-16 10:53:22,021 - INFO - 作業開始
2025-01-16 10:53:22,022 - INFO - 專案根目錄為: C:\work\Piau-Im
2025-01-16 11:30:17,597 - INFO - 作業開始
2025-01-16 11:30:17,598 - INFO - 專案根目錄為: C:\work\Piau-Im
2025-01-16 11:30:56,788 - INFO - a701_作業中活頁簿填入漢字.py 程式已執行完畢!
2025-01-16 11:31:53,851 - INFO - 作業開始
2025-01-16 11:31:53,852 - INFO - 專案根目錄為: C:\work\Piau-Im
2025-01-16 11:31:59,211 - INFO - a701_作業中活頁簿填入漢字.py 程式已執行完畢!
2025-01-16 11:33:23,114 - INFO - 作業開始
2025-01-16 11:33:23,115 - INFO - 專案根目錄為: C:\work\Piau-Im
2025-01-16 11:36:19,031 - INFO - 己存檔至路徑:{file_path}
2025-01-16 11:36:19,031 - INFO - a702_查找及填入漢字標音.py 程式已執行完畢!
2025-01-16 11:36:19,031 - INFO - 作業完成!

0 comments on commit 731a52d

Please sign in to comment.