diff --git a/Documents/Sip-Ngoo-Im/README.md b/Documents/Sip-Ngoo-Im/README.md
index e981762..fc7ea63 100644
--- a/Documents/Sip-Ngoo-Im/README.md
+++ b/Documents/Sip-Ngoo-Im/README.md
@@ -311,3 +311,43 @@ UPDATE Han_Ji_Tian
SET 台語音標拼音 = SUBSTR(台語音標拼音, 2)
WHERE 台語音標拼音 LIKE 'q%';
```
+
+## 台羅音標漢字庫
+
+### 資料表結構(Schema)
+
+```bash
+CREATE TABLE 台羅音標漢字庫 (
+ 識別號 INTEGER NOT NULL
+ UNIQUE,
+ 漢字 TEXT,
+ 台羅音標 TEXT,
+ 常用度 TEXT,
+ 摘要說明 TEXT,
+ 建立時間 TEXT DEFAULT (DATETIME('now', 'localtime') )
+ NOT NULL,
+ 更新時間 TEXT NOT NULL
+ DEFAULT (DATETIME('now', 'localtime') ),
+ PRIMARY KEY (
+ 識別號 AUTOINCREMENT
+ )
+);
+```
+
+
+### 資料更新觸發器
+
+```bash
+DROP TRIGGER IF EXISTS 紀錄更新觸發器;
+
+CREATE TRIGGER 紀錄更新觸發器
+AFTER UPDATE ON 台羅音標漢字庫
+FOR EACH ROW
+WHEN NEW.更新時間 = OLD.更新時間
+BEGIN
+ UPDATE 台羅音標漢字庫
+ SET 更新時間 = DATETIME('now', 'localtime')
+ WHERE 識別號 = NEW.識別號;
+END;
+```
+
diff --git a/Nga_Siok_Thong_Sip_Ngoo_Im.db b/Nga_Siok_Thong_Sip_Ngoo_Im.db
index e69de29..2cc001c 100644
Binary files a/Nga_Siok_Thong_Sip_Ngoo_Im.db and b/Nga_Siok_Thong_Sip_Ngoo_Im.db differ
diff --git a/Tai_Loo_Han_Ji_Khoo.db b/Tai_Loo_Han_Ji_Khoo.db
index 8531728..0f7f645 100644
Binary files a/Tai_Loo_Han_Ji_Khoo.db and b/Tai_Loo_Han_Ji_Khoo.db differ
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 9c08323..3a76fe1 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"
@@ -6,6 +6,18 @@
from p702_Ca_Han_Ji_Thak_Im import ca_han_ji_thak_im
from p730_Tng_Sing_Bang_Iah import tng_sing_bang_iah
+
+# ==========================================================
+# 查詢語音類型,若未設定則預設為文讀音
+# ==========================================================
+def get_sound_type(wb):
+ try:
+ reading_type = wb.names['語音類型'].refers_to_range.value
+ except KeyError:
+ reading_type = "文讀音"
+ return reading_type
+
+
# 指定虛擬環境的 Python 路徑
venv_python = os.path.join(".venv", "Scripts", "python.exe") if sys.platform == "win32" else os.path.join(".venv", "bin", "python")
@@ -36,10 +48,12 @@
sheet.range('A1').select() # 將 A1 儲存格設為作用儲存格
# (2) A731: 自動為漢字查找讀音,並抄寫到漢字的上方(拼音)及下方(注音)。
-ca_han_ji_thak_im(wb, '漢字注音', 'V3')
+# type = '白話音'
+type = get_sound_type(wb)
+ca_han_ji_thak_im(wb, '漢字注音', 'V3', type)
# (3) A740: 將【漢字注音】工作表的內容,轉成 HTML 網頁檔案。
-tng_sing_bang_iah(wb, '漢字注音', 'V3')
+# tng_sing_bang_iah(wb, '漢字注音', 'V3')
# (4) A750: 將 Tai_Gi_Zu_Im_Bun.xlsx 檔案,依 env 工作表的設定,另存新檔到指定目錄。
try:
diff --git "a/docs/\346\241\203\350\212\261\346\272\220\350\250\230_\346\274\242\345\255\227\346\263\250\351\237\263.html" "b/docs/\346\241\203\350\212\261\346\272\220\350\250\230_\346\274\242\345\255\227\346\263\250\351\237\263.html"
new file mode 100644
index 0000000..547b2cc
--- /dev/null
+++ "b/docs/\346\241\203\350\212\261\346\272\220\350\250\230_\346\274\242\345\255\227\346\263\250\351\237\263.html"
@@ -0,0 +1,442 @@
+
+
+
+
+ 《桃花源記》【漢字注音】
+
+
+
+
+ 《桃花源記》【漢字注音】
+
+
+
+
+
+晉
+太
+元
+中
+,
+武
+陵
+人
+,
+捕
+魚
+為
+業
+,
+緣
+溪
+行
+,
+忘
+路
+之
+遠
+近
+;
+忽
+逢
+桃
+花
+林
+,
+夾
+岸
+數
+百
+步
+,
+中
+無
+雜
+樹
+,
+芳
+草
+鮮
+美
+,
+落
+英
+繽
+紛
+;
+漁
+人
+甚
+異
+之
+。
+復
+前
+行
+,
+欲
+窮
+其
+林
+。
+
+
+
+
+林
+盡
+水
+源
+,
+便
+得
+一
+山
+。
+山
+有
+小
+口
+,
+彷
+彿
+若
+有
+光
+,
+便
+舍
+船
+,
+從
+口
+入
+。
+初
+極
+狹
+,
+纔
+通
+人
+;
+復
+行
+數
+十
+步
+,
+豁
+然
+開
+朗
+。
+土
+地
+平
+曠
+,
+屋
+舍
+儼
+然
+。
+有
+良
+田
+、
+美
+池
+、
+桑
+、
+竹
+之
+屬
+,
+阡
+陌
+交
+通
+,
+雞
+犬
+相
+聞
+。
+其
+中
+往
+來
+種
+作
+,
+男
+女
+衣
+著
+,
+悉
+如
+外
+人
+;
+黃
+髮
+垂
+髫
+,
+並
+佁
+然
+自
+樂
+。
+見
+漁
+人
+,
+乃
+大
+驚
+,
+問
+所
+從
+來
+;
+具
+答
+之
+。
+便
+要
+還
+家
+,
+設
+酒
+、
+殺
+雞
+、
+作
+食
+。
+村
+中
+聞
+有
+此
+人
+,
+咸
+來
+問
+訊
+。
+自
+云
+:
+「
+先
+世
+避
+秦
+時
+亂
+,
+率
+妻
+子
+邑
+人
+來
+此
+絕
+境
+,
+不
+復
+出
+焉
+;
+遂
+與
+外
+人
+間
+隔
+。
+」
+問
+「
+今
+是
+何
+世
+?
+」
+乃
+不
+知
+有
+漢
+,
+無
+論
+魏
+、
+晉
+!
+此
+人
+一
+一
+為
+具
+言
+所
+聞
+,
+皆
+歎
+惋
+。
+餘
+人
+各
+復
+延
+至
+其
+家
+,
+皆
+出
+酒
+食
+。
+停
+數
+日
+,
+辭
+去
+。
+此
+中
+人
+語
+云
+:
+「
+不
+足
+為
+外
+人
+道
+也
+。
+」
+
+
+
+
+既
+出
+,
+得
+其
+船
+,
+便
+扶
+向
+路
+,
+處
+處
+誌
+之
+。
+及
+郡
+下
+,
+詣
+太
+守
+,
+說
+如
+此
+。
+太
+守
+即
+遣
+人
+隨
+其
+往
+,
+尋
+向
+所
+誌
+,
+遂
+迷
+不
+復
+得
+路
+。
+
+
+
+
+南
+陽
+劉
+子
+驥
+,
+高
+尚
+士
+也
+,
+聞
+之
+,
+欣
+然
+規
+往
+,
+未
+果
+,
+尋
+病
+終
+。
+後
+遂
+無
+問
+津
+者
+。
+
+
+
+
\ No newline at end of file
diff --git "a/mod_\345\217\260\347\276\205\351\237\263\346\250\231\346\274\242\345\255\227\345\272\253.py" "b/mod_\345\217\260\347\276\205\351\237\263\346\250\231\346\274\242\345\255\227\345\272\253.py"
index 07886b6..bbf1143 100644
--- "a/mod_\345\217\260\347\276\205\351\237\263\346\250\231\346\274\242\345\255\227\345\272\253.py"
+++ "b/mod_\345\217\260\347\276\205\351\237\263\346\250\231\346\274\242\345\255\227\345\272\253.py"
@@ -15,20 +15,29 @@ def close_db_connection(conn):
# 關閉數據庫連接
conn.close()
+
# ==========================================================
# 用 `漢字` 查詢《台語音標》的讀音資訊
# ==========================================================
-def han_ji_ca_piau_im(cursor, han_ji):
+def han_ji_ca_piau_im(cursor, han_ji, reading_type="文讀音"):
"""
根據漢字查詢其台羅音標及相關讀音資訊,並將台羅音標轉換為台語音標。
若資料紀錄在`常用度`欄位儲存值為空值(NULL),則將其視為 0,因此可排在查詢結果的最後。
:param cursor: 數據庫游標
:param han_ji: 欲查詢的漢字
+ :param reading_type: 查詢的讀音類型,可以是 "文讀音" 或 "白話音"
:return: 包含讀音資訊的字典列表,包含台語音標、聲母、韻母、聲調。
"""
- query = """
+ if reading_type == "文讀音":
+ reading_condition = "常用度 >= 0.61"
+ elif reading_type == "白話音":
+ reading_condition = "常用度 <= 0.60"
+ else:
+ reading_condition = "1=1" # 查詢所有
+
+ query = f"""
SELECT
識別號,
漢字,
@@ -38,7 +47,7 @@ def han_ji_ca_piau_im(cursor, han_ji):
FROM
台羅音標漢字庫
WHERE
- 漢字 = ?
+ 漢字 = ? AND ({reading_condition})
ORDER BY
COALESCE(常用度, 0) DESC;
"""
@@ -46,6 +55,26 @@ def han_ji_ca_piau_im(cursor, han_ji):
cursor.execute(query, (han_ji,))
results = cursor.fetchall()
+ # 如果沒有找到符合條件的讀音,則查詢所有讀音,並選擇常用度最高者
+ if not results:
+ query = """
+ SELECT
+ 識別號,
+ 漢字,
+ 台羅音標,
+ 常用度,
+ 摘要說明
+ FROM
+ 台羅音標漢字庫
+ WHERE
+ 漢字 = ?
+ ORDER BY
+ COALESCE(常用度, 0) DESC
+ LIMIT 1;
+ """
+ cursor.execute(query, (han_ji,))
+ results = cursor.fetchall()
+
# 定義【台羅音標】到【台語音標】的轉換規則
tai_luo_to_tai_gi_mapping = {
'tsh': 'c',
@@ -85,9 +114,9 @@ def han_ji_ca_piau_im(cursor, han_ji):
# 自「台語音標+」,分析出:聲母、韻母、聲調
# ==========================================================
def split_zu_im(zu_im):
- # 先進行聲母轉換處理
- zu_im = zu_im.replace("tsh", "c").replace("ch", "c") # 將 tsh, ch 轉換為 c
- zu_im = zu_im.replace("ts", "z").replace("c", "z") # 將 ts, c 轉換為 z
+ # 聲母相容性轉換處理(將 tsh 轉換為 c;將 ts 轉換為 z)
+ zu_im = zu_im.replace("tsh", "c") # 將 tsh 轉換為 c
+ zu_im = zu_im.replace("ts", "z") # 將 ts 轉換為 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|Ø)")
diff --git "a/output2/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221working.xlsx" "b/output2/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221working.xlsx"
index e4068e4..a6a08a9 100644
Binary files "a/output2/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221working.xlsx" and "b/output2/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221working.xlsx" differ
diff --git "a/output2/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\346\241\203\350\212\261\346\272\220\350\250\230.xlsx" "b/output2/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\346\241\203\350\212\261\346\272\220\350\250\230.xlsx"
new file mode 100644
index 0000000..f259c3f
Binary files /dev/null and "b/output2/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\346\241\203\350\212\261\346\272\220\350\250\230.xlsx" differ
diff --git "a/output2/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\346\241\203\350\212\261\346\272\220\350\250\230\343\200\220\346\226\207\350\256\200\351\237\263\343\200\221.xlsx" "b/output2/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\346\241\203\350\212\261\346\272\220\350\250\230\343\200\220\346\226\207\350\256\200\351\237\263\343\200\221.xlsx"
new file mode 100644
index 0000000..c536f4e
Binary files /dev/null and "b/output2/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\346\241\203\350\212\261\346\272\220\350\250\230\343\200\220\346\226\207\350\256\200\351\237\263\343\200\221.xlsx" differ
diff --git "a/output2/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\346\241\203\350\212\261\346\272\220\350\250\230\343\200\220\347\231\275\350\251\261\351\237\263\343\200\221.xlsx" "b/output2/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\346\241\203\350\212\261\346\272\220\350\250\230\343\200\220\347\231\275\350\251\261\351\237\263\343\200\221.xlsx"
new file mode 100644
index 0000000..5658721
Binary files /dev/null and "b/output2/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\346\241\203\350\212\261\346\272\220\350\250\230\343\200\220\347\231\275\350\251\261\351\237\263\343\200\221.xlsx" differ
diff --git "a/output2/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\346\241\203\350\212\261\346\272\220\350\250\230\357\274\210\346\226\207\350\256\200\351\237\263\357\274\211.xlsx" "b/output2/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\346\241\203\350\212\261\346\272\220\350\250\230\357\274\210\346\226\207\350\256\200\351\237\263\357\274\211.xlsx"
new file mode 100644
index 0000000..daf385c
Binary files /dev/null and "b/output2/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\346\241\203\350\212\261\346\272\220\350\250\230\357\274\210\346\226\207\350\256\200\351\237\263\357\274\211.xlsx" differ
diff --git "a/output2/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\351\207\221\345\211\233\350\210\254\350\213\245\346\263\242\347\276\205\350\234\234\347\266\223001\343\200\202\346\263\225\346\234\203\345\233\240\347\224\261\345\210\206\347\254\254\344\270\200.xlsx" "b/output2/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\351\207\221\345\211\233\350\210\254\350\213\245\346\263\242\347\276\205\350\234\234\347\266\223001\343\200\202\346\263\225\346\234\203\345\233\240\347\224\261\345\210\206\347\254\254\344\270\200.xlsx"
index 5accea6..6a90eac 100644
Binary files "a/output2/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\351\207\221\345\211\233\350\210\254\350\213\245\346\263\242\347\276\205\350\234\234\347\266\223001\343\200\202\346\263\225\346\234\203\345\233\240\347\224\261\345\210\206\347\254\254\344\270\200.xlsx" and "b/output2/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\351\207\221\345\211\233\350\210\254\350\213\245\346\263\242\347\276\205\350\234\234\347\266\223001\343\200\202\346\263\225\346\234\203\345\233\240\347\224\261\345\210\206\347\254\254\344\270\200.xlsx" differ
diff --git a/p702_Ca_Han_Ji_Thak_Im.py b/p702_Ca_Han_Ji_Thak_Im.py
index af4eedc..38fce56 100644
--- a/p702_Ca_Han_Ji_Thak_Im.py
+++ b/p702_Ca_Han_Ji_Thak_Im.py
@@ -23,7 +23,7 @@ def is_valid_han_ji(char):
return char not in punctuation_marks
-def ca_han_ji_thak_im(wb, sheet_name='漢字注音', cell='V3'):
+def ca_han_ji_thak_im(wb, sheet_name='漢字注音', cell='V3', type="文讀音"):
# 顯示「已輸入之拼音字母及注音符號」
named_range = wb.names['顯示注音輸入'] # 選擇名為 "顯示注音輸入" 的命名範圍# 選擇名為 "顯示注音輸入" 的命名範圍
named_range.refers_to_range.value = True
@@ -122,8 +122,8 @@ def ca_han_ji_thak_im(wb, sheet_name='漢字注音', cell='V3'):
sheet.range((row - 1, col)).value = lo_ma_im_piau
sheet.range((row + 1, col)).value = zu_im_hu_ho
else:
- # 查找漢字讀音
- result = han_ji_ca_piau_im(cursor, han_ji)
+ # 查找漢字讀音 (type: 白話音、文讀音)
+ result = han_ji_ca_piau_im(cursor, han_ji, type)
# 取羅馬拼音和台語注音
if result:
diff --git a/p711_TL_Tng_Zu_Im.py b/p711_TL_Tng_Zu_Im.py
index 8c097df..59e8ea5 100644
--- a/p711_TL_Tng_Zu_Im.py
+++ b/p711_TL_Tng_Zu_Im.py
@@ -56,18 +56,7 @@ def TL_Tng_Zu_Im(siann_bu, un_bu, siann_tiau, cursor):
# - xform/ㆡ(ㄧ|ㆪ)/ㆢ$1/
#=======================================================================
- # 取【韻母】的第一個注音符號
- # first_un_bu_char = zu_im_un_bu[0] if zu_im_un_bu else ''
- #
# 比對聲母是否為 ㄗ、ㄘ、ㄙ、ㆡ,且韻母的第一個符號是 ㄧ 或 ㆪ
- # if zu_im_siann_bu == 'ㄗ' and (first_un_bu_char == 'ㄧ' or first_un_bu_char == 'ㆪ'):
- # zu_im_siann_bu = 'ㄐ'
- # elif zu_im_siann_bu == 'ㄘ' and (first_un_bu_char == 'ㄧ' or first_un_bu_char == 'ㆪ'):
- # zu_im_siann_bu = 'ㄑ'
- # elif zu_im_siann_bu == 'ㄙ' and (first_un_bu_char == 'ㄧ' or first_un_bu_char == 'ㆪ'):
- # zu_im_siann_bu = 'ㄒ'
- # elif zu_im_siann_bu == 'ㆡ' and (first_un_bu_char == 'ㄧ' or first_un_bu_char == 'ㆪ'):
- # zu_im_siann_bu = 'ㆢ'
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'):