65.9K
CodeProject 正在变化。 阅读更多。
Home

Semafon™ 语义电话号码到文本转换器

starIconstarIconstarIconstarIconstarIcon

5.00/5 (6投票s)

2015 年 10 月 8 日

CPOL

17分钟阅读

viewsIcon

40042

应用程序实现了双向语义电话号码到文本的转换器,并扩展了新颖的彩票+测验引擎

公告

Semafon™ 有两种版本: Windows/WPF 应用程序和响应式 Web 应用程序。

Semafon™ for Web

Web 应用程序可在:Semafon.com 上找到。搜索引擎实现了 高效的多线程并行处理算法。已添加关于最小词长度的附加过滤选项。 响应式 UI 网页设计针对纵向/横向设备方向进行了优化,使此 Web 应用程序能够自动适应各种硬件平台,包括:台式机、笔记本电脑、平板电脑/phablets 以及基本上任何手机。该应用程序针对触摸屏和标准键盘/鼠标操作进行了优化。

下面的演示屏幕截图展示了在电话号码 263-7422 上进行的示例搜索,结果是几个最佳单词匹配: AMERICA (7个字母) 和 ERICA (5个字母)。当前版本实现了 5 种语言过滤器。它还允许无过滤操作模式,使用标准的电话键盘编码规则,生成与输入号码相关的所有可能的字母数字组合。

Semafon™ for Win

Windows 版应用程序软件 Semafon™ 实现了增强语音的多模式 UI,带有无边框应用程序窗口和 10 种用户可选的背景主题,包括多种半透明主题。该应用程序可以在任何配备 Windows OS 7/8 的硬件 PC 平台上完全自主运行,无需互联网连接,具有各种外形尺寸(台式机/笔记本电脑/平板电脑)。它支持传统的 PC 鼠标和触摸屏操作。多语言词典包含 30,000 多个英语、西班牙语、德语和俄语单词。

Semaphon™ SP-300 演示屏幕截图

竞赛条目概述

该应用程序是 Intel® App Innovation Contest 2013 的参赛作品

竞赛凭证

  • 目标平台: 一体机 (AIO) 

  • 类别: 娱乐

应用程序 Semaphon™ 具有模块化架构,由 3 个核心组件组成

上述模块相辅相成;它们可以集成在单个应用程序中(如建议的),或用作独立的 Windows 应用程序。 详细描述、示例代码片段和实现技巧/最佳实践将在以下各节中进行彻底讨论。

  • 双向“号码转文本”和“文本转号码”语义转换,对应于标准电话键盘编码方案(例如,单词 AMERICA 对应电话号码 263-7422);此模块已在现有的 CoolPhone™ iCP-707 应用程序中部分实现。
  • 新颖的“语义电话”抽奖引擎,基于使用“语义”电话号码作为抽奖条目的创新理念,允许根据随机选择的最多包含 7 个字母的单词来选择获胜者,该单词与所有者的电话号码匹配;此模块目前正在开发中。 抽奖规则/策略的多种变体,以及与问答游戏模块的进一步扩展将在后续各节中更详细地讨论。
  • 将在抽奖结束后添加问答游戏,以根据获胜者对测验答案的准确性来按比例分配奖品价值(增加或减少)。问答引擎和相应的独特内容已作为在线 HTML5 应用程序开发。
  • 应用程序的预期用途 

    功能/版本矩阵和潜在用例列在下面的表 1 和表 2 中

    表 1:个人用户功能/版本矩阵,适用于最常见的用例
    版本 特点 词典 数字 语音
    Lite 基本电话号码转文本转换,无词典 N/A <=7 TTS
    标准版 电话号码转文本转换,可选内部词典过滤 10,000 个单词 <=7 TTS
    Pro 电话号码转文本转换,可选内部词典过滤 20,000 个单词 <=7 ASR/TTS
    Ultimate 电话号码转文本转换,可选内部词典过滤  50,000 个单词 <=7 ASR/TTS
    国际 包含选定的本地词典,其中包含可以使用标准英文字母键入的单词 3,000 个单词 <=7 TTS
     
    表 2:拟议应用程序的潜在用例
    用户 用例 版本
    个人 通过查找有趣的字母单词组合来自定义电话簿,例如,电话号码 452-6687 对应单词 'GLAMOUR' 任意
    商业通用 查找其联系电话的描述性字母单词组合,例如,电话号码 327-4466 对应单词 'FASHION' 任意
    电信 提供用户自定义的对应单词的电话号码 Ultimate
    彩票 新颖的抽奖/彩票类型,基于随机选择的 7 个字母单词,对应于“语义正确”的全国性或指定区号(例如,纽约市的 212、646 或 718)的电话号码 (例如,纽约市的 212、646 或 718) Ultimate
 
  • 应用程序开发方法

    应用程序开发方法:拟议应用程序应利用 AIO 的新颖 UI 功能和 Windows 操作系统平台的能力,特别是 .NET/WPF 框架和语音技术(TTS/ASR)。开发策略基于程序关注点分离的基石原则,即:所有布局和美学增强都通过 WPF/XAML 实现,数据内容存储在嵌入式 SQL CE 中并由 .NET 中包含的相应数据访问库进行操作,算法部分通过托管代码实现。

  • 语言和框架

    应用程序代码库将使用 C# 语言和核心 .NET 框架库进行开发。此外,还将使用 Microsoft SQL Server Compact edition (SQL CE) 和相应的数据访问库。

关于作者

Dr. Alexander Bell 是一位微软技术专家,拥有从 DOS 到 Win 8 的开发经验。他积极参与在线开发社区的数字生活(在 Codeproject 上发表了 21 篇文章和 36 个技巧)。同时,Dr. Bell 本人完成了 10 多个企业级 FLCD 项目。除了他的专业职责,Alexander 还深爱数字摄影、古典音乐和艺术。

第一轮,关键竞赛理念

创新和用户体验

拟议应用程序将基于几项创新理念构建

  • 独特专有的 Semaphon™“语义”电话号码转文本转换引擎
  • 新颖的高度美观的无边框 WPF 窗口解决方案,具有独特的专有调整大小功能
  • 单窗口解决方案,提供功能区域之间的直观导航 和“分屏”区域
  • 新颖高效的 MMUI,利用 AIO 的多点触控功能和语音增强(ASR/TTS)
  • 独特专有的搜索算法,实现为并行函数
  • 专有的 SQL CE 数据访问库扩展
  • 独特专有的问答引擎  
  • 独特专有的纽约问答内容
  • 独特专有的英语和俄语词典数据库,包含最多 7 个字母的单词 
  • 独特专有的 Semaphon™(“语义电话号码”)抽奖引擎

关键技术赋能载体的使用

  • AIO 的屏幕分辨率允许高数据密度和高效的“分屏”操作,具有多个功能区域 
  • 利用 AIO 的多点触控功能并结合无边框 WPF 窗口实现 UX 改进
  • MMUI 语音增强(ASR/TTS),利用 AIO 的多媒体功能和 .NET 语音库
  • 大屏幕 AIO(联想 Horizon 27")非常适合在公共场所或作为电视节目演示的拟议抽奖活动
  • 多核 CPU 供电的 AIO 以提高 TPL 基础转换算法的性能
  • 语音命令可以极大地扩展 MMUI 的功能并增加应用程序的娱乐性
  • 多个外部 HID 设备补充 AIO,以提供更好的 UX 和娱乐因素

拟议应用程序在娱乐类别中的可行性和意义 

  • 拟议应用程序将允许个人用户通过查找与数字电话号码对应的语义正确且易于记忆的单词来定制他们的电话簿。用这种“语义”电话号码组织电话簿记录是一种非常有趣实用的体验 
  • 电信企业可以使用拟议的应用程序向企业/个人客户提供“语义”电话号码
  • 娱乐行业可以从拟议的新颖“语义”电话号码彩票/抽奖活动中获益(例如,暂定名为 Lotto-212,或纽约曼哈顿的 Lotto-646,或纽约市其他地区的 Lotto-718)

创意描述和实现细节 

将在以下各节中提供拟议应用程序概念和实现级别以及相应的程序任务/挑战/解决方案的详细描述。文章主体中包含的多个屏幕截图阐明了 UI 实现和使用的核心概念。选定的编码技术、技巧和其他最佳实践将在项目进展中发布。

背景

一点理论和 FYI 

常规电话键盘除了数字外,还包含与数字对应的字母,0 和 1 除外,它们不匹配任何字母(参见图 1)。因此,任何电话号码中的数字组合都有多个字母数字或纯字母匹配,其中一些包含有意义的单词甚至短语,这比一系列看似随机的数字更容易记住。因此,例如,电话号码:263-7422 对应单词“AMERICA”(参见图 2)。以下是“语义”电话号码转文本转换的示例

  • 776-5328 | PROJECT
  • 266-8378 | CONTEST
  • 946-3697 | WINDOWS  
  • 782-2377 | SUCCESS
  • 786-6371 | RUNNER-1 
  • 788-3469 | STUDIO-9
  • 194-6637 |  1-WINNER 

值得一提的是,文本到数字的转换(为确定起见称为“直接”转换)代表“一对一”关系,而数字到文本(即反向)转换对应于“一对多”关系。换句话说,任何电话号码都可以与各种字母数字组合相关联,从而使“反向”数字到文本转换和查找“语义正确”集合成为更具挑战性的编程挑战。

CoolPhone™ iCP-707 的当前版本实现了对应于包含 50,000 多个条目(最多 7 个字母的单词)的英语词典的数据库,以及利用 Microsoft TPL 多线程/并行函数和 Intel CPU 多核功能的相当复杂的搜索引擎(典型的现代高端 AIO)。该应用程序还实现了基于某些英/俄字符图形相似性的独特专有俄语本地化技术(如果存在此类相似性,该技术可以扩展到任何其他语言)。

现有的 CoolPhone™ 应用程序和计划的扩展

现有应用程序 CoolPhone™ iCP-707 实现了 MMUI 语音增强的创新无边框 WPF 窗口,具有独特的专有移动/调整大小功能(请注意右上角的窗口控件框)和增强语音的 GUI(又名 MMUI),通过 TTS 向用户提供指导性语音消息(请参见带有典型“播放”、“停止”按钮的控件框,如图 1-图 3 所示)。计划的新版本(CoolPhone™ 8) 应实现扩展的语音命令集,例如,根据麦克风输入的可用性/质量在布局调色板、数字输入等之间切换。

图 1: CoolPhone™ iCP-707 示例屏幕截图显示了对应于电话号码 263-7422 的所有未过滤文本匹配

图 2: CoolPhone™ iCP-707 示例屏幕截图显示了对应于电话号码 263-7422 的内部词典过滤匹配,以“AMERICA”开头

图 3: CoolPhone™ iCP-707 示例屏幕截图对应于相同的电话号码 263-7422,显示了不同的(“LIGHT”)主题 

现有应用程序可以处理最多 7 位数字的号码;输入可以包含少于 7 位数字;例如,6 位数字 946369 匹配单词“WINDOW”。现有应用程序和计划中的应用程序都可以独立运行,完全无需互联网连接,从而妥善解决了隐私问题。

内置词典 

所有版本都附带内置英语词典,用于过滤和查找与数字电话号码相关的“语义正确”的字母组合。国际版还包含独特的专有俄语词典,由最多 7 个字母的单词组成,这些单词可以用拉丁字符键入(例如,“C”或“T”字母同时包含在西里尔/拉丁字母表中;在这种过滤类型的上下文中,语音差异不重要)。 到目前为止,内置的英语词典包含以下分布的单词条目

  • 7 个字母的单词:24K
  • 6 个字母的单词:16K
  • 5 个字母的单词:8.5K
  • 4 个字母的单词:3.7K
  • 3 个字母的单词:0.6K 
新颖的 Semaphon™“语义”电话号码抽奖活动 

基于 Semaphon™ 引擎生成的语义正确电话号码的抽奖活动的想法非常直观和直接。它可以全国范围或按特定区号进行。为了清晰起见,我们假设抽奖活动在纽约市进行,因此区号将对应于 212、646 或 718(还可以添加 347)。拥有此特定区号的电话所有者自动注册/有资格参加此类新颖的“纽约彩票”。抽奖机构可以定期进行抽奖,通过从应用程序词典对应的“池”中随机选择单词条目。为确保可信度,官方规则可能需要两步“随机化”;首先,将由 N 位不同的指定受托人(例如,纽约市的 10 所教育机构)随机选择一个单词,然后使用一些高度可见/可追溯的工具(可能通过电视播放)从这 10 个条目中进行最终单词选择。特定彩票抽奖的获胜者将从赞助的企业实体、基金会等获得一些宣传品。可能会有许多类型的基于“语义正确”电话号码的抽奖活动,具有不同的场景/规则和获胜几率,如下面部分列出的

"7 选 7 Semaphon™ 彩票"  

从最直接的“7 选 7”彩票类型开始:获胜者应通过拥有与该随机单词完全匹配的电话号码来选出(例如,如果单词是“ANDROID”,则在上述每个区号中的获胜电话号码是 263-7643)。7 个字母单词单次抽奖的获胜几率约为 1/10m。

"6/7 Semaphon™ 彩票"

此变体除了 7 选 7 的“大奖”外,还可能包括对应于 6/7 个字母的小奖项(随机抽取 6 个字母单词),其几率远高于第一个(例如,如果随机选择的单词是“STUDIO”,则所有获胜电话号码都将包含以数字组合“788346”开头或结尾的号码(可能 20 位获胜者)。相同的想法可以进一步推断,以建立各种基于“CoolPhone”号码的抽奖活动。

被动 vs 主动参与 

在“被动”场景中,任何拥有电话的用户,无论本地区号还是全国范围(取决于具体规则),都有资格参加抽奖。抽奖完成后,将呼叫获胜号码,提供奖品或一些宣传品。

相反,“主动”参与需要用户注册特定抽奖活动,可能需要支付一些初始费用(注意:后者可能被视为“赌博”并在某些地区被禁止)。抽奖将从注册用户池中识别获胜者。

为抽奖活动增加更多教育娱乐性:纽约问答

上述抽奖活动可以实施第二轮,以结合一些教育方面增加更多娱乐性,即:问答。为了概念上的清晰,假设抽奖活动在纽约市进行(对应区号:212、646 和 718),那么在第一轮中选出的“CoolPhone”号码获胜者将晋级第二轮,需要回答纽约问答。此类问答可以包含多个问答题,最终奖品将取决于参赛者在回答这些问题上的成功程度。规则可以设置为“全有或全无”,或者稍微宽松一些,按正确答案百分比按比例分配。 而不是因错误答案而受到惩罚,它可以反过来运作,奖励获胜者每个正确答案,例如奖品“翻倍”选项等。

输入设备 (HID)

利用各种 HID 的新颖 MMUI 将有助于使抽奖活动更具娱乐性。例如,抽奖过程可能不仅仅实现为简单的随机生成器,而是包含一些人为互动。这可能包括“多鼠标”输入(是的,没错:您可以将多个鼠标连接到 PC,它们将很好地协同工作。“完美和谐”。这个功能本身就可以促使开发基于竞争鼠标移动/动作理念的各种多人 PG 游戏)。

分屏和多鼠标输入

在此场景中,几位表演者必须使用分屏模式和多个鼠标输入(每个表演者一个)输入一些任意数字。例如,三位表演者可以在各自的屏幕区域运行三个随机生成器来生成一组随机数字。系统将根据此集合计算聚合值,例如用于从应用程序词典中选择 7 个字母单词的索引。 将根据上一小节中指定的规则选择获胜者。这个想法可以进一步扩展到任何类型的多 HID 设备,遵循现代 MMUI 概念,例如:无线 PC 演示器硬件(如 Logitech Wireless Presenters R400/R600,但最推荐的是不包含激光笔的,因为存在潜在危险),甚至无线麦克风来输入语音命令(应用程序将包含 ASR 扩展)。

潜在的传输渠道/受众

拟议应用程序可以作为电视抽奖活动的平台,通过传统电视频道或使用交互式 WebTV 频道(基于互联网社区生成内容的 RIA)进行广播。在这两种情况下,为了使节目更具娱乐性,强烈建议在具有大触摸屏(如 AIO 联想 Horizon 27")和各种 HID 设备的复杂硬件平台上运行此应用程序。

使用代码

随着项目的进展,本节将不断更新。

列表 1. 对应于电话键盘文本到数字编码方案的锯齿数组

        // Jagged array corresponding to phone keypad alpha-numerics
        internal static readonly char[][] CharsetStd = 
        {
            new char[] {'0'},
            new char[] {'1'},
            new char[] {'A','B','C'},
            new char[] {'D','E','F'},
            new char[] {'G','H','I'},
            new char[] {'J','K','L'},
            new char[] {'M','N','O'},
            new char[] {'P','Q','R','S'},
            new char[] {'T','U','V'},
            new char[] {'W','X','Y','Z'}
        };

请注意,上面显示的锯齿数组的第一个索引对应于电话键盘数字。

关注点

拟议应用程序实现了通过标准 SQL/T-SQL 结合独特的高度优化的并行(通过 TPL 进行多线程)算法执行的各种数据操作,利用了目标 AIO 平台强大的计算能力,该平台由 Intel 的多核 CPU 驱动。它包括作者引入到各种开发者社区的多个创新解决方案,并且已经部分讨论过,再加上一套独特且首次在拟议应用程序中实现的解决方案和技巧。上述创新的部分列表如下: 

  • 独特专有的搜索算法,实现为并行函数
  • 独特专有的英语词典数据库,包含最多 7 个字母的单词
  • 独特专有的俄语词典数据库,包含最多 7 个字母的单词 
  • 独特的无边框 WPF 窗口设计/布局和调整大小解决方案
  • 专有的 SQL CE 数据访问库扩展
  • 独特专有的问答引擎
  • 独特专有的纽约问答内容
  • 独特专有的 Semaphon™ 抽奖引擎 
国际扩展

拟议应用程序实现了一个独特的专有俄语词典数据库,包含最多 7 个字母的单词,可以使用拉丁字符集显示,因此可以使用标准电话键盘输入,例如:单词 'CTEHA'(在俄语中意为“墙”)由于拉丁/西里尔字符集中的某些图形相似性。

动态主题选择器

Semaphon SP-300 应用程序实现了多个用户可选主题,包括几种“时尚”的半透明主题。主题是用 XAML 编程的,并存储在单独的文件中,例如:Dark.xaml、Light.xaml、Navy.xaml。以下 XAML 片段显示了如何在 Windows 级别添加主题(注意:也可以在应用程序级别完成)。

 

       <Window.Resources>
            <ResourceDictionary>
                <ResourceDictionary.MergedDictionaries>
                    <ResourceDictionary Source="Themes\Main\Dark.xaml"/>
                </ResourceDictionary.MergedDictionaries>
            </ResourceDictionary>
        </Window.Resources>

为了以编程方式切换主题,实现了一个控件按钮事件处理程序,如下所示。

        #region private method: Set Window Theme
        /// <summary>
        /// relative path to Theme files
        /// </summary>
        private readonly Dictionary<int, string> _dThemesUri = new Dictionary<int, string>  { 
            { 0, _themeDark }, 
            { 1, _themeLight }, 
            { 2, _themeBeige },
            { 3, _themeBeigeT },
            { 4, _themeGreenT },
            { 5, _themeNavy },
            { 6, _themeNavyT },
            { 7, _themePinkT },
            { 8, _themeRedT },
            { 9, _themeWoodT },
            { 10, _themeGhost}
        };
 
        /// <summary>
        /// Set this  Window Theme resource dictionary
        /// </summary>
        /// <param name="ThemeCode">bool</param>
        private void SelectTheme(int ThemeCode)
        {
            try
            {
                // prefix to the relative Uri for Theme resources (xaml file)
                string _prefix = String.Concat(typeof(App).Namespace, ";component/");

                // clear all resource dictionaries in this window
                // Note: on app level use: Application.Current.Resources.MergedDictionaries.Clear();
                this.Resources.MergedDictionaries.Clear();

                // add resource theme dictionary to this window
                // Note: on app level use: Application.Current.Resources.MergedDictionaries.Add
                this.Resources.MergedDictionaries.Add
                (
                    new ResourceDictionary { Source = new Uri(String.Concat(_prefix + _dThemesUri[ThemeCode]), UriKind.Relative) }
                );
            }
            catch { }
        }
        #endregion

以下演示屏幕截图展示了 Semaphon SP-300 当前版本的示例主题和多语言支持功能

 

图 6 Semaphon SP-300 默认“深色”背景主题(语言:英语)

 

图 7 Semaphon SP-300 动态选择的半透明主题  (语言:英语)

 

图 8 Semaphon SP-300 动态选择的“浅色”主题 (语言:德语)

 

图 9 Semaphon SP-300 动态选择的“海军蓝”主题  (语言:德语)

 

图 10 Semaphon SP-300 动态选择的“海军蓝”主题  (语言:俄语)

响应式网页设计

尽管目前有大量选项可用(从 Bootstrap 开始),但出于实际/教学目的,整个响应式 Web 布局设计完全使用纯 CSS 技术“从零开始”完成。响应式 Web UI 设计实践中最大的挑战是与风景和纵向设备方向之间的切换相关的布局转换。下一个问题是处理各种可能的屏幕分辨率。CSS 提供了处理这两个问题的绝佳选项。在非常基本的层面上,只需添加如下所示的 CSS 语句并设置适当的属性值(例如,增加 font-size:2em;) 就可以相当好地完成这项工作。

@media (max-width:720px), (orientation: portrait ) and (max-width:1024px)
{
// add your stuff here
}

注意:可以选择将其声明为:

@media screen 

有点棘手的部分:CSS @media 允许使用 AND 逻辑运算符,但没有 OR 运算符:相反,只需使用逗号(,)将情况聚合起来,就像逻辑 OR 一样。

历史

  • 2002-2014 年,作者开发并发布了多个语音控制和语音增强的工程和办公应用程序
  • 2013 年 2 月:作者开发了 CoolPhone iCP-707 的生产试点
  • 2013 年 8 月:向 Intel® App Innovation Contest 2013(AIO/娱乐)提交文章
  • 2014 年: Semafon™ SP-300 发布 [1,2]
  • 2015 年: Semafon™ Web 应用程序发布

 

图 11 Semaphon SP-300 添加了最小单词长度过滤器(在此演示屏幕截图中设置为 5)

缩略语和首字母缩略词

  • AIO 一体机
  • ASR 自动语音识别
  • BI 商业智能
  • HID 人机接口设备
  • GUI 图形用户界面
  • MMUI 多模态用户界面(多点触控,语音增强)
  • MoMA 现代艺术博物馆(纽约)
  • RIA 富客户端应用程序
  • SQL CE SQL Compact Edition
  • TPL 任务并行库
  • TTS 文本到语音
  • UI 用户界面
  • UX 用户体验
  • WPF Windows Presentation Foundation
  • XAML 可扩展应用程序标记语言
© . All rights reserved.