python-pinyin icon indicating copy to clipboard operation
python-pinyin copied to clipboard

[嗯]字的声母韵母问题

Open JiaYK opened this issue 3 years ago • 5 comments

运行环境

  • 操作系统(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 avatar Aug 08 '22 03:08 JiaYK

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

JiaYK avatar Aug 08 '22 03:08 JiaYK

感谢反馈!

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

这个看起来是个 bug。

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

mozillazg avatar Aug 08 '22 14:08 mozillazg

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

JiaYK avatar Aug 09 '22 02:08 JiaYK

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

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

bors-homu avatar Aug 26 '22 12:08 bors-homu

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

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

yt605155624 avatar Sep 08 '22 10:09 yt605155624