有没有可以将数字拼音转换为带有声调标记的拼音的库?

2023-12-06

只是想知道是否有人知道可以将汉语拼音转换为声调的类库,例如 nin2 hao3 ma 到 nín hǎo ma。它会类似于这个答案,但希望使用 .NET 框架。


这是我对@Greg-Hewgill 的移植蟒蛇算法到 C#。到目前为止我还没有遇到任何问题。

public static string ConvertNumericalPinYinToAccented(string input)
    {
        Dictionary<int, string> PinyinToneMark = new Dictionary<int, string>
        {
            {0, "aoeiuv\u00fc"},
            {1, "\u0101\u014d\u0113\u012b\u016b\u01d6\u01d6"},
            {2, "\u00e1\u00f3\u00e9\u00ed\u00fa\u01d8\u01d8"},
            {3, "\u01ce\u01d2\u011b\u01d0\u01d4\u01da\u01da"},
            {4, "\u00e0\u00f2\u00e8\u00ec\u00f9\u01dc\u01dc"}
        };

        string[] words = input.Split(' ');
        string accented = "";
        string t = "";
        foreach (string pinyin in words)
        {
            foreach (char c in pinyin)
            {
                if (c >= 'a' && c <= 'z')
                {
                    t += c;
                }
                else if (c == ':')
                {
                    if (t[t.Length - 1] == 'u')
                    {
                        t = t.Substring(0, t.Length - 2) + "\u00fc";
                    }
                }
                else
                {
                    if (c >= '0' && c <= '5')
                    {
                        int tone = (int)Char.GetNumericValue(c) % 5;

                        if (tone != 0)
                        {
                            Match match = Regex.Match(t, "[aoeiuv\u00fc]+");
                            if (!match.Success)
                            {
                                t += c;
                            }
                            else if (match.Groups[0].Length == 1)
                            {
                                t = t.Substring(0, match.Groups[0].Index) +
                                    PinyinToneMark[tone][PinyinToneMark[0].IndexOf(match.Groups[0].Value[0])]
                                    + t.Substring(match.Groups[0].Index + match.Groups[0].Length);
                            }
                            else
                            {
                                if (t.Contains("a"))
                                {
                                    t = t.Replace("a", PinyinToneMark[tone][0].ToString());
                                }
                                else if (t.Contains("o"))
                                {
                                    t = t.Replace("o", PinyinToneMark[tone][1].ToString());
                                }
                                else if (t.Contains("e"))
                                {
                                    t = t.Replace("e", PinyinToneMark[tone][2].ToString());
                                }
                                else if (t.Contains("ui"))
                                {
                                    t = t.Replace("i", PinyinToneMark[tone][3].ToString());
                                }
                                else if (t.Contains("iu"))
                                {
                                    t = t.Replace("u", PinyinToneMark[tone][4].ToString());
                                }
                                else
                                {
                                    t += "!";
                                }
                            }
                        }
                    }
                    accented += t;
                    t = "";
                }
            }
            accented += t + " ";
        }
        accented = accented.TrimEnd();
        return accented;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有可以将数字拼音转换为带有声调标记的拼音的库? 的相关文章

  • 平滑手绘曲线

    我有一个允许用户绘制曲线的程序 但这些曲线看起来不太好 它们看起来摇摇欲坠 而且是手绘的 所以我想要一种能够自动平滑它们的算法 我知道平滑过程中存在固有的模糊性 因此它不会每次都完美 但这种算法似乎确实存在于多个绘图包中 并且它们工作得很好
  • 局部函数声明有什么用处吗?

    大多数像我这样的 C 程序员都曾犯过以下错误 class C int main C c declares a function c taking no arguments returning a C not as intended by m
  • 如何从 Qt 应用程序通过 ODBC 连接到 MySQL 数据库?

    我有一个新安装的 MySQL 服务器 它监听 localhost 3306 从 Qt 应用程序连接到它的正确方法是什么 原来我需要将MySQL添加到ODBC数据源 我在遵循这个视频教程后做到了这一点 https youtu be K3GZi
  • 将 dataGridView 中选定的行作为对象检索

    我有一堂这样的课 public partial class AdressBokPerson public long Session get set public string F rnamn get set public string Ef
  • 组合框下拉位置

    我有一个最大化的表单 其中包含 500px 的组合框控件 停靠在右上角 Width 尝试打开组合框后 列表的一半超出了屏幕 如何强制列表显示在表单中 棘手的问题 我找不到解决这个问题的好办法 只是一个解决方法 添加一个新类并粘贴如下所示的代
  • 无法加载程序集问题

    我收到以下错误 无法加载程序集 错误详细信息 System BadImageFormatException 无法加载文件或程序集 文件 或其依赖项之一 该程序集是由比当前加载的运行时更新的运行时构建的 无法加载 该程序集是使用 Net Fr
  • opencv中如何去除二值图像噪声?

    将图像转换为二值图像 黑白 后如果有任何噪音怎么办 我消除了那些不需要的噪音 您可以看到下图的黑色区域内有一些白噪声 我该如何去除噪声 使用opencv http img857 imageshack us img857 999 blackn
  • Linq 合并列表

    我的课 public class Foo public int A get set public List
  • 如何自定义 Google 测试失败消息?

    我编写了一个如下所示的 Google 测试 它将一些计算值与 CSV 文件中预期存储的值进行比较 class SampleTest public testing Test public void setupFile const std st
  • .NET 5 EF Core SaveChangesAsync 因错误而挂起

    尽管这个问题有很多结果 但没有一个真正给我明确的答案 每次我尝试通过 AddAsync 和 SaveChangesAsync 方法插入错误数据 例如重复的主键 时 我都会看到以下日志 执行 DbCommand 失败 15 毫秒 我还在 SQ
  • Type.MakeByRefType 的反义词是什么

    The Type MakeByRefType http msdn microsoft com en us library system type makebyreftype aspx NET 中的方法返回类型的 by ref 版本 例如传递
  • 调用异步方法在视图模型的构造函数中加载数据有警告

    我的视图包含一个 ListView 它显示来自互联网的一些数据 我创建一个异步方法来加载数据并在我的视图模型的构造函数中调用该方法 它有一个警告提示我现在使用await关键字 还有其他解决方案可以在构造函数中异步加载数据吗 有几种可以应用的
  • 如何使用默认电子邮件客户端发送电子邮件?

    我想使用系统的默认电子邮件客户端 雷鸟 outlook 等 从 net windows 窗体应用程序发送电子邮件 我想预设主题和正文 我认为有一种方法可以通过向 Windows 资源管理器发送类似的内容来做到这一点 mailto 电子邮件受
  • VB.NET - 有没有办法在委托中使用可选参数? (或者计划允许这样做?)

    据我了解 在 VS2008 附带的 VB 版本中 委托中不可能有可选参数 但是 我想知道将来是否有任何解决方法或计划将此功能合并到 VB NET 中 我想做的事 Public Delegate Function Deserializer O
  • 如何构建一棵与或树?

    我需要一个支持 与 和 或 的树结构 例如 给定一个正则表达式 如ab c d e 我想把它变成一棵树 所以 一开始我们有两个 或 分支 它可以向下ab or c d e 如果你低头ab分支 你得到两个节点 a and b or a其次是b
  • 使用数据绑定,如何将包含表情符号的文本绑定到标签并使其正确显示?

    我正在编写一个应用程序来连接 WordPress BuddyPress API 该应用程序将允许用户通过 API 相互发送消息 当这些消息包含表情符号时 我很难正确显示它们 以下是 API 返回的消息文本的简短示例 Hi x1f642 ho
  • 选择合适的IDE

    您会推荐使用以下哪种 IDE 语言来在 Windows 下开发涉及识别手势并与操作系统交互的项目 我将使用 OpenCV 库来执行图像处理任务 之后 我将使用 win32 API 或 NET 框架与操作系统交互 具体取决于您建议的工具 性能
  • 如何将System.Windows dll添加到Visual Studio 2010 Express?

    我正在开发一个小型应用程序C and VS2010 as IDE with NET框架4 我想用CaptureSource类以便从笔记本电脑的网络摄像头捕获视频 为此我需要添加一个命名空间System Windows DependencyO
  • 在windows + opengl中选择图形设备

    我知道如何使用 openGL 打开窗口 使用 Win32 或其他工具包 但是当系统有2块显卡时 如何选择要渲染的图形设备 我的编程语言是 C 我专注于 Windows 但任何示例都将受到欢迎 编辑 也许更好地解释我的问题是个好主意 以便添加
  • 实体框架代码首次日期字段创建

    我正在使用实体框架代码优先方法来创建我的数据库表 下面的代码 创建一个DATETIME数据库中的列 但我想创建一个DATE柱子 DataType DataType Date DisplayFormatAttribute ApplyForma

随机推荐

  • XPath获取最大ID

    XML 来源
  • CSS 防止 div flex 拉伸子元素

    div 的时刻flexdisplay 属性会拉伸段落 我似乎遗漏了一些东西 但我认为放在 Flex div 上的任何属性都不会改变这一点 我怎样才能防止这种行为 没有 flex 属性 我得到图像右侧的结果 div display flex
  • String(contentsOf url:URL) 可能会抛出什么类型的异常?

    我正处于重构原型以使其更加灵活的阶段 这意味着我想添加错误处理 我的应用程序非常依赖 String contentsOf url 与处理文件的任何操作一样 它很容易出错 然而 相关 init 方法的签名只是这样写 init contents
  • 无法打开数据库/无法将(数据库)的区域设置更改为“en_US”

    我已阅读解决方案无法将数据库 data data my easymedi controller databases EasyMediInfo db 的区域设置更改为 en US 但这对我没有帮助 我仍然有同样的错误 这些是我的DBHelpe
  • Spark提交抛出错误java.lang.ClassNotFoundException: scala.runtime.java8.JFunction2$mcIII$sp

    我编写了一个字数统计代码 但是当我尝试使用以下命令从 Windows 中的 CMD 运行它时 它会抛出异常 spark submit class com sample WordCount master local file E WordCo
  • 如何使用正则表达式验证多封电子邮件?

    在对 Stackoverflow 进行快速研究后 我无法找到使用正则表达式进行多电子邮件验证的任何解决方案 拆分 JS 函数不适用 但由于某种原因 应用程序后端等待一个电子邮件以 分隔的字符串 以下是要求 应使用以下规则验证电子邮件 A Z
  • 如何知道@RequestMapping的哪个参数被调用

    这是我的 RequestMapping注解 RequestMapping loginBadCredentials loginUserDisabled loginUserNumberExceeded public String errorLo
  • Outlet 无法连接到 CollectionView 单元格中的重复内容

    当我尝试连接已声明为的 UICollectionViewCell 中的 UILabel 时 property nonatomic weak IBOutlet UILabel Title 它表明 插座无法连接到重复内容 我做了一些搜索 发现我
  • 在 Python 中使用 WlanScan 强制 wifi 扫描

    我想知道如何执行WlanScanpython 中的函数用于启动无线网络扫描 我正在使用 python 模块win32wifi 它需要使用获得的句柄WlanOpenHandle和接口 GUIDpInterfaceGuid 我不知道如何获得这个
  • 如何将附加变量传递到下划线模板

    我有一个主干视图 它在下划线模板中呈现搜索结果 由于我想在结果中突出显示搜索词 因此我在模板中使用了以下打印方法 print someKey replace searchTerm b searchTerm b 它按预期工作 但我必须设置se
  • 如何在 SQL Server 2017 中对简单 Json 数组执行Where子句?

    假设我的数据库中有一个名为attributes以具有此值为例 pages Page1 我怎样才能做一个where子句 以便我可以过滤掉其中包含 Page1 的行 select JSON QUERY Attributes pages from
  • 第一次没有创建数据库

    如何使用EF6重新创建数据库 我已经尝试过以下两篇文章 但是 我不知道为什么它不起作用并出现相同的错误 如何在不使用更新数据库的情况下生成启用了迁移的 EF6 数据库 已为上下文启用迁移 但数据库不存在或不包含映射表 我已经在网络服务器上发
  • 使用 AR(1) 项进行 OLS 估计

    由于我无法解释的原因 因为我不能 不是因为我不想 我办公室使用的流程需要在 Eviews 上运行一些回归 Eviews 上使用的方程规范为 dependent variable c independent variable ar 1 此外
  • OpenCover MSBuild 集成 - 未生成结果

    让 OpenCover 在我的机器上工作后 下一步是让它与构建服务器一起工作 我一直在尝试将 OpenCover 与 Bamboo Build Server 上的 MSBuild 集成 我已按如下方式修改了 Build proj 以在构建解
  • Laravel 5 中的加密和解密

    我一直在寻找有关在 Laravel 中加密和解密值的想法 例如 VIN 号 员工 ID 卡号 社会保障号等 最近在 Laravel 网站上发现了这一点 https laravel com docs 5 6 加密 我的问题是 如何在刀片模板上
  • imshow() 将灰色图像显示为白色图像

    我计算了一个值在 0 到 255 之间的图像 当我使用 imageview 时 图像以灰度正确显示 但是当我想保存该图像或用 imshow 显示它时 我有一个白色图像 或者有时到处都有一些黑色像素 而使用 imageview 时 有人能帮我
  • YT 未定义 - 未捕获的 ReferenceError:[youtube api]

    删除了不需要的代码演示 嘿 我正在实现 Youtube Video Player Api 我在控制台中看到某种错误 视频如何完美播放 但我想知道为什么会出现错误 如果我将代码保留在骨架模式之外 就不会出现任何错误 有人可以解释一下吗 Tha
  • 具有自定义列渲染器排序的 Rally 网格

    背景 当我尝试按使用自定义渲染器的列进行排序时 没有任何反应 它将排序从 ASC 更改为 DESC 来回更改 但数据的顺序从未改变 我假设这是因为没有定义如何对我使用自定义渲染器操作的数据进行排序 但我似乎找不到向列添加排序器或排序函数的方
  • Chrome 放弃了 Java 支持

    我在我的应用程序中使用 Java 小程序 今天我惊讶地看到了redirect来自我的页面和来自 java 的下一条消息 In details我读过有关 Chrome 放弃 NPAPI 支持的报道 最近 谷歌修改了他们的计划 现在声明他们计划
  • 有没有可以将数字拼音转换为带有声调标记的拼音的库?

    只是想知道是否有人知道可以将汉语拼音转换为声调的类库 例如 nin2 hao3 ma 到 n n h o ma 它会类似于这个答案 但希望使用 NET 框架 这是我对 Greg Hewgill 的移植蟒蛇算法到 C 到目前为止我还没有遇到任