mozillazg / python-pinyin

汉字转拼音(pypinyin)

Home Page:https://pypinyin.readthedocs.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[嗯]字的声母韵母问题

JiaYK opened this issue · comments

commented

运行环境

  • 操作系统(Linux/macOS/Windows):Linux(Ubuntu 18.04)
  • Python 版本: 3.8.1
  • pypinyin 版本:0.47.0

问题描述

开始我以为[嗯]字的拼音错了,在issue里面查了一下,发现了 #109
但是当我想使用[嗯]字的声韵母的时候,发现好像提取不出来
如果加了 neutral_tone_with_five=True 那么韵母就是 5,感觉比较奇怪

问题复现步骤

Python 3.8.1 (default, Jan 8 2020, 22:29:32)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.

from pypinyin import pinyin, Style
txt = '嗯'
shengmu = pinyin(txt, style=Style.INITIALS, neutral_tone_with_five=True)
yunmu = pinyin(txt, style=Style.FINALS_TONE3, neutral_tone_with_five=True)
shengmu
[['']]
yunmu
[['5']]
yunmu = pinyin(txt, style=Style.FINALS_TONE3)
yunmu
[['']]

commented

strict=False,会显示正确的韵母[n2](虽然个人觉得可能n4比较常用)

感谢反馈!

如果加了 neutral_tone_with_five=True 那么韵母就是 5,感觉比较奇怪

这个看起来是个 bug。

BTW, n 不是韵母。倒是可以考虑在获取声母的是否返回 n

commented

嗯嗯,按标准来说,的确没有 n 这个韵母,才发现自己用了这么多年的 嗯嗯 其实都是错的
试了一试,感觉 好像也不是声母的 n ,但是这么做应该比较方便,不然 这个字大多数情况下都要想办法单独再写处理逻辑
百度给的是 ng,但是也没有 ng这个韵母

如果加了 neutral_tone_with_five=True 那么韵母就是 5,感觉比较奇怪

这个问题最新版已修复。当前会返回空字符串,因为它既没有声母也没有韵母。

既没有声母也没有韵母,会导致我们代码挂掉,因为我们用

lazy_pinyin("嗯", neutral_tone_with_five=True, style=Style.INITIALS) 

获取声母,用

lazy_pinyin("嗯", neutral_tone_with_five=True, style=Style.FINALS_TONE3)

获取韵母,一般会认为 finals 这个序列不会有空值,但是存在 嗯 时就会有空值 ..,所以输入中包含 嗯 时我的程序会报错

def _all_tone_three(self, finals: List[str]) -> bool:
    return all(x[-1] == "3" for x in finals)

用 pypinyin==0.44.0 就没有问题,另外 espnet 的依赖里面也写了 pypinyin<=0.44.0 (不知道为啥)
建议 嗯 可以用 en 来做韵母和 恩 保持一致,标贝的标注里是这么干的
image

建议你们有大的改动的时候还是考虑下兼容性,毕竟 pypinyin 在语音合成里面是一个比较基础的库,谢谢