Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
修訂程式結構,補需求與設計。
Browse files Browse the repository at this point in the history
AlanJui committed Apr 13, 2024
1 parent 1b87208 commit 6f7371c
Showing 10 changed files with 181 additions and 408 deletions.
Empty file added Kong_Un_V2.session.sql
Empty file.
112 changes: 55 additions & 57 deletions a400_反切查拼音.py
Original file line number Diff line number Diff line change
@@ -1,90 +1,88 @@
#==============================================================================
# 程式用於查詢反切拼音
#==============================================================================
import os
import sqlite3
import sys

from mod_廣韻 import (
cha_ciat_gu_ha_ji,
cha_ciat_gu_siong_ji,
close_db_connection,
connect_to_db,
han_ji_cha_piau_im,
)



def main():
# 確認使用者有輸入反切之切語參數
if len(sys.argv) != 2:
print("請輸入欲查詢讀音之【切語】(反切上字及下字)!")
os._exit(-1)
sys.exit(-1)

ciat_gu = sys.argv[1]

# 檢查反切拼音是否有兩個字
if len(ciat_gu) != 2:
print("反切用的切語,必須有兩個漢字!")
os._exit(-1)
sys.exit(-1)

# 連上 DB
conn, cursor = connect_to_db('.\\Kong_Un_V2.db')
with connect_to_db('.\\Kong_Un_V2.db') as conn:
cursor = conn.curson()

# 根據反切上字和反切下字來查詢台羅拼音
siong_ji = ciat_gu[0]
ha_ji = ciat_gu[1]
# 根據反切上字和反切下字來查詢台羅拼音
siong_ji = ciat_gu[0]
ha_ji = ciat_gu[1]

# 顯示結果
os.system('cls')
print('\n=================================================')
print(f'欲查詢拼音之切語為:【{ciat_gu}】')
# 顯示結果
os.system('cls')
print('\n=================================================')
print(f'欲查詢拼音之切語為:【{ciat_gu}】')

# 查詢反切上字
print('\n-------------------------------------------------')
print('【切語上字】:\n')
siong_ji_im = han_ji_cha_piau_im(cursor, siong_ji)
siong_ji_piau = cha_ciat_gu_siong_ji(cursor, siong_ji)
if not siong_ji_piau:
print(f'查不到【反切上字】:{siong_ji}')
else:
print(f"切語上字 = {siong_ji} (標音:{siong_ji_im[0]['漢字標音']})")
print(f"聲母:{siong_ji_piau[0]['聲母']} [{siong_ji_piau[0]['聲母拼音碼']}],國際音標:/{siong_ji_im[0]['聲母國際音標']}/ ")
print(f"(發音部位:{siong_ji_piau[0]['發音部位']},清濁:{siong_ji_piau[0]['清濁']},發送收:{siong_ji_piau[0]['發送收']})")
# 查詢反切上字
print('\n-------------------------------------------------')
print('【切語上字】:\n')
siong_ji_im = han_ji_cha_piau_im(cursor, siong_ji)
siong_ji_piau = cha_ciat_gu_siong_ji(cursor, siong_ji)
if not siong_ji_piau:
print(f'查不到【反切上字】:{siong_ji}')
else:
print(f"切語上字 = {siong_ji} (標音:{siong_ji_im[0]['漢字標音']})")
print(f"聲母:{siong_ji_piau[0]['聲母']} [{siong_ji_piau[0]['聲母拼音碼']}],國際音標:/{siong_ji_im[0]['聲母國際音標']}/ ")
print(f"(發音部位:{siong_ji_piau[0]['發音部位']},清濁:{siong_ji_piau[0]['清濁']},發送收:{siong_ji_piau[0]['發送收']})")

# 查詢反切下字
print('\n-------------------------------------------------')
print('【切語下字】:\n')
ha_ji_im = han_ji_cha_piau_im(cursor, ha_ji)
ha_ji_piau = cha_ciat_gu_ha_ji(cursor, ha_ji)
if not ha_ji_piau:
print(f'查不到【反切下字】:{ha_ji}')
else:
print(f"切語下字 = {ha_ji} (標音:{ha_ji_im[0]['漢字標音']})")
print(f"韻母:{ha_ji_piau[0]['韻母']} [{ha_ji_piau[0]['韻母拼音碼']}],國際音標:/{ha_ji_im[0]['韻母國際音標']}/")
print(f"攝:{ha_ji_piau[0]['攝']},調:{ha_ji_piau[0]['調']}聲,目次:{ha_ji_piau[0]['目次']}")
print(f"{ha_ji_piau[0]['韻系']}韻系,{ha_ji_piau[0]['韻目']}韻,{ha_ji_piau[0]['呼']}口呼,{ha_ji_piau[0]['等']}等 ({ha_ji_piau[0]['等呼']})")
# 查詢反切下字
print('\n-------------------------------------------------')
print('【切語下字】:\n')
ha_ji_im = han_ji_cha_piau_im(cursor, ha_ji)
ha_ji_piau = cha_ciat_gu_ha_ji(cursor, ha_ji)
if not ha_ji_piau:
print(f'查不到【反切下字】:{ha_ji}')
else:
print(f"切語下字 = {ha_ji} (標音:{ha_ji_im[0]['漢字標音']})")
print(f"韻母:{ha_ji_piau[0]['韻母']} [{ha_ji_piau[0]['韻母拼音碼']}],國際音標:/{ha_ji_im[0]['韻母國際音標']}/")
print(f"攝:{ha_ji_piau[0]['攝']},調:{ha_ji_piau[0]['調']}聲,目次:{ha_ji_piau[0]['目次']}")
print(f"{ha_ji_piau[0]['韻系']}韻系,{ha_ji_piau[0]['韻目']}韻,{ha_ji_piau[0]['呼']}口呼,{ha_ji_piau[0]['等']}等 ({ha_ji_piau[0]['等呼']})")

# 組合拼音
tiau_ho_list = {
'清平': 1,
'清上': 2,
'清去': 3,
'清入': 4,
'濁平': 5,
'濁上': 2,
'濁去': 7,
'濁入': 8,
}
siann = siong_ji_piau[0]['聲母拼音碼']
cing_tok_str = siong_ji_piau[0]['清濁']
cing_tok = cing_tok_str[-1]
un = ha_ji_piau[0]['韻母拼音碼']
tiau_ho = tiau_ho_list[ f"{cing_tok}{ha_ji_piau[0]['調']}" ]
# 組合拼音
tiau_ho_list = {
'清平': 1,
'清上': 2,
'清去': 3,
'清入': 4,
'濁平': 5,
'濁上': 2,
'濁去': 7,
'濁入': 8,
}
siann = siong_ji_piau[0]['聲母拼音碼']
cing_tok_str = siong_ji_piau[0]['清濁']
cing_tok = cing_tok_str[-1]
un = ha_ji_piau[0]['韻母拼音碼']
tiau_ho = tiau_ho_list[ f"{cing_tok}{ha_ji_piau[0]['調']}" ]

print('\n-------------------------------------------------')
print(f'【切語拼音】:{ciat_gu} [{siann}{un}{tiau_ho}]\n')
print('\n-------------------------------------------------')
print(f'【切語拼音】:{ciat_gu} [{siann}{un}{tiau_ho}]\n')

# 關閉 DB
close_db_connection(conn)


if __name__ == "__main__":
main()
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# 廣韻切語字典資料模型
# 廣韻字典資料模型

```plantuml
@startuml
53 changes: 53 additions & 0 deletions docs/SDD-411_小韻檢視.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
-- 建立小韻檢視
DROP VIEW IF EXISTS 小韻檢視;

CREATE VIEW 小韻檢視 AS
SELECT
小韻表.識別號,
小韻表.小韻字,
小韻表.切語 AS 小韻切語,
小韻表.拼音 AS 小韻標音,
小韻表.目次編碼 AS 目次,
小韻表.小韻字序號,
小韻表.小韻字集,
小韻表.字數,
切語上字表.發音部位 AS 聲母發音部位,
切語上字表.清濁,
切語上字表.發送收,
廣韻聲母對照表.廣韻聲母,
廣韻聲母對照表.雅俗通聲母,
聲母對照表.聲母碼 AS 上字標音,
聲母對照表.聲母國際音標,
聲母對照表.白話字聲母,
聲母對照表.閩拼聲母,
聲母對照表.台羅聲母,
聲母對照表.方音聲母,
切語下字表.攝,
切語下字表.韻目,
切語下字表.調,
切語下字表.呼,
切語下字表.等,
切語下字表.韻母,
切語下字表.等呼,
廣韻韻母對照表.廣韻韻母,
廣韻韻母對照表.雅俗通韻母,
韻母對照表.韻母碼 AS 下字標音,
韻母對照表.韻母國際音標,
韻母對照表.白話字韻母,
韻母對照表.閩拼韻母,
韻母對照表.台羅韻母,
韻母對照表.方音韻母
FROM
小韻表
JOIN
切語上字表 ON 小韻表.上字表識別號 = 切語上字表.識別號
JOIN
廣韻聲母對照表 ON 切語上字表.廣韻聲母識別號 = 廣韻聲母對照表.識別號
JOIN
聲母對照表 ON 廣韻聲母對照表.聲母識別號 = 聲母對照表.識別號
JOIN
切語下字表 ON 小韻表.下字表識別號 = 切語下字表.識別號
JOIN
廣韻韻母對照表 ON 切語下字表.廣韻韻母識別號 = 廣韻韻母對照表.識別號
JOIN
韻母對照表 ON 廣韻韻母對照表.韻母識別號 = 韻母對照表.識別號;
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
# 漢字廣韻標音檢視需求規格
# 漢字廣韻標音檢視規格

建立檢視,以供查詢漢字的《廣韻》標音相關資訊。


查詢某漢字之`[標音]`相關資訊, 需要以下欄位之資料:
參考《SDD-400_廣韻字典資料模型》。某漢字之`[標音]`相關資訊, 由以下欄位資料組合而成:

1. 來自 '字表' 資料表的以下欄位:

@@ -25,19 +24,25 @@
3. 來自 '切語上字表' 資料表的以下欄位:

- 發音部位: text
- 聲母: text
- 清濁: text
- 發聲收: text
- 聲母拼音碼: text
- 發送收: text
- 切語上字集: text

4. 來自 '聲母對照表' 資料表的以下欄位:
4. 來自 '廣韻聲母對照表' 資料表的以下欄位:

- 廣韻聲母: text
- 雅俗通聲母: text

5. 來自 '聲母對照表' 資料表的以下欄位:

- 聲母拼音碼: text
- 國際音標: text
- 十五音: text
- 聲母國際音標: text
- 白話字聲母: text
- 閩拼聲母: text
- 台羅聲母: text
- 方音聲母: text

5. 來自 '切語下字表' 資料表的以下欄位:
6. 來自 '切語下字表' 資料表的以下欄位:

- 韻系列號: integer
- 韻系行號: integer
@@ -53,8 +58,16 @@
- 切語下字集: text
- 等呼: text

6. 來自 '韻母對照表' 資料表的以下欄位:
7. 來自 '廣韻韻母對照表' 資料表的以下欄位:

- 廣韻韻母: text
- 雅俗通韻母: text

8. 來自 '韻母對照表' 資料表的以下欄位:

- 韻母拼音碼: text
- 國際音標: text
- 十五音: text
- 韻母國際音標: text
- 白話字韻母: text
- 閩拼韻母: text
- 台羅韻母: text
- 方音韻母: text
27 changes: 13 additions & 14 deletions docs/URS_003.md → docs/URS400_反切雙字查標音.md
Original file line number Diff line number Diff line change
@@ -1,33 +1,30 @@
# 使用者需求
# 反切雙字查標音需求

## 反切查拚音功能
## 功能描述

### 功能描述

用途:可以在終端機,使用 Python Code 查詢漢字的反切拚音。
用途:使用者透過終端機,以反切之切語上、下字,查詢漢字之標音(或稱:拼音)。

指令格式:

```bash
py a300_反切查拼音.py [參數1:查詢漢字] [參數2:反切拼]
py a400_反切查拼音.py [參數1:切語雙字]
```

參數:

1. 查詢漢字: 1 個中文字
2. 反切拼音: 2 個中文字
2.1 反切上字:反切拼音參數的第 1 個中文字
2.2 反切下字:反切拼音參數的第 2 個中文字
- 切語雙字: 2 個中文字
(1) 反切上字:切語雙字參數的第 1 個中文字
(2) 反切下字:切語雙字參數的第 2 個中文字

### 執行流程
## 執行流程

1. 在終端機輸入指令,如:

```bash
py a300_反切查拼音.py 德紅
python a400_反切查拼音.py 德紅
```

2. a300_反切查拼音.py 的程式碼處理輸入的 2 個參數,完成後輸出如下格式資料
2. 程式碼依據輸入的參數,進行處理,於完成後輸資料如下

```bash
欲查詢拼音之漢字:[參數1:查詢漢字]
@@ -36,9 +33,11 @@ py a300_反切查拼音.py 東 德紅

反切上字為:[反切上字]
反切下字為:[反切下字]
```

## 處理羅輯

## 反切查漢字讀音
### 如何利切語上字及下字判定音調調號

1. 利用上字:
(1) 查聲母的台羅拼音字母;
321 changes: 0 additions & 321 deletions docs/diagrams/SDD-000_建立檢視.md

This file was deleted.

35 changes: 33 additions & 2 deletions mod_廣韻.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,48 @@
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)

def connect_to_db(db_name):
# 創建一個游標
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_name)
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()

return conn


def close_db_connection(conn):
# 關閉數據庫連接
conn.close()

0 comments on commit 6f7371c

Please sign in to comment.