banner
「雲華」CloudSino

網絡一隅¦Net`Corner

願我的祝福與你同在︕
github
bilibili
zhihu
steam
discord user
misskey
follow
email

(偽)完全體漢語拼音轉換器

接上文,之前發過一篇「漢語拼音的寫法 - 從精通到打不出來

漢語拼音轉換器算是比較成熟了,但是一些冷門的規則依然支持較差 (那就自己手搓一個吧

目前用下來使用體驗最好的是谷歌翻譯,少數能實現句首大寫,按詞分割還免費無廣的,

本文就當作對接其的二次轉換吧 (

圖片

以下寫法均遵循寫法現行《漢語拼音方案》(PDF).


簡短拼式所使用的特殊字符:

圖片

圖片

  • zh → ẑ / Zh → Ẑ

  • ch → ĉ / Ch → Ĉ

  • sh → ŝ / Sh → Ŝ

  • ng → ŋ / ( NG → Ŋ ) 1

這幾個雙字母組合「 ẑ、ŝ、ĉ」好搞,但後面的「ŋ」就有點麻煩了,如:

  • 相安「xiang'an」
  • 線杆「xiangan」

圖片

這是因為只有在如「a/o/e」韻母開頭的音節前,自動 添加隔音符號以防造成混淆,而不在聲母前添加

在「i/u/ü」前沒有聲母的時候,添加「y/w」寫作韻頭字母

所以,為了分別這是『以「ng」結尾的音節』還是『以「n」結尾和以「g」開頭的音節』

當且僅當,「ng」後 不接 韻母 [āáǎàaēéěèeōóǒòoīíǐìiūúǔùuüǖǘǚǜ] 時,轉換為「ŋ」

或者僅在後接聲母 [bpmfdtnlgkhjqxzcsr] 時轉換應該也可以 (


兒化音

圖片

圖片

兒化音的「er」一般顯示為輕聲,即不標聲調
私查詢了漢典, 在這裡沒有找到輕聲的單獨成字的「er」

姑且就全部替換吧:

  • 「(此處有一空格) er」→「r」

代碼部分:

可以看出來不難實現,寫個正則表達式然後全部替換就 OK 了

HTML
  
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>實時預覽</title>
    <style>
        body {
            margin: 0;
            padding: 0;
            font-family: 'SimHei', sans-serif;
            display: flex;
            height: 100vh;
            background-color: #f5f5f5;
        }
        .container {
            display: flex;
            width: 100%;
        }
        .textarea-container {
            width: 50%;
            height: 100%;
        }
        textarea {
            width: 100%;
            height: 100%;
            border: none;
            padding: 10px;
            font-size: 16px;
            resize: none;
            box-sizing: border-box;
            outline: none;
            font-family: inherit; /        }
    </style>
</head>
<body>
    <div class="container">
        <div class="textarea-container">
            <textarea id="input" placeholder="請於此輸入拼音..."></textarea>
        </div>
        <div class="textarea-container">
            <textarea id="output" placeholder="顯示轉換後內容..." readonly></textarea>
        </div>
    </div>

    <script>
        const input = document.getElementById('input');
        const output = document.getElementById('output');

        function transformText(text) {

            text = text.replace(/Zh/g, 'Ẑ')
                       .replace(/zh/g, 'ẑ')
                       .replace(/Ch/g, 'Ĉ')
                       .replace(/ch/g, 'ĉ')
                       .replace(/Sh/g, 'Ŝ')
                       .replace(/sh/g, 'ŝ')
                       .replace(/ er/g, 'r'); 

            text = text.replace(/ng(?![āáǎàaēéěèeōóǒòoīíǐìiūúǔùuüǖǘǚǜ])/g, 'ŋ');

            return text;
        }

        input.addEventListener('input', () => {
            const transformed = transformText(input.value);
            output.value = transformed;
        });
    </script>
</body>
</html>

https://wikidot.eu.org/tool.html
單頁工具掛這裡了


沒用上的:

「ê」以及那幾個鼻音字母發音多為口語使用,書面語使用極少,這裡請允許筆者忽略帶過.

Footnotes#

  1. 谷歌翻譯自動執行句首大寫,「ng」一般作為韻尾,因此這條規則不作使用

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。