
示例工程【免费下载链接】Windows-universal-samplesAPI samples for the Universal Windows Platform.项目地址https://gitcode.com/gh_mirrors/wi/Windows-universal-samples点击查看免费下载导读本文围绕 Windows-universal-samples 仓库中的Japanese phonetic analysis sample日语语音分析示例展开该示例演示了如何借助 UWP 的Windows.Globalization.JapanesePhoneticAnalyzer类对日语文本进行语音学分析将文本切分为「词」或「发音单位」并为每个片段附加对应的读音Yomi信息。读完本文你将掌握GetWords方法的完整调用方式、monoRuby参数的含义、JapanesePhoneme结果对象的三个关键属性DisplayText、YomiText、IsPhraseStart以及该示例在 C#、C/CX、C/WinRT 与已归档 JavaScript 四种语言实现下的写法差异与构建运行方法。关联文档archived/JapanesePhoneticAnalysis/README.md当前活跃版本位于 Samples/JapanesePhoneticAnalysis/README.md。示例概览日语语音分析能做什么日语文本在显示形态汉字、平假名、片假名、数字、符号等与读音发音之间存在明显差异例如「今日」读作「きょう」。该示例的核心目的就是演示如何利用系统级 API 自动完成这种「文本 → 词/发音单位 读音」的转换典型应用场景包括日语学习工具为汉字标注假名读音振假名 / furigana文本转语音TTS预处理确定每个词条的读音后再送入语音合成日语输入法候选生成、文本检索与分词统计。示例实现的任务非常聚焦共一个场景Analyze Japanese text—— 使用GetWords方法把日语文本切分每个片段单独成行切分粒度可以是「词」也可以是「发音单位」。注意本示例属于 UWP 功能示例大集合中的一员。按文档说明通用 Windows 应用示例需要 Visual Studio 2017 才能编译需要 Windows 10 才能运行。核心 APIJapanesePhoneticAnalyzer 与 GetWords类与方法的定位示例所依赖的核心类型位于Windows.Globalization命名空间JapanesePhoneticAnalyzer提供对日语字符串进行语音学分析即把日文拆成词或发音单位并给出读音的静态方法JapanesePhoneme表示分析结果中的一个片段音素 / 词条是GetWords返回的集合元素类型GetWords(String input, Boolean monoRuby)输入待分析的日语文本与切分模式返回只读集合IReadOnlyListJapanesePhonemeC/CX 中对应IVectorViewJapanesePhoneme^。从 C# 实现 Scenario1_Analyze.xaml.cs 可以看到最直接的调用形态using Windows.Globalization; bool monoRuby MonoRubyRadioButton.IsChecked true; // Analyze the Japanese text according to the specified algorithm. // The maximum length of the input string is 100 characters. IReadOnlyListJapanesePhoneme words JapanesePhoneticAnalyzer.GetWords(input, monoRuby);monoRuby 参数两种切分粒度monoRuby参数决定输出片段的语义粒度源码注释给出了权威说明monoRuby false结果中的每个元素对应一个日文单词wordmonoRuby true结果中的每个元素对应一个或多个字符构成的发音单位unit of pronunciation即把这些字符视为一个整体读出。界面上的两个单选框与之一一对应见下文「界面与交互」默认选中「Break into words」即monoRuby false。JapanesePhoneme 的三个关键属性遍历结果时示例用到了JapanesePhoneme的以下成员属性含义DisplayText片段的显示文本与传入GetWords的输入字符一致原文照搬YomiText片段的读音文本Yomi通常由平假名字符构成但需注意对于表情符号等特殊显示文本读音中可能包含非平假名字符IsPhraseStart该片段是否是一个短语phrase的开头示例利用它决定是否在输出中另起一行以 C# 为例的遍历与格式化逻辑StringBuilder output new StringBuilder(); foreach (JapanesePhoneme word in words) { // Put each phrase on its own line. if (output.Length ! 0 word.IsPhraseStart) { output.AppendLine(); } // DisplayText 与输入一致YomiText 为读音通常为平假名。 output.AppendFormat({0}({1}), word.DisplayText, word.YomiText); }输出按「显示文本(读音文本)」拼接短语开头换行。典型示意具体切分结果以 API 实际行为为准输入「今日はいい天気です」在按词切分时大致呈现为今日(きょう)は(は)いい(いい)天気(てんき)です(です)这样的多行/多段形式而选择按发音单位切分时则会合并成更少的、以发音为单位的片段。输入长度限制与空结果处理三套语言实现C#、C/CX、C/WinRT的源码注释中都明确写有同一约束输入字符串的最大长度为 100 个字符The maximum length of the input string is 100 characters.。因此示例对「输入非空但结果为 0」的情况做了专门的错误提示if (input ! words.Count 0) { // 输入非空但结果为空 ⇒ 输入过长无法完成分析。 MainPage.Current.NotifyUser(Failed to get words from the input text. The input text is too long to analyze., NotifyType.ErrorMessage); } else { MainPage.Current.NotifyUser(Got words from the input text successfully., NotifyType.StatusMessage); }这段逻辑说明GetWords返回空集合并不代表分析失败只有当输入非空且结果为空时才可判定为「输入超过 100 字符上限无法分析」。四种语言实现的横向对比该示例在仓库中保留了多种语言版本调用同一 WinRT API写法各有特点C#活跃版本完整实现见 Samples/JapanesePhoneticAnalysis/cs/Scenario1_Analyze.xaml.cs使用IReadOnlyListJapanesePhoneme接收结果配合StringBuilder拼装输出。C/CX活跃版本见 Samples/JapanesePhoneticAnalysis/cpp/Scenario1_Analyze.xaml.cpp使用IVectorViewJapanesePhoneme^^与范围 for 循环using namespace Windows::Globalization; bool monoRuby MonoRubyRadioButton-IsChecked-Value; IVectorViewJapanesePhoneme^^ words JapanesePhoneticAnalyzer::GetWords(input, monoRuby); for (JapanesePhoneme^ word : words) { if (output-Length() ! 0 word-IsPhraseStart) { output L\r\n; } output word-DisplayText L( word-YomiText L); }C/WinRT活跃版本见 Samples/JapanesePhoneticAnalysis/cppwinrt/Scenario1_Analyze.cpp采用现代 C 投影用winrt::hstring、IVectorViewJapanesePhoneme与std::wostringstreamusing namespace winrt; using namespace Windows::Globalization; bool monoRuby MonoRubyRadioButton().IsChecked().Value(); IVectorViewJapanesePhoneme words JapanesePhoneticAnalyzer::GetWords(input, monoRuby); for (JapanesePhoneme word : words) { if (output.tellp() ! 0 word.IsPhraseStart()) { output std::endl; } output std::wstring_view{ word.DisplayText() } L( std::wstring_view{ word.YomiText() } ); }JavaScript已归档版本归档版本 archived/JapanesePhoneticAnalysis/js/js/scenario1-analyze.js 使用 WinJS 页面模型与Windows.Globalization.JapanesePhoneticAnalyzer.getWords(input, monoRuby)var monoRuby monoRubyRadioButton.checked; var words Windows.Globalization.JapanesePhoneticAnalyzer.getWords(input, monoRuby); words.forEach(function (word) { if (output ! word.isPhraseStart) { output \n; } output word.displayText ( word.yomiText ); });值得注意活跃版 Samples/JapanesePhoneticAnalysis/README.md 的 Related samples 一节明确将 JavaScript 版本标记为archived已归档因此新项目应优先选择 C#、C/CX 或 C/WinRT 实现。界面与交互设计XAML 版本C# / C / C/WinRT 共用三套语言共享同一个界面定义 Samples/JapanesePhoneticAnalysis/shared/Scenario1_Analyze.xaml控件布局如下TextBoxInputTextBox日语输入框预置示例文本「今日はいい天気です」RadioButtonWordRadioButton默认选中Break into words —— 对应monoRuby falseRadioButtonMonoRubyRadioButtonBreak into units of pronunciation —— 对应monoRuby trueButtonGetPhrasesButtonAnalyze点击触发AnalyzeButton_ClickTextBlockOutputTextBlock展示分析结果。HTML 版本已归档归档版界面见 archived/JapanesePhoneticAnalysis/js/html/scenario1-analyze.html控件语义与 XAML 版本一一对应inputText预置值同为「今日はいい天気です」、wordRadioButton、monoRubyRadioButton、getPhrasesButton、outputText并通过 scenario1-analyze.js 中的ready回调把按钮点击绑定到getPhrases处理函数。使用流程根据 README 的「How to use the sample」一节操作步骤为在编辑框中输入日语文本或直接使用示例预置文本选择切分方式按词切分或按发音单位切分点击Analyze按钮执行语音分析。构建与运行指南系统要求README 明确列出的环境要求Client客户端Windows 10Server服务端Windows Server 2016 Technical PreviewPhone不支持注活跃版 README 将系统要求简写为 Windows 10 Desktop两者指向一致 —— 该示例面向 Windows 10 桌面版不支持手机。构建步骤若以 ZIP 方式下载整个示例集合请解压整个压缩包而不要只解压目标示例所在文件夹解压不完整会导致共享依赖缺失启动 Microsoft Visual Studio 2017选择FileOpenProject/Solution从解压目录进入Samples子目录再进入JapanesePhoneticAnalysis子目录最后进入首选语言对应的子目录C、C# 或 JavaScript双击其中的解决方案文件.slnCSamples/JapanesePhoneticAnalysis/cpp/JapanesePhoneticAnalysis.slnC/WinRTSamples/JapanesePhoneticAnalysis/cppwinrt/JapanesePhoneticAnalysis.slnC#Samples/JapanesePhoneticAnalysis/cs/JapanesePhoneticAnalysis.slnJavaScript归档archived/JapanesePhoneticAnalysis/js/JapanesePhoneticAnalysis.sln按CtrlShiftB或选择BuildBuild Solution编译。运行与部署仅部署选择BuildDeploy Solution调试并运行按F5或选择DebugStart Debugging不调试直接运行按CtrlF5或选择DebugStart Without Debugging。相关主题与延伸阅读README 的 Related topics 一节给出了与本示例相关联的两个方向关联示例Unicode —— 同样属于全球化与本地化范畴的 UWP 示例可对照学习字符与编码处理API 参考Windows.Globalization.JapanesePhoneticAnalyzer类的官方文档可在 MSDN / Microsoft Learn 检索该类型名称获取完整说明包括GetWords的重载与JapanesePhoneme的全部成员。从仓库结构看该示例在 Samples/JapanesePhoneticAnalysis 下按cpp、cppwinrt、cs、shared四个目录组织shared目录承载三种语言共用的 XAML 界面归档版则保留了js目录下的 HTML/JS 实现。若需深入了解本示例的代码级细节可依次查阅上述语言目录中的Scenario1_Analyze.*文件与共享 XAML。赞分享示例工程【免费下载链接】Windows-universal-samplesAPI samples for the Universal Windows Platform.项目地址https://gitcode.com/gh_mirrors/wi/Windows-universal-samples点击查看免费下载相关推荐TBB concurrent_set 非成员字典序比较运算符接口语义与源码实现解析TBB concurrent_set 非成员字典序比较运算符接口语义与源码实现解析 在 mold 链接器仓库中 third party/tbb 目录内嵌了一示例工程LunaTranslator 日语分词与注音显示完全指南MeCab UniDic 词典配置、假名注音与语法高亮LunaTranslator 日语分词与注音显示完全指南MeCab UniDic 词典配置、假名注音与语法高亮 LunaTranslator视觉小说翻译器桌面应用OCR人工智能Chat2DB技术选型深度解析开源版与企业版架构对比决策指南Chat2DB技术选型深度解析开源版与企业版架构对比决策指南 在数据库工具选型过程中技术决策者面临的核心问题是如何在开源社区版与商业企业版之间做出明智选择。数据库客户端AI 应用数据分析上一篇为什么选择mootdxPython金融数据分析的终极免费方案下一篇终极指南如何免费使用微软TTS语音合成工具tts-vue实现离线语音功能创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考