banner
「云华」CloudSino

网络一隅/Net`Corner

愿我的祝福与你同在!
github
bilibili
zhihu
steam
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」一般作为韵尾,因此这条规则不作使用

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。