Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[嗯]字的声母韵母问题 #284

Open
JiaYK opened this issue Aug 8, 2022 · 5 comments
Open

[嗯]字的声母韵母问题 #284

JiaYK opened this issue Aug 8, 2022 · 5 comments
Labels

Comments

@JiaYK
Copy link

JiaYK commented Aug 8, 2022

运行环境

  • 操作系统(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
[['']]

@JiaYK
Copy link
Author

JiaYK commented Aug 8, 2022

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

@mozillazg
Copy link
Owner

mozillazg commented Aug 8, 2022

感谢反馈!

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

这个看起来是个 bug。

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

@mozillazg mozillazg added the bug label Aug 8, 2022
@JiaYK
Copy link
Author

JiaYK commented Aug 9, 2022

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

@bors-homu
Copy link
Collaborator

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

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

@yt605155624
Copy link

yt605155624 commented Sep 8, 2022

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

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 在语音合成里面是一个比较基础的库,谢谢

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants